docker run

El comando docker run crea y arranca un contenedor para ejecutar unos comandos ya establecidos en el Dockerfile o los que se pasen como un parámetro.

De estos, sólo tiene un parámetro obligatorio que es el nombre de la imagen que usará para crear el contenedor.

Tanto la imagen, el comando a ejecutar y otras opciones como los volúmenes se pasan como parámetros y prevalecen sobre la información preconfigurada en la imagen (el Dockerfile).

Crear y arrancar un contenedor

Para crear y arrancar un contenedor utilizando la imagen de ubuntu:

$ docker run ubuntu

Este comando creará un contenedor con un nombre aleatorio que puedes visualizar al ejecutar el comando docker ps.

Si ejecutas el comando anterior y listas los contenedores en ejecución verás que no está en marcha. Aparece con status exited:

$ docker ps -a --format "{{.ID}}: {{.Status}}"
5e2b9cf0e282: Exited (0) 0 minutes ago

¿Qué sucede? docker run creó el contenedor, lo arrancó y luego lo paro. **¿Por qué?**Es debido a que docker ejecuta todos los comandos establecidos y al finalizar para el contenedor.

¿Cómo mantener en marcha un contenedor?

#1. Modo segundo plano (detached, -d)

Es necesario que el contenedor ejecute un proceso de forma continúa, como un programa residente o demonio.

Un servidor web es un buen ejemplo de ello:

docker run -d -p 80:80 nginx -g 'daemon off;'

Para arrancar el contenedor en modo desatendido se utiliza la opción -d.

#2. Modo primer plano (interactivo, -i)

La segunda opción es arrancar un contenedor y abrir una consola donde interactuar escribiendo comandos. Así mientas este abierta la consola el contenedor seguirá en marcha:

$ docker run -it ubuntu bash
root@4990bb2113c7:/# 

Para ejecutar una shell en el contenedor tienes que utilizar las opciones -i -t para arrancar el contenedor en modo interactivo (-i) y asociar un tty (-t) y así poder ver la consola y escribir comandos.

#3. Supervisord

Por último, Supervidord es un sistema cliente/servidor que monitoriza un proceso que le indiquemos y en el caso de que muera lo arranca automáticamente.

Diferencia entre docker start y docker run

Es fácil confundir los comandos docker run y docker start. La diferencia entre ellos es que mientras docker run crea y arranca un container nuevo, docker start arranca un contenedor que ya existe.

Más ejemplos útiles

#1. Exponer puertos (-p)

$ docker run -d -p 80:8080 nginx

#2. Modo privileged, con acceso a todos los dispositivos

$ docker run --privileged -it rtorrent:v1 rtorrent   

#3. Montar volúmenes (-v)

$ docker run --name mysql -v /var/lib/mysql:/var/lib/mysql -d mysql

#4. Crear una consola

$ docker run -it ubuntu:latest bash

#5. Ejecutar comandos

$ docker run --name centos-linux -d centos /bin/sh -c "while true; do ping 8.8.8.8; done"

César Maeso


Creative Commons License

Esta obra está bajo una licencia de Creative
Commons Reconocimiento-NoComercial-CompartirIgual
4.0 Internacional
.