Cómo iniciar contenedores Docker

Qué tal me llamo Ana. Os traigo un nuevo post sobre el sistema operativo mas molón. Encantado linuxeros.

Por lo tanto, si es nuevo en Docker, es posible que se pregunte cómo iniciar un contenedor de Docker. Déjame mostrarte esto rápidamente.

Puede crear y ejecutar un contenedor con el siguiente comando:

docker run -it -d --name container_name image_name bash

Y luego, si desea iniciar sesión en el contenedor (para ejecutar comandos dentro del contenedor de forma interactiva), puede usar el comando docker exec:

docker exec -it container_ID_or_name /bin/bash

Aquí hay un ejemplo cuando creo un nuevo contenedor con Ubuntu como imagen principal y luego ingreso al contenedor de Ubuntu en funcionamiento y ejecuto el comando ls:

abhishek@nuc:~$ docker run -it -d --name my_container ubuntu bash
7e77640bca686108ad415318278a1fa148e1c84d3b180276e19ec2b970ba9b67
abhishek@nuc:~$ docker exec -it my_container bash
root@7e77640bca68:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@7e77640bca68:/# 

¿Perdió? No te preocupes. Explicaré en detalle qué hacen los dos comandos anteriores y qué es -it opción de docker para ejecución y comando exec.

Cómo iniciar un contenedor Docker

Si desea iniciar un contenedor docker con una imagen específica y un comando específico, puede hacerlo de esta manera:

docker run -it -d --name container_name image_name bash

El comando anterior creará un nuevo contenedor con el nombre especificado a partir de la imagen de la ventana acoplable especificada. El nombre del contenedor es opcional.

La opción -i significa que este será un modo interactivo (puede ingresar comandos en él)

La opción -t le da una terminal (para que pueda usarla como si usara ssh para iniciar sesión en el contenedor).

La opción -d (modo demonio) mantiene el contenedor ejecutándose en segundo plano.

intento es el comando que se ejecuta.

La razón para iniciar bash como comando aquí es que el contenedor no se detendrá inmediatamente.

abhishek@nuc:~$ docker run -it -d ubuntu bash
82766613e7bc0ae98887bb1c776fa0de7f3c4771db9ac7ffc5db5c2c68ab497b
abhishek@nuc:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
82766613e7bc        ubuntu              "bash"              4 seconds ago       Up 3 seconds                            determined_blackburn

En el ejemplo anterior, no especifiqué el nombre del contenedor, por lo que se nombró arbitrariamente determin_blackburn.

Y como puede ver, el contenedor ejecuta el comando bash en segundo plano.

Docker Run vs Start vs Create: se explica la diferencia

Para los usuarios principiantes, términos como iniciar una ventana acoplable, iniciar una ventana acoplable y crear una ventana acoplable pueden resultar confusos. Este artículo explica la diferencia con ejemplos.

¿Qué sucede si no lo ejecuta como un demonio (opción -d) en segundo plano?

Si no usa la opción -d, ejecutar Docker creará un nuevo contenedor y tendrá una terminal interactiva que ejecuta el shell bash.

Como puede ver en el siguiente ejemplo, el contenedor se crea y yo estoy automáticamente en el contenedor (bash shell).

El problema aquí es que si sale del contenedor, el contenedor se detiene.

abhishek@nuc:~$ docker run -it ubuntu bash
root@6098c44f2407:/# echo this is a new container
this is a new container
root@6098c44f2407:/# exit
exit
abhishek@nuc:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
82766613e7bc        ubuntu              "bash"              2 minutes ago       Up 2 minutes                            determined_blackburn
abhishek@nuc:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
6098c44f2407        ubuntu              "bash"              27 seconds ago      Exited (0) 8 seconds ago                       bold_benz
82766613e7bc        ubuntu              "bash"              2 minutes ago       Up 2 minutes                                   determined_blackburn

¿Qué sucede si solo usa la opción -i (interactiva)?

Suponga que solo usa la opción -i. En este caso, verá una cola interactiva, pero si sale de la cola interactiva (usando Ctrl + D o un comando de salida), sale del contenedor y el contenedor se detiene.

abhishek@nuc:~$ docker run -i ubuntu bash
echo "this is interactive"
this is interactive
abhishek@nuc:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
abhishek@nuc:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b6b79a9f7789        ubuntu              "bash"              27 seconds ago      Exited (0) 9 seconds ago                       loving_galileo

