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 runcomando 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 runcomando 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 runcomando. 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 CMDo de Dockerfile ENTRYPOINTse 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 runcomando 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 runcommand 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 runopciones 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 runcomando, 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 nginxEl 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 -dopción para iniciar un contenedor separado:
docker container run -d nginx050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa
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 --rmopciones le dicen docker runal comando que elimine el contenedor cuando sale automáticamente:
docker container run --rm nginxLa 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 UUIDnombre. De forma predeterminada, si no se establece explícitamente, el daemon de Docker genera automáticamente el nombre del contenedor.
Utilice la --nameopción para asignar un nombre personalizado al contenedor:
docker container run -d --name my_nginx nginxEl 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 -apara enumerar todos los contenedores y ver sus nombres:
docker container lsCONTAINER 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 -popciones de la siguiente manera:
-p host_ip:host_port:container_port/protocol
- Si no
host_ipse especifica, el valor predeterminado es0.0.0.0. - Si no
protocolse especifica, el valor predeterminado es TCP. - Para publicar múltiples puertos, use múltiples
-popciones.
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 nginxPuede verificar que el puerto esté publicado abriendo http://localhost:8080en su navegador o ejecutando el siguiente curl comando en el host de Docker:
curl -I http://localhost:8080La 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 -popciones de la siguiente manera:
-v host_src:container_dest:options
- Puede ser una ruta
host_srcabsoluta a un archivo o directorio en el host o un volumen con nombre. - es una ruta
container_destabsoluta 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.htmlarchivo en él:
mkdir public_htmlecho "Testing Docker Volumes" > public_html/index.html
A continuación, monte el public_htmldirectorio /usr/share/nginx/htmlen el contenedor:
docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginxEn lugar de especificar la ruta absoluta al public_htmldirectorio, usamos el $(pwd)comando, que imprime el directorio de trabajo actual .
Ahora, si escribe http://localhost:8080en su navegador, debería ver el contenido del index.htmlarchivo. También puedes usar curl:
curl http://localhost:8080Testing Docker Volumes
Ejecute el contenedor de forma interactiva
Cuando se trate de procesos interactivos como bash, utilice las opciones -iy -tpara iniciar el contenedor.
Las -itopciones le dicen a Docker que mantenga la entrada estándar adjunta al terminal y asigne un pseudo-tty:
docker container run -it nginx /bin/bashEl 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 runcomando 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 runcomando se usa para crear y ejecutar contenedores Docker.
Si tiene alguna pregunta, por favor deje un comentario a continuación.

0 Comentarios