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)alwayson-failureunless-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