¿Qué sucede si solo usa la opción -t (terminal / tty)?

Esta es una situación complicada porque en este caso tendrá un pseudo-terminal (si usa la opción -t), pero no tendrá un STDIN. En otras palabras, no puede ingresar nada, no puede ejecutar un comando en el contenedor como lo hizo antes:

abhishek@nuc:~$ docker run -t ubuntu bash
root@d30e20d5fed4:/# echo hello

^C^C
root@d30e20d5fed4:/# echo "hi"  
^C^C
root@d30e20d5fed4:/# exit
^C^C
root@d30e20d5fed4:/#

Tuve que detener el contenedor desde otra terminal en el caso anterior.

Cómo salir de un contenedor Docker

Este pequeño consejo rápido de la ventana acoplable le muestra cómo salir de un contenedor de la ventana acoplable.

Cómo iniciar un contenedor existente

El comando de ejecución de la ventana acoplable crea un nuevo contenedor a partir de la imagen especificada. Pero, ¿qué pasa cuando ya tienes un contenedor?

Si desea iniciar un contenedor existente, primero debe iniciar el contenedor y luego puede usar la opción exec de la siguiente manera:

docker start existing_container_ID_or_name
docker exec -it existing_container_ID_or_name /bin/bash

Este ejemplo será mejor para su comprensión:

abhishek@nuc:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b6b79a9f7789        ubuntu              "bash"              7 minutes ago       Exited (0) 7 minutes ago                       loving_galileo
abhishek@nuc:~$ docker start b6b79a9f7789
b6b79a9f7789
abhishek@nuc:~$ docker exec -it b6b79a9f7789 bash
root@b6b79a9f7789:/# echo "inside existing container"
inside existing container
root@b6b79a9f7789:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@b6b79a9f7789:/# exit
exit
abhishek@nuc:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b6b79a9f7789        ubuntu              "bash"              8 minutes ago       Up 43 seconds                           loving_galileo

¿Por qué usar bash todo el tiempo?

En todos los ejemplos anteriores, utilicé bash o / bin / bash como comando para ejecutar con el contenedor. Lo usé porque da un contenedor, y cuando inicia el contenedor, gracias al contenedor, puede ejecutar comandos regulares dentro del contenedor como si estuviera en un sistema Linux normal.

Puede pedirle al contenedor que ejecute cada comando, pero tenga en cuenta que el contenedor existe tan pronto como se completa el comando.

Como puede ver en el siguiente ejemplo, esta vez no hay una sesión de terminal interactiva. Ya no estás «dentro» del contenedor porque el comando echo termina casi de inmediato.

abhishek@nuc:~$ docker exec -it b6b79a9f7789 echo hello
hello
abhishek@nuc:~$

De hecho, puede ejecutar otros comandos e ingresar al contenedor después.

En el siguiente ejemplo, creé un nuevo contenedor que funciona servidor nginx en el puerto 80. Desde que lo inicio como un demonio con la opción -d, el contenedor nginx sigue funcionando.

Y luego uso el comando docker exec para obtener un shell bash interactivo, y así es como entro al contenedor nginx (que en realidad es Linux, preconfigurado con nginx).

abhishek@nuc:~$ docker container run -it -d -p 8000:80 nginx
262ca5b17bf8aac5afbfdf66af6383be164cd8488f8cd64c06ee466b4d7462e9
abhishek@nuc:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
262ca5b17bf8        nginx               "nginx -g 'daemon of…"   9 seconds ago       Up 8 seconds        0.0.0.0:8000->80/tcp   zen_kilby
b6b79a9f7789        ubuntu              "bash"                   20 minutes ago      Up 12 minutes                              loving_galileo
abhishek@nuc:~$ docker exec -it 262ca5b17bf8 bash
root@262ca5b17bf8:/# ls
bin  boot  dev	etc  home  lib	lib64  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var
root@262ca5b17bf8:/# 

Espero que comprenda mejor cómo iniciar contenedores Docker y por qué utiliza ciertas opciones.

Si tiene alguna pregunta o sugerencia, hágamelo saber en la sección de comentarios.

Este Blog lo escribimos para colaborar y servir de ayuda a la gente Linux. Esperamos que os guste.

Leave a Reply