Cómo usar el comando Docker Run en Linux

27 feb 2021 5 min di lettura
Cómo usar el comando Docker Run en Linux
Indice dei contenuti

Introducción

Docker es una plataforma que le permite desarrollar, probar e implementar aplicaciones como contenedores portátiles e independientes que funcionan prácticamente en cualquier lugar.

El docker run crea un contenedor a partir de una imagen determinada e inicia el contenedor con un comando determinado. Es uno de los primeros comandos con los que debe familiarizarse cuando comience a trabajar con Docker.

En este artículo, usaremos la imagen oficial de Nginx para mostrar varias formas de ejecutar un contenedor Docker.

Comando Docker Run

El docker run tiene la siguiente sintaxis:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

El nombre de la imagen a partir de la cual se creará el contenedor es el único argumento requerido para el comando docker run 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 CMD Dockerfiles o ENTRYPOINT se ejecuta mientras se ejecuta el contenedor.

A partir de la versión 1.13, la interfaz de línea de comandos de Docker se ha reestructurado y todos los comandos se han agrupado bajo el objeto con el que interactúan.

Dado que el run interactúa con los contenedores, ahora es un subcomando del docker container. La sintaxis del nuevo comando es la siguiente:

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

Aún se admite la sintaxis anterior a 1.13. El docker run es un alias de docker container run. Se anima a los usuarios a utilizar la nueva sintaxis de comandos.

Una lista de todas las docker container run Docker está disponible en la página de documentación de Docker.

Ejecute el contenedor en primer plano

De forma predeterminada, cuando no se da ninguna opción al docker run, 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 están vinculados a la sesión del terminal.

docker container run nginx

La salida del proceso nginx se mostrará en su terminal. Dado que no hay conexión con el servidor web, el terminal está vacío.

Para detener el contenedor, finalice el proceso de Nginx en ejecución presionando CTRL+C

Ejecute el contenedor en modo independiente

Para mantener el contenedor en ejecución cuando salga de la sesión de terminal, inícielo en modo separado. Esto es similar a ejecutar un proceso de Linux en segundo plano.

Utilice la -d para iniciar un contenedor eliminado:

docker container run -d nginx

El mensaje de salida debería verse así:

121f93h9139d4b091nds4908nd47190284n71093d7n419dn7903124n7d19023a

El contenedor desconectado se cerrará una vez que se complete el proceso raíz.

Puede enumerar los contenedores en ejecución mediante el comando docker container ls

Para adjuntar la terminal al proceso principal del contenedor separado, use el comando docker container attach

Retire el contenedor After Exit

De forma predeterminada, cuando el contenedor está cerrado, su sistema de archivos persiste en el sistema host.

Las --rm dicen al docker run que elimine el contenedor cuando sale automáticamente:

docker container run --rm nginx

Es posible que la imagen de Nginx no sea el mejor ejemplo para limpiar el sistema de archivos del contenedor después de salir del contenedor. Esta opción se usa generalmente en contenedores en primer plano que realizan tareas a corto plazo, como pruebas de bases de datos o copias de seguridad.

Establecer el nombre del contenedor

En Docker, cada contenedor se identifica por su UUID y su nombre. De forma predeterminada, si no se establece explícitamente, el daemon de Docker genera automáticamente el nombre del contenedor.

Utilice la --name para asignar un nombre personalizado al contenedor:

docker container run -d --name my_nginx nginx

El nombre del contenedor debe ser exclusivo. Si intenta iniciar otro contenedor con el mismo nombre, se mostrará un error similar al siguiente:

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 -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 546d4fe312fe nginx "nginx -g 'daemon of…" 23 seconds ago Up 23 seconds 80/tcp my_nginx

Los nombres significativos son útiles para hacer referencia al contenedor dentro de una red Docker o cuando se ejecutan comandos de la CLI de Docker.

Publicar las puertas del contenedor

De forma predeterminada, si no se publican puertos, solo se puede acceder al proceso que se ejecuta en el contenedor desde dentro del contenedor.

Publicar puertos significa vincular puertos de contenedor a puertos de computadora host para que los puertos estén disponibles para servicios fuera de Docker.

Para publicar un puerto, use la -p siguiente manera:

-p host_ip:host_port:container_port/protocol
  • Si host_ip, el valor predeterminado es 0.0.0.0.
  • Si protocol, el valor predeterminado es TCP.
  • Para publicar varios puertos, use varias opciones -p

Para asignar el puerto TCP 80 (nginx) en el contenedor al puerto 8080 en la interfaz de host local del host, ejecute:

docker container run --name web_server -d -p 8080:80 nginx

Puede verificar que el puerto está publicado abriendo http://localhost:8080 en el navegador o ejecutando el curl en el host de Docker:

curl -I http://localhost:8080

La salida se verá así:

HTTP/1.1 200 OK
 Server: nginx/1.17.6
 Date: Tue, 23 Nov 2019 20:13:11 GMT
 Content-Type: text/html
 Content-Length: 612
 Last-Modified: Tue, 11 Nov 2019 11:56:01 GMT
 Connection: keep-alive
 ETag: "4dd1r677-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 conservar los datos y compartirlos en varios contenedores.

Para crear y administrar volúmenes, use la -p siguiente manera:

-v host_src:container_dest:options
  • El host_src puede ser una ruta absoluta a un archivo o directorio en el host o un volumen con nombre.
  • El container_dest es una ruta absoluta a un archivo o directorio en el contenedor.
  • Las opciones pueden ser rw (lectura-escritura) y ro (solo lectura). Si no se especifica ninguna opción, el valor predeterminado es rw.

Para explicar cómo funciona esto, creemos un directorio en el host e insertemos un index.html en él:

mkdir public_html
echo "Testing Docker Volumes" > public_html/index.html

Luego, monte el public_html en el contenedor /usr/share/nginx/html

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, usamos el $(pwd), que imprime el directorio de trabajo actual.

Ahora, si escribe http://localhost:8080 en su navegador, debería ver el contenido del archivo index.html También puedes usar curl:

curl http://localhost:8080
Testing Docker Volumes

Ejecute el contenedor de forma interactiva

Cuando trabaje con procesos interactivos como bash, use las -i y -t para iniciar el contenedor.

Las -it dicen a Docker que mantenga la entrada estándar conectada al terminal y asigne un pseudo-tty:

docker container run -it nginx /bin/bash

El shell Bash del contenedor se conectará a la terminal y el símbolo del sistema cambiará:

root@1d192392e:/#

Ahora puede interactuar con el shell del contenedor y ejecutar cualquier comando dentro de él.

En este ejemplo, usamos /bin/bash como argumento para el docker run que se ejecutó en lugar del especificado en Dockerfile.

Conclusión

Docker es el estándar para el empaquetado e implementación de aplicaciones y un componente esencial de CI /CD, automatización y DevOps.

El docker container run se usa para crear y ejecutar contenedores Docker.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.