Docker Compose permite definir y ejecutar una aplicación formada por varios contenedores desde un archivo declarativo. En lugar de iniciar cada servicio con una larga lista de opciones, describes el proyecto una vez y administras sus componentes con los comandos de Compose.
En esta lección aprenderás qué es Docker Compose, qué elementos forman su modelo y cómo validar, iniciar y revisar un servicio web de prueba desde la terminal.
👉 Y recuerda, si quieres aprender más de Linux, visita el curso de Linux gratis.
🐳 Si quieres aprender más de Docker, visita el curso de Docker gratis.
Qué es Docker Compose
Docker Compose es la herramienta de Docker para definir y gestionar aplicaciones de uno o varios contenedores. Su archivo reúne la configuración de los servicios y, cuando la aplicación lo necesita, también de redes, volúmenes, secretos y otros recursos. El comando de Compose interpreta esa definición y coordina el ciclo de vida de los recursos mediante Docker Engine.
El archivo predeterminado se llama compose.yaml y se guarda normalmente en el directorio del proyecto. También se admite compose.yml; los nombres docker-compose.yaml y docker-compose.yml siguen disponibles por compatibilidad. Un proyecto Compose agrupa los recursos para mantener separadas distintas aplicaciones.
Qué define un proyecto Compose
La clave principal es services: cada servicio describe cómo ejecutar un componente de la aplicación, normalmente a partir de una imagen o de una construcción. Los recursos adicionales permiten comunicar los servicios y guardar datos fuera de los contenedores.
| Elemento | Qué configura | Ejemplo de uso |
|---|---|---|
| Servicios | Imagen o construcción, puertos, variables y montajes de cada componente. | Una aplicación web y una base de datos. |
| Redes | La comunicación entre los servicios del proyecto. | La aplicación accede a la base de datos por su nombre de servicio. |
| Volúmenes | Almacenamiento que puede persistir al reemplazar un contenedor. | Conservar los datos de una base de datos. |
Compose crea una red predeterminada para los servicios si no defines otra. En cambio, la persistencia debe configurarse de forma explícita: los datos escritos únicamente en la capa del contenedor no sustituyen a un volumen o a otro montaje adecuado.
Sintaxis básica de Docker Compose
Este archivo mínimo define un servicio llamado web a partir de la imagen de Nginx. El puerto 8080 del equipo se conecta con el puerto 80 del contenedor. Guarda el contenido como compose.yaml en un directorio de prueba:
services:
web:
image: nginx:alpine
ports:
- "8080:80"Validar e iniciar los servicios
Desde el mismo directorio que contiene el archivo, valida la configuración, inicia el servicio en segundo plano y comprueba su estado:
docker compose config
docker compose up -d
docker compose psdocker compose config muestra la configuración que Compose ha resuelto. docker compose up -d crea e inicia el servicio en segundo plano, y docker compose ps muestra su estado y los puertos publicados. Abre http://localhost:8080 para ver la página de Nginx.
Para seguir los registros del servicio:
docker compose logs -f webPulsa Ctrl+C para dejar de seguir la salida; esto no detiene el servicio. Cuando termines la prueba, retira los contenedores y la red del proyecto:
docker compose downEl ejemplo no declara volúmenes porque Nginx solo sirve una página de prueba. Si añades servicios que escriben datos, declara el almacenamiento que necesiten y comprueba qué recursos elimina cada comando antes de usarlo en un proyecto real.
Cómo se comunican los servicios
Los servicios conectados a la red predeterminada del proyecto pueden localizarse por el nombre del servicio. Por ejemplo, una aplicación puede dirigirse a una base de datos usando el nombre db como host, sin fijar la dirección IP del contenedor. La dirección IP puede cambiar cuando Compose reemplaza el contenedor, pero el nombre del servicio se mantiene como referencia.
La opción ports publica un puerto para que se pueda acceder desde el host u otra red. No hace falta publicar el puerto de la base de datos solo para que otro servicio de Compose se comunique con ella. Además, depends_on organiza el orden de inicio, pero por sí solo no garantiza que una aplicación dependiente ya esté lista para aceptar conexiones; para eso se configura un healthcheck y la condición adecuada.
Qué debes tener en cuenta
- Ejecuta los comandos desde el directorio del archivo o indica otro archivo con la opción -f.
- Usa nombres de servicio estables para la comunicación interna; evita configurar direcciones IP de contenedor a mano.
- Publica únicamente los puertos que deban estar accesibles desde fuera del proyecto.
- Declara volúmenes o montajes para los datos que deban sobrevivir al reemplazo de un contenedor.
- Valida los cambios con docker compose config antes de iniciar el proyecto.
Documentación oficial y recursos
- Docker Docs: Docker Compose, visión general de la herramienta y su ciclo de vida.
- Docker Docs: cómo funciona Compose, modelo de proyectos, servicios y recursos.
- Docker Docs: redes en Compose, red predeterminada y descubrimiento por nombre.
- Docker Docs: orden de inicio, dependencias y comprobaciones de salud.
Lecciones relacionadas del curso
- Cuándo utilizar Docker Compose
- Estructura de un archivo Compose
- Servicios en Docker Compose
- Puertos y redes en Docker Compose
- Healthchecks en Docker Compose
Docker Compose facilita repetir el mismo ciclo de trabajo para todos los componentes de una aplicación: declararlos, validar la configuración, iniciarlos y consultar su estado. Mantén el archivo junto al proyecto y utiliza redes y almacenamiento explícitos cuando la aplicación los requiera.
Con este modelo básico ya puedes avanzar a la estructura detallada del archivo y configurar servicios con puertos, redes, variables y comprobaciones de salud.

