docker-compose.yml define y configura servicios en contenedores de Docker. Su estructura sigue un formato YAML y se compone de varias secciones clave.Aquí está la estructura básica:
Explicación de las Secciones
version
Define la versión del esquema de Docker Compose. Algunas opciones comunes:
"3.8"(Recomendada para compatibilidad con Docker moderno)"2"(Para versiones más antiguas)
services
Define los contenedores a ejecutar.
Cada servicio representa un contenedor con su configuración:
image: Nombre de la imagen base a usar (por ejemplo,nginx,postgres).build: Si no usas una imagen preexistente, se puede construir desde unDockerfile.container_name: Nombre del contenedor.restart: Controla la política de reinicio:always→ Siempre reinicia si se detiene.on-failure→ Solo si hay un fallo.unless-stopped→ Se reinicia excepto si se detuvo manualmente.no→ No se reinicia automáticamente.
ports
Expone puertos entre el host y el contenedor:
environment
Define variables de entorno dentro del contenedor:
volumes
Los volúmenes permiten persistencia de datos:
Si se define un volumen global:
Y se usa en un servicio:
networks
Define redes personalizadas para comunicación entre contenedores:
Y su uso en servicios:
depends_on
Especifica dependencias entre servicios:
Pero no garantiza que el servicio esté listo antes de iniciar otro. Para eso, usa healthcheck.
command
Define un comando a ejecutar al iniciar el contenedor:
Ejemplo Completo
Este docker-compose.yml levanta una aplicación Node.js con PostgreSQL:
Comandos Útiles
| Comando | Descripción |
|---|---|
docker-compose up -d | Levanta los servicios en segundo plano. |
docker-compose down | Detiene y elimina contenedores y redes. |
docker-compose ps | Muestra los servicios en ejecución. |
docker-compose logs -f | Muestra los logs en tiempo real. |
docker-compose exec app sh | Abre una terminal en el contenedor app. |
Estructura de un Dockerfile
Un Dockerfile es un archivo de texto que contiene una serie de instrucciones para crear una imagen de Docker. Su estructura básica suele seguir este orden:
Explicación de cada instrucción:
FROM: Define la imagen base desde la que se construirá la imagen.LABEL: Información del mantenedor del Dockerfile (opcional).ENV: Variables de entorno dentro del contenedor.WORKDIR: Establece el directorio de trabajo dentro del contenedor.COPY: Copia archivos desde la máquina host al contenedor.RUN: Ejecuta comandos en el contenedor al momento de construir la imagen.EXPOSE: Indica qué puertos utilizará la aplicación (no los publica).CMD: Define el comando por defecto que se ejecutará cuando se inicie un contenedor basado en esta imagen.
Comandos adicionales:
ADD: Similar aCOPY, pero permite descargar archivos desde URLs y descomprimir archivos.tar.ENTRYPOINT: Similar aCMD, pero permite ejecutar comandos con argumentos personalizados.VOLUME: Define un volumen para persistencia de datos.ARG: Define variables de entorno que solo existen en tiempo de construcción.
