El comando docker run se usa para lanzar y ejecutar contenedores. Aprendiendo a usar docker run
El comando es una recomendación para cualquier desarrollador que quiera familiarizarse con Docker.
Cuando se trabaja con Docker, los desarrolladores de software utilizan principalmente el comando ‘docker run’ para:
- Crea un contenedor a partir de una imagen de ventana acoplable determinada
- Ejecute un contenedor con un nombre opcional
- Ejecutar un contenedor en primer plano
- Ejecute un contenedor en el modo separado
- Ejecutar un contenedor en modo interactivo
- Publicar puertos de contenedor en la máquina host
- Comparta datos entre contenedores y máquina host
- Retire un recipiente una vez que se detuvo
Comando de ejecución de Docker
La sintaxis del comando:
docker run [options] image-name [command] [arg...]
Para ejecutar un contenedor de la ventana acoplable, simplemente puede ejecutar el siguiente comando, asumiendo que ya ha instalado la ventana acoplable:
docker run image-name
Donde:
image-name podría ser una imagen de la ventana acoplable en su máquina local o ser extraída del registro en línea como Docker Hub y Quay.io.
En el siguiente example, ejecutará un contenedor desde una imagen pública ‘hello-world’ que se encuentra en Docker Hub.
$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
La primera vez que ejecuta el contenedor, el demonio de Docker extrae la imagen ‘hello-world’ del Docker Hub. Luego, crea un nuevo contenedor a partir de esa imagen y transmite la salida a su terminal. A partir de ahora, la imagen se descargó en su máquina local. Puede enumerar todas las imágenes de la ventana acoplable ejecutando:
$ sudo docker image ls
Producción:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e2eef94cd6b 9 days ago 73.9MB
nginx latest 4bb46517cac3 2 weeks ago 133MB
alpine latest a24bb4013296 3 months ago 5.57MB
truongnh1992/go latest 57b4af3567ac 3 months ago 7.41MB
hello-world latest bf756fb1ae65 7 months ago 13.3kB
La próxima vez que ejecute esa imagen, será más rápida que la primera y podrá usar el ID de IMAGEN en lugar del nombre de la imagen. Para example:
$ sudo docker run bf756fb1ae65
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Nota: Desde la versión 1.13 de Docker, debido a la nueva sintaxis de su lanzamiento, usamos ‘docker container run’ en lugar de ‘docker run’.
Se recomienda anteponer el comando docker run con sudo o la otra solución sin sudo.
Ejecutar un contenedor con un nombre definido
Cuando ejecuta un contenedor con la sintaxis básica ‘docker container run’, Docker generará aleatoriamente un nombre para cada contenedor, como puede ver a continuación:
$ sudo docker container ls -a
Producción:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
941b67537bbb ubuntu "/bin/bash" 4 seconds ago Exited (0) 3 seconds ago musing_elgamal
a7b197b56d2c bf756fb1ae65 "/hello" About a minute ago Exited (0) About a minute ago determined_faraday
0b40e331161e hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago nervous_sammet
Si desea asignar explícitamente un nombre para su contenedor, ejecutemos el comando con la siguiente sintaxis:
$ docker container run --name container-name image-name
Para example:
$ sudo docker container run --name hello-linoxide hello-world
Producción:
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb2f0c9cc658 hello-world "/hello" 21 seconds ago Exited (0) 20 seconds ago hello-linoxide
...
Ejecutar un contenedor en primer plano
Cuando trabajamos con contenedores Docker, hay dos modos de ejecutarlos: modo adjunto y modo separado.
De forma predeterminada, Docker ejecuta el contenedor en primer plano. Significa que el proceso contenedor se adjunta a la sesión de terminal y muestra el resultado. Si el contenedor aún se está ejecutando, no devolverá el símbolo del sistema.
Para example:
$ sudo docker container run nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
Ejecute un contenedor en el modo separado
Si desea ejecutar ese contenedor en un proceso en segundo plano (modo separado), usemos el -d
opción:
$ sudo docker container run -d nginx
4fd8f2933eafaebcc75ef4fe6d0a961f76d8fdbf64383caff7f422a25c60951f
Ejecutar un contenedor en modo interactivo
Docker admite la ejecución de un contenedor en modo interactivo. Gracias a esta característica, puede ejecutar comandos dentro de un contenedor con un shell.
Utilizando el -it
opción que sigue con ‘/ bin /bash’o’ / bin / sh ‘para iniciar el modo interactivo, para example:
$ sudo docker container run -it ubuntu /bin/bash
root@d99e70bff763:/# echo $0
/bin/bash
$ sudo docker container run -it ubuntu /bin/sh
# echo $0
/bin/sh
Reenvío de puertos de un contenedor
De forma predeterminada, para acceder al proceso que se ejecuta dentro de un contenedor, debe ingresar a su interior. Si quieres acceder a él desde el exterior, abramos un puerto. Al publicar puertos, puede asignar los puertos del contenedor a los puertos de su máquina host usando -p
opción de la siguiente manera:
$ dock container run -p host-port:container-port image
Para example, para mapear el puerto 80 del contenedor nginx al puerto 8080 en la máquina host, ejecute:
$ sudo docker container run -d -p 8080:80 nginx
cd85a291dab1ff92fa2ee6275446f758baa8322de2b706f7b581a54825142c5b
Ahora, usemos ‘curl’para recuperar el contenido de localhost: 8080
$ curl localhost:8080
Volúmenes de montaje de un contenedor
Los datos en un contenedor son efímeros, ya no existen cuando se detiene el contenedor. Si desea mantener los datos en el contenedor de manera persistente, debe montarlos en un volumen de almacenamiento compartido.
Usemos -v
opción de la siguiente manera para volúmenes de montaje:
$ docker container run -v host-machine-location:container-storage image
Para example, montemos el directorio ‘share-data’ en su máquina host en ‘/ home’ en el contenedor:
$ mkdir share-data/
$ echo "Hello linoxide readers" > share-data/test.txt
$ sudo docker container run -it -v $(pwd)/share-data:/home alpine
Producción:
/ # ls /home/
test.txt
/ # cat /home/test.txt
Hello linoxide readers
Retire un recipiente una vez que se detuvo
De forma predeterminada, cuando un contenedor se detiene, su sistema de archivos aún permanece en la máquina host. Consumen una gran cantidad de almacenamiento. Si desea eliminar automáticamente el contenedor después de que salga, use --rm
opción:
$ docker container run --rm image
Para example, ejecutando un contenedor Docker sin --rm
opción:
$ sudo docker container run ubuntu
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad348fb61463 ubuntu "/bin/bash" 8 seconds ago Exited (0) 6 seconds ago distracted_hoover
Cuando usas --rm
opción, una vez detenido el contenedor, se eliminará automáticamente.
$ sudo docker container run --rm ubuntu
$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Conclusión
Docker es una plataforma de código abierto que permite a los desarrolladores de software crear, implementar y administrar aplicaciones en contenedores. Docker es una herramienta realmente poderosa para cualquier desarrollador, especialmente para ingenieros de DevOps. Dominar la forma de usar los comandos ‘docker container run’ es la clave para descubrir el poder de Docker.
Gracias por leer y deje su sugerencia en la sección de comentarios a continuación.