Skip to main content
Docker Compose es la herramienta oficial para definir y ejecutar aplicaciones Docker de múltiples contenedores. En vez de lanzar cada docker run a mano, describes toda la stack en un archivo docker-compose.yml y la levantas con un solo comando.

Estructura de un docker-compose.yml

docker-compose.yml

version

Declara la versión del formato del archivo Compose. Ejemplos comunes: '3.8', '3.9'. Determina qué palabras reservadas están disponibles.
Desde Compose v2 (el que trae Docker Desktop moderno) el campo version es opcional y se ignora, pero mucha gente lo sigue escribiendo por costumbre.

services

Bloque raíz donde defines cada contenedor de tu aplicación. Cada clave debajo (api, db, …) es el nombre lógico del servicio y también el hostname que otros servicios usan para conectarse a él.

Palabras reservadas dentro de un servicio

image

Imagen de Docker que se usará para crear el contenedor. Puede venir de DockerHub (postgres:15) o de un registro privado.

build

Alternativa a image. Le dices a Compose que construya la imagen desde un Dockerfile local.

container_name

Nombre fijo que tendrá el contenedor al levantarse. Si lo omites, Compose genera uno con el patrón <proyecto>_<servicio>_1.

ports

Mapea puertos del host hacia el contenedor. El formato es "HOST:CONTENEDOR".

environment

Variables de entorno que recibe el contenedor. Se pueden escribir como mapa o como lista.

env_file

Carga variables de entorno desde un archivo externo.

volumes

Persiste datos y monta carpetas entre el host y el contenedor. Hay dos tipos:
  • Bind mount: ./local:/ruta/contenedor — carpeta del host.
  • Volumen nombrado: mi-volumen:/ruta/contenedor — gestionado por Docker.

networks

Redes a las que se conecta el servicio. Los servicios en la misma red se ven entre sí por su nombre.

depends_on

Define orden de arranque: api se levanta después de db. No espera a que db esté listo para recibir conexiones; solo espera a que el contenedor arranque.

restart

Política de reinicio del contenedor. Valores comunes:
  • no (por defecto)
  • always
  • on-failure
  • unless-stopped

command

Sobrescribe el comando por defecto de la imagen.

healthcheck

Define cómo Docker verifica si el contenedor está sano.

Bloques raíz adicionales

networks

Declara redes personalizadas que los servicios pueden usar en su bloque networks.

volumes

Declara volúmenes nombrados que Docker gestiona por ti (persisten aunque borres el contenedor).

Comandos básicos

Terminal