GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo ejecutar contenedores Docker

Entonces, si es nuevo en Docker, es posible que se pregunte cómo ejecutar un contenedor docker. Déjame mostrarte eso 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 ingresar al 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 en el que creo un nuevo contenedor con Ubuntu como imagen base y luego entro en el contenedor de Ubuntu en ejecución y ejecuto el comando ls:

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

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

Cómo ejecutar el contenedor docker

Si desea ejecutar un contenedor docker con una imagen determinada 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 de la imagen acoplable especificada. El nombre del contenedor es opcional.

  • La opción -i significa que será un modo interactivo (puede ingresar comandos)
  • La opción -t le da una terminal (para que pueda usarla como si usara ssh para ingresar al contenedor).
  • La opción -d (modo daemon) mantiene el contenedor ejecutándose en segundo plano.
  • golpe es el comando que ejecuta.

La razón para ejecutar bash como comando aquí es que el contenedor no se detendrá de inmediato.

[email protected]:~$ docker run -it -d ubuntu bash
82766613e7bc0ae98887bb1c776fa0de7f3c4771db9ac7ffc5db5c2c68ab497b
[email protected]:~$ 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 nombré el contenedor, por lo que se denominó al azar determin_blackburn.

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

Docker Run vs Start vs Create:diferencia explicada Para un principiante de docker, términos como docker start, docker run y docker create pueden ser confusos. Este artículo explica la diferencia con ejemplos. Manual de LinuxAbhishek Prakash

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

Si no usa la opción -d, docker run creará un nuevo contenedor y tendrá una terminal en modo interactivo ejecutando bash shell.

Como puede ver en el ejemplo a continuación, se crea el contenedor y estoy automáticamente dentro del contenedor (bash shell).

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

[email protected]:~$ docker run -it ubuntu bash
[email protected]:/# echo this is a new container
this is a new container
[email protected]:/# exit
exit
[email protected]:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
82766613e7bc        ubuntu              "bash"              2 minutes ago       Up 2 minutes                            determined_blackburn
[email protected]:~$ 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)?

Digamos que solo usas la opción -i. En ese caso, verá un aviso interactivo, pero si sale del aviso interactivo (usando Ctrl+D o el comando de salida), sale del contenedor y el contenedor se detiene.

[email protected]:~$ docker run -i ubuntu bash
echo "this is interactive"
this is interactive
[email protected]:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[email protected]:~$ 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)?

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

[email protected]:~$ docker run -t ubuntu bash
[email protected]:/# echo hello

^C^C
[email protected]:/# echo "hi"  
^C^C
[email protected]:/# exit
^C^C
[email protected]:/#

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

Cómo salir de un contenedor de DockerEste pequeño consejo rápido de Docker muestra cómo salir de un contenedor de Docker. Manual de LinuxAbhishek Prakash

Cómo ejecutar un contenedor existente

El comando docker run crea un nuevo contenedor a partir de la imagen especificada. Pero, ¿qué pasa cuando ya tienes un contenedor?

Si desea ejecutar un contenedor existente, primero debe iniciar el contenedor y luego puede usar la opción exec como esta:

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:

[email protected]:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b6b79a9f7789        ubuntu              "bash"              7 minutes ago       Exited (0) 7 minutes ago                       loving_galileo
[email protected]:~$ docker start b6b79a9f7789
b6b79a9f7789
[email protected]:~$ docker exec -it b6b79a9f7789 bash
[email protected]:/# echo "inside existing container"
inside existing container
[email protected]:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[email protected]:/# exit
exit
[email protected]:~$ 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, he usado bash o /bin/bash como el comando que se ejecuta con el contenedor. Lo usé porque proporciona un shell y cuando ejecuta el contenedor, gracias al shell, puede ejecutar comandos regulares dentro del contenedor como si estuviera dentro de un sistema Linux normal.

Puede pedirle al contenedor que ejecute cualquier 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á 'dentro' del contenedor porque el comando de eco finaliza casi de inmediato.

[email protected]:~$ docker exec -it b6b79a9f7789 echo hello
hello
[email protected]:~$

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

En el siguiente ejemplo, creé un nuevo contenedor que ejecuta el servidor nginx en el puerto 80. Dado que lo ejecuto como un demonio con la opción -d, el contenedor nginx continúa ejecutándose.

Y luego uso el comando docker exec para obtener un bash shell interactivo y así ingresar dentro del contenedor nginx (que es básicamente un Linux preconfigurado con nginx).

[email protected]:~$ docker container run -it -d -p 8000:80 nginx
262ca5b17bf8aac5afbfdf66af6383be164cd8488f8cd64c06ee466b4d7462e9
[email protected]:~$ 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
[email protected]:~$ docker exec -it 262ca5b17bf8 bash
[email protected]:/# ls
bin  boot  dev	etc  home  lib	lib64  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var
[email protected]:/# 

Espero que comprenda mejor cómo ejecutar contenedores docker y por qué usa ciertas opciones.

Si tiene preguntas o sugerencias, hágamelo saber en la sección de comentarios.


Docker
  1. ¿Cómo ejecutar un programa dentro de un contenedor Docker?

  2. Cómo compartir datos entre contenedores Docker

  3. Cómo listar contenedores Docker

  4. Introducción a los contenedores Docker

  5. Cómo instalar, ejecutar y eliminar aplicaciones dentro de contenedores Docker:parte 2

Cómo ejecutar Grafana en un contenedor Docker

Cómo usar SSH en contenedores Docker [paso a paso]

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Cómo nombrar o renombrar contenedores Docker

Cómo gestionar contenedores Docker