Iniciando un Container
Una vez que tenemos las images, podemos usarlas para iniciar containers. En esta receta, iniciaremos un container con la image ubuntu:latest y veremos lo que sucede entre bastidores.
Preparación
Asegúrate de que el demonio de Docker se esté ejecutando en el host y que se pueda conectar a través del cliente de Docker.
Cómo hacerlo…
Podemos iniciar un container usando cualquiera de las siguientes sintaxis:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
NOTA
El comando docker container run es recomendado sobre docker run porque, en la versión 1.13, Docker agrupó lógicamente las operaciones de containers bajo el comando docker container management, por lo que docker run podría quedar obsoleto en el futuro.
Aquí tienes un ejemplo de cómo usar el comando docker container run:
$ docker container run -i -t --name mycontainer ubuntu /bin/bash
Por defecto, Docker selecciona la image con la etiqueta latest:
-
La opción
-interactiveo-iinicia el container en modo interactivo manteniendo la entrada estándar (STDIN) abierta. -
La opción
--ttyo-tasigna unpseudo-ttyy lo adjunta a la entrada estándar.
Así, con el comando anterior, podemos iniciar un container desde la image ubuntu:latest, adjuntar un pseudo-tty, nombrarlo mycontainer y ejecutar el comando /bin/bash. Si no se especifica el nombre, se asignará una cadena aleatoria como nombre.
Además, si la image no está disponible localmente, primero se descargará del registry y luego se ejecutará.
Cómo funciona…
Internamente, Docker hará lo siguiente:
-
Fusionar todas las capas que componen esa image usando UnionFS.
-
Asignar un ID único a un container, que se conoce como Container ID.
-
Asignar un sistema de archivos y montar una capa de lectura/escritura para el container. Cualquier cambio en esta capa será temporal y se descartará si no se confirman.
-
Asignar una interfaz de red tipo puente.
-
Asignar una dirección IP al container.
-
Ejecutar el proceso especificado por el usuario.
Además, con la configuración predeterminada de Docker, crea un directorio (con el ID del container dentro de /var/lib/docker/containers), que contiene información específica del container, como el nombre de host, los detalles de configuración, los registros y /etc/hosts.
Hay más…
Para salir del container, pulsa Ctrl + D o escribe exit. Es similar a salir de una shell, pero esto detendrá el container. Alternativamente, para desvincularse del container, pulsa Ctrl + P + Q. El container desvinculado se desvinculará del terminal, devolverá el control a la shell del host de Docker y esperará el comando docker container attach para volver a vincularse al container.
El comando run crea e inicia el container. Con Docker 1.3 o posterior, es posible simplemente crear el container usando el comando create y ejecutarlo más tarde usando el comando start, como se muestra en el siguiente ejemplo:
$ ID=$(docker container create -t -i ubuntu /bin/bash)
$ docker container start -a -i $ID
El container puede iniciarse en segundo plano, y luego podemos adjuntarnos a él cuando sea necesario. Necesitamos usar la opción -d para iniciar el container en segundo plano:
$ docker container run -d -i -t ubuntu /bin/bash
0df95cc49e258b74be713c31d5a28b9d590906ed9d6e1a2dc75672aa48f28c4f
El comando anterior devuelve el Container ID del container, al que podemos adjuntarnos más tarde, como se muestra a continuación:
$ ID=$(docker container run -d -t -i ubuntu /bin/bash)`
$ docker attach $ID
En el caso anterior, elegimos /bin/bash para ejecutar dentro del container. Si nos adjuntamos al container, obtendremos una shell interactiva. Podemos ejecutar un proceso no interactivo y ejecutarlo en segundo plano para crear un container demonizado, como el siguiente:
$ docker container run -d ubuntu \
/bin/bash -c \
"while [ true ]; do date; sleep 1; done"
Para eliminar el container después de que salga, inicia el container con la opción --rm, como se muestra a continuación:
$ docker run --rm ubuntu date
Tan pronto como el comando date salga, el container será eliminado.
La opción --read-only del comando run montará el sistema de archivos raíz en modo de solo lectura:
$ docker container run --read-only --rm \
ubuntu touch file
touch: cannot touch 'file': Read-only file system
También puedes establecer etiquetas personalizadas para containers, que se pueden usar para agrupar containers basados en etiquetas. Consulta la receta Etiquetado y filtrado de containers en este capítulo para más detalles.
CONSEJO
Un container puede ser referido de tres formas: por su nombre, por su ID corto de container (0df95cc49e25), y por su Container ID (0df95cc49e258b74be713c31d5a28b9d590906ed9d6e1a2dc75672aa48f28c4f).
Consulta también
Consulta la opción help de docker run:
$ docker container run --help
La documentación en el sitio web de Docker se puede encontrar aquí: https://docs.docker.com/engine/reference/commandline/container_run/.