Docker compose
1. Docker Compose: Gestión de Multicontenedores #
Docker Compose es una herramienta declarativa que facilita la definición y ejecución de aplicaciones multicontenedor (por ejemplo, frontend, backend API, base de datos PostgreSQL y caché Redis). Todo el ecosistema de servicios, redes y volúmenes se describe en un único archivo YAML llamado docker-compose.yml (o compose.yaml).
NOTE
Docker Compose V1 vs V2:
- Compose V2 (Estándar Oficial): Está integrado directamente en el CLI oficial de Docker en lenguaje Go (
docker composecon espacio).- Compose V1 (Obsoleto): Era un script independiente en Python (
docker-composecon guion), hoy retirado. En sistemas modernos, ejecutardocker-composeredirige automáticamente adocker compose.- Compose Specification: En las versiones modernas ya no es necesario incluir la directiva
version: '3'al inicio del archivo YAML.
2. Comandos Comunes de Docker Compose #
docker compose up: Iniciar los servicios definidos en el archivo compose #
Inicia todos los servicios, crea la red privada compartida y monta los volúmenes correspondientes. Si las imágenes no existen localmente, Docker Compose las descargará o las construirá.
Ejemplo:
1docker compose up
Para ejecutarlos en segundo plano (modo desatendido / detached):
1docker compose up -d
Ejemplo de archivo compose.yaml (o docker-compose.yml):
1services: 2 web: 3 image: nginx:alpine 4 ports: 5 - "8080:80" 6 restart: unless-stopped 7 8 db: 9 image: postgres:16-alpine 10 environment: 11 POSTGRES_USER: user 12 POSTGRES_PASSWORD: secretpassword 13 POSTGRES_DB: app_db 14 volumes: 15 - db_data:/var/lib/postgresql/data 16 17volumes: 18 db_data:
En este archivo:
- El servicio
webexpone el puerto 80 del contenedor hacia el puerto8080de la máquina anfitriona. - El servicio
dbcorre PostgreSQL persistiendo sus datos en el volumen administradodb_data. - Ambos servicios pueden comunicarse entre sí por su nombre (
webydb) a través de la red bridge creada automáticamente por Compose.
docker compose down: Detener y eliminar contenedores y redes #
Detiene todos los contenedores y destruye la red privada creada para el stack, liberando memoria y puertos.
Ejemplo:
1docker compose down
Si quieres eliminar los volúmenes asociados con los contenedores, puedes agregar la opción --volumes:
1docker-compose down --volumes
docker-compose ps: Listar contenedores iniciados por Docker Compose #
Este comando muestra el estado de los contenedores iniciados por Docker Compose. Es útil para verificar qué servicios están en ejecución y su estado.
Ejemplo:
1docker-compose ps
Salida esperada:
Name Command State Ports
--------------------------------------------------------------------------
web_1 nginx -g 'daemon of...' Up 0.0.0.0:8080->80/tcp
db_1 docker-entrypoint.sh postgres Up 5432/tcp
Aquí puedes ver los contenedores (web_1, db_1), su estado (si están en ejecución), y los puertos asignados.
docker-compose build: Construir imágenes para los servicios definidos en docker-compose.yml #
Este comando construye las imágenes de los servicios definidos en el archivo docker-compose.yml si se especifica un Dockerfile. Esto es útil cuando tienes configuraciones personalizadas para las imágenes.
Ejemplo:
1docker-compose build
Este comando construirá las imágenes antes de ejecutar los servicios. Si ya tienes imágenes preconstruidas o descargadas, no es necesario volver a construirlas a menos que hayas realizado cambios en los Dockerfiles.
docker-compose logs: Ver los logs de los contenedores gestionados por Docker Compose #
Este comando muestra los registros (logs) generados por los servicios que Docker Compose está ejecutando. Es útil para depurar problemas o monitorear la actividad de los servicios.
Ejemplo:
1docker-compose logs
Si solo quieres ver los logs de un servicio específico, por ejemplo web:
1docker-compose logs web
docker-compose exec <servicio> <comando>: Ejecutar un comando en un contenedor gestionado por Docker Compose #
Este comando te permite ejecutar comandos dentro de un contenedor en ejecución. Es similar a docker exec, pero se usa para contenedores gestionados por Docker Compose.
Ejemplo:
1docker-compose exec web /bin/bash
Esto te da una terminal interactiva dentro del contenedor del servicio web (en este caso, es un contenedor de nginx), donde puedes ejecutar comandos como si estuvieras dentro del contenedor.
Resumen del tema
Conceptos clave #
- Orquestación Multicontenedor: definición declarativa en YAML (
docker-compose.yml) de servicios, redes, volúmenes y variables de entorno. - Comandos Clave de Ciclo de Vida:
docker-compose up -d: compila, crea la red común y levanta todos los servicios en segundo plano.docker-compose down: detiene y destruye los contenedores y redes creados por el compose.docker-compose ps: estado de los servicios del proyecto.docker-compose logs -f [servicio]: monitorización unificada de logs.docker-compose exec [servicio] sh: acceso interactivo a un contenedor del stack.
Qué debes recordar #
Usa Docker Compose para definir y arrancar con una sola orden (docker compose up -d) todo el stack de tu aplicación (frontend, backend, base de datos y caché).