Comandos de Docker Compose: Una guía completaDocker Compose es una herramienta poderosa que permite definir y ejecutar aplicaciones Docker de múltiples contenedores. Utiliza archivos YAML para configurar los servicios de la aplicación y con un solo comando, puedes crear y comenzar todos los servicios desde tu configuración. En esta guía, exploraremos los comandos más utilizados de Docker Compose y sus funcionalidades.1. docker-compose upEste es el comando más básico y comúnmente utilizado en Docker Compose. Inicia todos los servicios definidos en tu archivo docker-compose.yml.```bash docker-compose up ```Para iniciar los servicios en segundo plano, utiliza la opción -d:```bash docker-compose up -d ```2. docker-compose downEste comando detiene y elimina los contenedores, redes, volúmenes e imágenes creados por up.```bash docker-compose down ```3. docker-compose psEnumera los contenedores que se están ejecutando actualmente.```bash docker-compose ps ```4. docker-compose stopDetiene los servicios sin eliminarlos.```bash docker-compose stop ```5. docker-compose startInicia los servicios que fueron detenidos.```bash docker-compose start ```6. docker-compose restartReinicia los servicios.```bash docker-compose restart ```7. docker-compose logsMuestra los registros de los servicios.```bash docker-compose logs ```Para seguir los registros en tiempo real, utiliza la opción -f:```bash docker-compose logs -f ```8. docker-compose execEjecuta un comando en un contenedor en ejecución.```bash docker-compose exec service_name command ```Por ejemplo, para abrir una shell en un contenedor de servicio web:```bash docker-compose exec web bash ```9. docker-compose runEjecuta un comando en un nuevo contenedor.```bash docker-compose run service_name command ```10. docker-compose buildConstruye o reconstruye los servicios.```bash docker-compose build ```11. docker-compose pullExtrae las imágenes de Docker para los servicios.```bash docker-compose pull ```12. docker-compose configValida y muestra la configuración.```bash docker-compose config ```13. docker-compose imagesEnumera las imágenes utilizadas por los servicios.```bash docker-compose images ```14. docker-compose pausePausa los servicios.```bash docker-compose pause ```15. docker-compose unpauseReanuda los servicios pausados.```bash docker-compose unpause ```16. docker-compose portMuestra el puerto público asignado a un puerto privado.```bash docker-compose port service_name private_port ```17. docker-compose topMuestra los procesos principales que se ejecutan en el entorno local.```bash docker-compose top ```18. docker-compose killFuerza el cierre de los servicios.```bash docker-compose kill ```19. docker-compose rmElimina los contenedores detenidos.```bash docker-compose rm ```20. docker-compose scaleEstablece el número de contenedores para un servicio.```bash docker-compose scale service_name=number_of_containers ```Estos comandos cubren la mayoría de las operaciones que necesitarás realizar con Docker Compose. Recuerda que puedes combinar estos comandos con varias opciones para adaptarlos a tus necesidades específicas. Docker Compose es una herramienta poderosa que simplifica la gestión de aplicaciones de múltiples contenedores, haciendo que el desarrollo y el despliegue sean mucho más eficientes.
Docker ha revolucionado la forma en que se desarrollan, despliegan y gestionan las aplicaciones. En el corazón de esta transformación se encuentra Docker Compose, una herramienta poderosa que permite a los desarrolladores definir y ejecutar aplicaciones Docker multi-contenedor. En esta guía completa, profundizaremos en los comandos de Docker Compose, sus funcionalidades y ejemplos prácticos que te ayudarán a volverte experto en la gestión de tus entornos Docker.
¿Qué es Docker Compose?
Docker Compose is a tool for defining and running multi-container Docker applications. With Compose, you can configure your application’s services, networks, and volumes in a single YAML file (usually named docker-compose.ymlEste archivo le permite especificar cómo deben comportarse, comunicarse y persistir los datos de sus contenedores.
Componentes Clave de Docker Compose
- ServiciosEstos son los contenedores que componen tu aplicación. Cada servicio está definido en el...
docker-compose.ymlarchivo. - Networks: Estos permiten que tus servicios se comuniquen entre sí. Docker Compose crea automáticamente una red para tu aplicación, pero también puedes definir redes personalizadas.
- Volumes: These are used for persistent data storage. You can define volumes to ensure data remains available even if the containers are stopped or removed.
Installing Docker Compose
Antes de sumergirnos en los comandos de Docker Compose, es fundamental tener Docker instalado en tu sistema. Puedes seguir las instrucciones oficiales de la Documentación de Docker para instalar Docker.
To install Docker Compose, you can use the following command for most systems (make sure to replace the version number with the latest release):
sudo curl -L "https://github.com/docker/compose/releases/download//docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-composeAfter installation, verify it by running:
docker-compose --versiónBasic Docker Compose Commands
Now that we have a basic understanding of Docker Compose, let’s explore the essential commands.
1. docker-compose up
Este comando es la piedra angular de Docker Compose. Crea e inicia todos los contenedores definidos en el docker-compose.yml archivo.
docker-compose upYou can run this command with the - flag to start the containers in detached mode, which runs them in the background:
docker-compose iniciar -dEjemplo
Consider a simple web application defined in docker-compose.yml:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"Running docker-compose up will start an Nginx server that listens on port 80.
2. docker-compose down
El abajo El comando detiene y elimina todos los contenedores definidos en tu docker-compose.yml file. It also removes the networks associated with the services.
docker-compose downPuedes agregar el -v opción de también eliminar los volúmenes asociados:
docker-compose down -v3. docker-compose ps
This command lists the containers that are part of the application. It provides a quick overview of their current state.
docker-compose ps4. docker-compose exec
To execute a command inside a running container, use the ejecutar command. This is particularly useful for debugging.
docker-compose exec Ejemplo
To open a shell in the web servicio:
docker-compose exec web /bin/bash5. docker-compose logs
Este comando muestra los registros de todos los servicios o de los servicios especificados. Es invaluable para la resolución de problemas.
docker-compose logsFor real-time logs, use the -f (follow) option:
docker-compose logs -f6. docker-compose build
Si estás utilizando un Dockerfile para construir tus imágenes, el build comando construye los servicios definidos en tu docker-compose.yml.
docker-compose build7. docker-compose pull
Para descargar las imágenes más recientes de tus servicios, usa el pull command. This will update your local images without rebuilding them.
docker-compose pull8. docker-compose push
El push El comando se utiliza para subir tus imágenes construidas a un registro de Docker.
docker-compose push9. docker-compose reiniciar
Si necesitas reiniciar tus servicios por cualquier motivo, puedes usar el... reiniciar comando:
docker-compose reiniciar10. docker-compose scale
El escala command allows you to define the number of container instances for a service.
docker-compose scale =Ejemplo
Para escalar la web service to 3 instances:
docker-compose scale web=3Advanced Docker Compose Features
Habiendo cubierto los comandos básicos, ahora podemos explorar algunas características avanzadas de Docker Compose.
Environment Variables
Puedes usar variables de entorno en tu docker-compose.yml file to manage different configurations for different environments. Create a .env archivo en el mismo directorio que tu docker-compose.yml file to define your variables.
Ejemplo .env file
NOMBRE_DB=mibasededatos
USUARIO_DB=usuario
CONTRASEÑA_DB=contraseñaEjemplo docker-compose.yml
versión: '3'
servicios:
db:
imagen: postgres
entorno:
POSTGRES_DB: ${NOMBRE_DB}
POSTGRES_USER: ${USUARIO_DB}
POSTGRES_PASSWORD: ${CONTRASEÑA_DB}Anulaciones de Docker ComposeEn el capítulo anterior, aprendiste a crear un archivo docker-compose.yml para definir y ejecutar una aplicación de varios contenedores. Sin embargo, es posible que necesites personalizar la configuración para diferentes entornos o escenarios. Es aquí donde entran en juego las anulaciones de Docker Compose.Las anulaciones de Docker Compose te permiten definir archivos de configuración adicionales que modifican o extienden la configuración base definida en el archivo docker-compose.yml principal. Estos archivos de anulación se nombran típicamente docker-compose.override.yml y se utilizan para proporcionar valores específicos del entorno o configuraciones adicionales.Veamos un ejemplo para ilustrar cómo funcionan las anulaciones de Docker Compose. Supongamos que tienes una aplicación web simple con dos servicios: una aplicación web y una base de datos. Tu archivo docker-compose.yml base podría verse así:```yaml version: '3' services: web: image: my-web-app ports: - "8000:8000" depends_on: - db db: image: postgres environment: POSTGRES_PASSWORD: example ```Ahora, imagina que quieres personalizar esta configuración para diferentes entornos, como desarrollo, pruebas y producción. Puedes crear archivos de anulación separados para cada entorno:**docker-compose.override.yml (para desarrollo):**```yaml version: '3' services: web: volumes: - ./app:/app environment: - DEBUG=true db: ports: - "5432:5432" ```**docker-compose.test.yml (para pruebas):**```yaml version: '3' services: web: environment: - TESTING=true db: environment: - POSTGRES_DB=test_db ```**docker-compose.prod.yml (para producción):**```yaml version: '3' services: web: ports: - "80:8000" environment: - PRODUCTION=true db: environment: - POSTGRES_DB=prod_db ```En este ejemplo, el archivo docker-compose.override.yml se utiliza para el entorno de desarrollo. Monta el código de la aplicación como un volumen y habilita el modo de depuración. El archivo docker-compose.test.yml se utiliza para el entorno de pruebas y establece la variable de entorno TESTING. El archivo docker-compose.prod.yml se utiliza para el entorno de producción y expone el servicio web en el puerto 80.Para utilizar estos archivos de anulación, puedes ejecutar el siguiente comando:```bash docker-compose -f docker-compose.yml -f docker-compose.override.yml up ```Este comando fusionará la configuración del archivo docker-compose.yml base con la configuración del archivo docker-compose.override.yml y creará los contenedores en consecuencia.De manera similar, puedes utilizar los archivos de anulación específicos del entorno:```bash # Para desarrollo docker-compose -f docker-compose.yml -f docker-compose.override.yml up# Para pruebas docker-compose -f docker-compose.yml -f docker-compose.test.yml up# Para producción docker-compose -f docker-compose.yml -f docker-compose.prod.yml up ```Las anulaciones de Docker Compose proporcionan una forma flexible de personalizar la configuración de tu aplicación para diferentes entornos sin modificar el archivo docker-compose.yml base. Esto te permite mantener una configuración base consistente mientras adaptas configuraciones específicas según sea necesario.En resumen, las anulaciones de Docker Compose te permiten definir archivos de configuración adicionales que modifican o extienden la configuración base definida en el archivo docker-compose.yml principal. Estos archivos de anulación se utilizan para proporcionar valores específicos del entorno o configuraciones adicionales. Al utilizar archivos de anulación, puedes personalizar fácilmente la configuración de tu aplicación para diferentes entornos sin modificar el archivo base.
Docker Compose allows you to override settings in docker-compose.yml con un archivo llamado docker-compose.sobrescritura.yml. Esto es útil para configuraciones de desarrollo local que no deben incluirse en producción.
Perfiles
Docker Compose supports profiles, allowing you to define services that should run together in different environments.
Ejemplo docker-compose.yml
versión: '3.9'
servicios:
web:
imagen: nginx
perfiles:
- desarrollo
db:
imagen: postgres
perfiles:
- desarrollo
- producciónPara iniciar los servicios en un perfil específico, use:
docker-compose --profile development upHealth Checks
You can define health checks for your services to ensure they are running correctly.
Ejemplo
servicios:
web:
imagen: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/"]
intervalo: 30s
timeout: 10s
reintentos: 3Networking
By default, Docker Compose creates a network for your application. However, you can define your custom networks.
Ejemplo docker-compose.yml
version: '3'
services:
web:
image: nginx
networks:
- red_personalizada
db:
image: postgres
networks:
- red_personalizada
networks:
red_personalizada:Best Practices for Using Docker Compose
As you become more familiar with Docker Compose commands, consider the following best practices:
- Mantén tu
docker-compose.ymlOrganized: Utiliza comentarios y una estructura consistente para garantizar la legibilidad. - Utilice Control de versionesSiempre mantén tus
docker-compose.ymland related files in version control. - Limit Container PrivilegesEvita ejecutar contenedores como root. Define los permisos de usuario en tu Dockerfile o
docker-compose.yml. - Utiliza volúmenes con nombre: For persistent data, use named volumes instead of container-specific paths.
- Optimize Build Context: Limita el contexto de compilación solo a los archivos necesarios, reduciendo el tiempo de compilación y el tamaño de la imagen.
Conclusión
Docker Compose es una herramienta poderosa que simplifica el desarrollo y la gestión de aplicaciones con múltiples contenedores. Al dominar los comandos y características discutidos en esta guía, podrás ejecutar y gestionar tus aplicaciones de manera más eficiente. Recuerda experimentar con diferentes configuraciones y prácticas para encontrar lo que mejor funcione para tus necesidades específicas.
As Docker and its ecosystem continue to evolve, staying updated on the latest features and best practices will further enhance your proficiency in using Docker Compose effectively. Happy containerizing!
Publicaciones relacionadas:
- Comandos básicos de la CLI de Docker: Una guía para principiantes
- Errores Comunes al Ejecutar Comandos Docker y Soluciones1. Error: "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"Solución: Este error indica que el demonio de Docker no está en ejecución. Para solucionarlo, inicia el servicio de Docker con el comando:``` sudo systemctl start docker ```Si el servicio no está instalado, instálalo primero con:``` sudo apt-get install docker.io ```2. Error: "Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock"Solución: Este error ocurre cuando el usuario actual no tiene permisos para acceder al socket de Docker. Para solucionarlo, añade tu usuario al grupo de Docker:``` sudo usermod -aG docker $USER ```Luego, cierra la sesión y vuelve a iniciarla para que los cambios surtan efecto.3. Error: "Error response from daemon: conflict: unable to remove repository reference"Solución: Este error aparece cuando intentas eliminar una imagen que está siendo utilizada por un contenedor. Para solucionarlo, detén y elimina el contenedor primero:``` docker stop docker rm ```Luego, elimina la imagen:``` docker rmi ```4. Error: "Error response from daemon: No such container"Solución: Este error indica que el contenedor que intentas eliminar no existe. Verifica el nombre del contenedor y asegúrate de que esté en ejecución:``` docker ps -a ```5. Error: "Error response from daemon: conflict: unable to delete (must be forced) - image is referenced in multiple repositories"Solución: Este error ocurre cuando la imagen está siendo referenciada por múltiples repositorios. Para solucionarlo, fuerza la eliminación de la imagen:``` docker rmi -f ```6. Error: "Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password"Solución: Este error indica que las credenciales proporcionadas para iniciar sesión en Docker Hub son incorrectas. Verifica tu nombre de usuario y contraseña, e inténtalo de nuevo:``` docker login ```7. Error: "Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority"Solución: Este error ocurre cuando el certificado SSL del registro de Docker no es confiable. Para solucionarlo, añade el certificado a la lista de certificados de confianza:``` sudo cp /usr/local/share/ca-certificates/ sudo update-ca-certificates ```8. Error: "Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 127.0.0.53:53: read udp 127.0.0.1:54826->127.0.0.53:53: i/o timeout"Solución: Este error indica un problema de resolución DNS. Para solucionarlo, verifica tu configuración de DNS y asegúrate de que esté funcionando correctamente.9. Error: "Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout"Solución: Este error ocurre cuando la conexión TLS con el registro de Docker se agota. Para solucionarlo, verifica tu conexión a internet y asegúrate de que no haya restricciones de red que impidan la conexión.10. Error: "Error response from daemon: Get https://registry-1.docker.io/v2/: context deadline exceeded"Solución: Este error indica que la solicitud al registro de Docker excedió el tiempo límite. Para solucionarlo, aumenta el tiempo límite de la solicitud o verifica tu conexión a internet.Recuerda que estos son solo algunos de los errores más comunes que pueden ocurrir al ejecutar comandos Docker. Si encuentras un error que no está listado aquí, consulta la documentación oficial de Docker o busca en línea para encontrar una solución específica para tu caso.
- Prácticas recomendadas esenciales para optimizar archivos de Docker Compose
- Problemas comunes del demonio de Docker y sus soluciones explicados
