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.