Docker es una plataforma que le permite desarrollar, probar e implementar aplicaciones como contenedores portátiles y autosuficientes que se ejecutan prácticamente en cualquier lugar.
El docker run
comando crea un contenedor a partir de una imagen dada e inicia el contenedor usando un comando dado. Es uno de los primeros comandos con los que debe familiarizarse al comenzar a trabajar con Docker.
En este artículo, usaremos la imagen oficial de Nginx para mostrar varias formas de ejecutar un contenedor Docker.
Comando de ejecución de Docker
El docker run
comando toma la siguiente forma:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
El nombre de la imagen a partir de la cual se debe crear el contenedor es el único argumento necesario para el docker run
comando. Si la imagen no está presente en el sistema local, se extrae del registro.
Si no se especifica ningún comando, el comando especificado en las instrucciones CMD
o de Dockerfile ENTRYPOINT
se ejecuta al ejecutar el contenedor.
A partir de la versión 1.13, la CLI de Docker se ha reestructurado. Todos los comandos se han agrupado bajo el objeto con el que interactúan.
Dado que el run
comando interactúa con los contenedores, es un subcomando de docker container
. La sintaxis del nuevo comando es la siguiente:
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
La sintaxis anterior a 1.13 todavía es compatible. Debajo del capó, docker run
command es un alias para docker container run
. Se anima a los usuarios a utilizar la nueva sintaxis de comandos.
Puede encontrar una lista de todas las docker container run
opciones en la página de documentación de Docker .
Ejecute el contenedor en primer plano
De forma predeterminada, cuando no se proporciona ninguna opción al docker run
comando, el proceso raíz se inicia en primer plano. Esto significa que la entrada, la salida y el error estándar del proceso raíz se adjuntan a la sesión de terminal.
docker container run nginx
El resultado del proceso nginx se mostrará en su terminal. Como no hay conexiones con el servidor web, la terminal está vacía.
Para detener el contenedor, termine el proceso Nginx en ejecución presionando CTRL+C
.
Ejecute el contenedor en modo separado
Para mantener el contenedor en ejecución cuando salga de la sesión de terminal, inícielo en un modo separado. Esto es similar a ejecutar un proceso de Linux en segundo plano .
Utilice la -d
opción para iniciar un contenedor separado:
docker container run -d nginx
050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa
El contenedor separado se detendrá cuando finalice el proceso raíz.
Puede enumerar los contenedores en ejecución con el docker container ls
comando.
Para adjuntar su terminal al proceso raíz del contenedor separado, use el docker container attach
comando.
Retire el contenedor después de la salida
De forma predeterminada, cuando el contenedor sale, su sistema de archivos persiste en el sistema host.
Las --rm
opciones le dicen docker run
al comando que elimine el contenedor cuando sale automáticamente:
docker container run --rm nginx
La imagen de Nginx puede no ser el mejor ejemplo para limpiar el sistema de archivos del contenedor después de que el contenedor sale. Esta opción generalmente se usa en contenedores de primer plano que realizan tareas a corto plazo, como pruebas o copias de seguridad de la base de datos.
Establecer el nombre del contenedor
En Docker, cada contenedor se identifica por su UUID
nombre. De forma predeterminada, si no se establece explícitamente, el daemon de Docker genera automáticamente el nombre del contenedor.
Utilice la --name
opción para asignar un nombre personalizado al contenedor:
docker container run -d --name my_nginx nginx
El nombre del contenedor debe ser único. Si intenta iniciar otro contenedor con el mismo nombre, obtendrá un error similar a este:
docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9...c". You have to remove (or rename) that container to be able to reuse that name.
Ejecute docker container ls -a
para enumerar todos los contenedores y ver sus nombres:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d695c1f5ef4 nginx "nginx -g 'daemon of…" 36 seconds ago Up 35 seconds 80/tcp my_nginx
Los nombres significativos son útiles para hacer referencia al contenedor dentro de una red de Docker o cuando se ejecutan comandos de la CLI de Docker.
De forma predeterminada, si no se publican puertos, solo se puede acceder al proceso que se ejecuta en el contenedor desde el interior del contenedor.
Publicar puertos significa asignar puertos de contenedores a los puertos de la máquina host para que los puertos estén disponibles para los servicios fuera de Docker.
Para publicar un puerto, use las -p
opciones de la siguiente manera:
-p host_ip:host_port:container_port/protocol
- Si no
host_ip
se especifica, el valor predeterminado es0.0.0.0
. - Si no
protocol
se especifica, el valor predeterminado es TCP. - Para publicar múltiples puertos, use múltiples
-p
opciones.
Para asignar el puerto TCP 80 (nginx) en el contenedor al puerto 8080 en la interfaz host localhost, ejecutaría:
docker container run --name web_server -d -p 8080:80 nginx
Puede verificar que el puerto esté publicado abriendo http://localhost:8080
en su navegador o ejecutando el siguiente curl
comando en el host de Docker:
curl -I http://localhost:8080
La salida se verá algo como esto:
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Tue, 26 Nov 2019 22:55:59 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
Connection: keep-alive
ETag: "5dd3e500-264"
Accept-Ranges: bytes
Compartir datos (volúmenes de montaje)
Cuando se detiene un contenedor, se eliminan todos los datos generados por el contenedor. Los volúmenes de Docker son la forma preferida de hacer que los datos persistan y compartirlos en varios contenedores.
Para crear y administrar volúmenes, use las -p
opciones de la siguiente manera:
-v host_src:container_dest:options
- Puede ser una ruta
host_src
absoluta a un archivo o directorio en el host o un volumen con nombre. - es una ruta
container_dest
absoluta a un archivo o directorio en el contenedor. - Las opciones pueden ser
rw
(lectura-escritura) yro
(solo lectura). Si no se especifica ninguna opción, el valor predeterminado esrw
.
Para explicar cómo funciona esto, creemos un directorio en el host y coloquemos un index.html
archivo en él:
mkdir public_html
echo "Testing Docker Volumes" > public_html/index.html
A continuación, monte el public_html
directorio /usr/share/nginx/html
en el contenedor:
docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx
En lugar de especificar la ruta absoluta al public_html
directorio, usamos el $(pwd)
comando, que imprime el directorio de trabajo actual .
Ahora, si escribe http://localhost:8080
en su navegador, debería ver el contenido del index.html
archivo. También puedes usar curl
:
curl http://localhost:8080
Testing Docker Volumes
Ejecute el contenedor de forma interactiva
Cuando se trate de procesos interactivos como bash
, utilice las opciones -i
y -t
para iniciar el contenedor.
Las -it
opciones le dicen a Docker que mantenga la entrada estándar adjunta al terminal y asigne un pseudo-tty:
docker container run -it nginx /bin/bash
El shell Bash del contenedor se adjuntará a la terminal y el símbolo del sistema cambiará:
root@1da70f1937f5:/#
Ahora, puede interactuar con el shell del contenedor y ejecutar cualquier comando dentro de él.
En este ejemplo, proporcionamos un comando ( /bin/bash
) como argumento para el docker run
comando que se ejecutó en lugar del especificado en el Dockerfile.
Conclusión
Docker es el estándar para empaquetar e implementar aplicaciones y un componente esencial de CI/CD, automatización y DevOps.
El docker container run
comando se usa para crear y ejecutar contenedores Docker.
Si tiene alguna pregunta, por favor deje un comentario a continuación.
0 Comentarios