Correr Linux Comandos dentro de contenedores con Docker Compose

Hay dos formas de ejecutar Linux comandos dentro de los contenedores de Docker: usa el comando exec de Docker para ejecutarlo desde fuera del contenedor o ingresa primero al contenedor en ejecución y luego ejecuta el comando como lo hace de forma regular Linux Terminal.

Aejecutar un Linux comando en un contenedor Docker inmediatamentesin entrar, puedes usar eldocker execcomando como este:

docker exec container_name_or_ID bash -c "<linux command>"

Dependiendo del tipo de shell disponible dentro del contenedor, el comando puede diferir según el caso. Podría sershen lugar debashtambién.

Similarmente,puede ingresar al shell de un contenedor y ejecutar Linux comandosen eso.

docker exec container_name_or_ID bash

No solo Docker, sino que Docker Compose también puede ser muy útil, especialmente cuando está ejecutando sus servicios de aplicaciones web (que es la forma preferida en los sistemas de producción) especificados de acuerdo con sus archivos yml, que residen en los directorios respectivos.

Déjame discutirlo en detalle.

Método 1: Comandos de shell de contenedor directo usando Docker Compose

Para los principiantes, la forma más conocida es primero hacer un cd en el directorio de servicios y luego ejecutar elexecdominio.

digamos, por exampleprimero “cd” en el directorio de servicio:

[email protected]:~$ cd web-app-service
[email protected]:~/web-app-service$

En esta etapa, puede ejecutar el mismoexeccomando (mostrado en la introducción example) usandodocker-compose. Así es cómo:

[email protected]:~$ docker-compose exec web-app bash -c "<linux command>"

La ventaja aquí, en este caso, es que no necesita verificar el nombre del contenedor correspondiente (condocker ps) relevante para el servicio de aplicación web que está ejecutando. Usas directamente el nombre del servicioweb-appque se especificó dentro deldocker-compose.ymldentro del directorio del servicio mientras estaba configurado.

Pero, ¿qué sucede si no desea acceder a estos directorios de servicios de aplicaciones web cada vez durante el mantenimiento/solución de problemas? Veamos cómo:

Para exampleel siguiente comando ejecuta “docker-compose exec” desde cualquier ubicación de PWD para el servicio de aplicación web previsto, que de lo contrario tendría que ejecutarse mediante cding en el directorio de composición de docker del servicio:

[email protected]:~$ docker-compose -f ~/web-app-service/docker-compose.yml exec web-app bash -c "<linux command>"

A través de una sola línea, puede especificar la ubicación del archivo YML y ejecutar el comando para el servicio específico. ¿No es esto interesante? Entonces, no soloexec, puede ejecutar cualquiera de los diversos comandos secundarios de Docker Compose de su preferencia, para cualquier aplicación web de esta manera. Esto puede ser muy útil para escalar la solución de problemas más rápido de lo habitual.

Método 2. Contenedor Indirecto Shell Comandos usando Docker Compose

Por comandos de shell indirectos, me refiero a ingresar primero al shell del contenedor antes de ingresar el comando dentro de él. Eso también se puede hacer usando Docker Compose. Nuevamente, primero “cd” en el directorio de servicios:

[email protected]:~$ cd service
[email protected]:~/service$

Una vez dentro de este PWD, puede ingresar al shell del contenedor del servicio:

[email protected]:~/service$ docker-compose exec web-app bash
[email protected]:/app#

Ahora puede ejecutar el comando que desee dentro del contenedor. Pero veamos de nuevo cómo hacerlo directamente desde cualquier ubicación (PWD):

[email protected]:~$ docker-compose -f ~/web-app-service/docker-compose.yml exec web-app bash

Esto es especialmente útil cuando un comando directo no es suficiente y desea evaluar o solucionar algún problema dentro del contenedor en ejecución.

Resumen

Puede haber varias formas de ejecutar comandos dentro de contenedores. Cuál de ellos es más efectivo honestamente depende del escenario del caso de uso y su criticidad dentro de una situación del mundo real.

Si está interesado en obtener más información sobre los comandos de Docker, este artículo es para usted.

Espero que estos consejos rápidos le hayan resultado útiles para Linux y Docker. Sus comentarios y opiniones son siempre bienvenidos.

Actualizaciones del boletín

Ingrese su dirección de correo electrónico a continuación para suscribirse a nuestro boletín