Ejemplo de un Docker Compose
Docker Compose simplifica la configuración y gestión de aplicaciones multi-contenedor al permitir definir todos los servicios necesarios en un solo archivo. Este ejemplo muestra cómo configurar una aplicación Laravel utilizando docker-compose
, con un servidor web Nginx, una base de datos MySQL, y una red personalizada para los servicios.
Archivo docker-compose.yaml
version: '3.9'
services:
# Servidor Web Nginx
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80" # Mapea el puerto 80 del contenedor al puerto 80 del host
- "443:443" # Mapea el puerto 443 del contenedor al puerto 443 del host
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf # Monta un archivo de configuración personalizado
- ./public:/usr/share/nginx/html # Monta el directorio de archivos estáticos
networks:
- app-network
# Base de Datos MySQL
db:
image: mysql:5.7
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306" # Mapea el puerto 3306 del contenedor al puerto 3306 del host
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: your_mysql_root_password
MYSQL_USER: laravel_user
MYSQL_PASSWORD: your_mysql_user_password
volumes:
- db_data:/var/lib/mysql # Monta un volumen persistente para los datos de la base de datos
networks:
- app-network
# Redes Docker
networks:
app-network:
driver: bridge
# Volúmenes Docker
volumes:
db_data:
driver: local
Explicación de los Parámetros
- version: Define la versión del archivo de configuración de Docker Compose. La versión
3.9
es compatible con Docker 18.06.0+.
Servicios
-
webserver:
image
: Especifica la imagen de Docker a usar, en este casonginx:alpine
.container_name
: Nombre del contenedor.restart
: Política de reinicio del contenedor.unless-stopped
reinicia el contenedor a menos que se detenga manualmente.tty
: Asigna un pseudo-terminal al contenedor, útil para aplicaciones que necesitan una terminal interactiva.ports
: Mapea los puertos del contenedor al host. Aquí, se exponen los puertos 80 y 443 para tráfico HTTP y HTTPS.volumes
: Monta directorios o archivos del host en el contenedor. Esto permite la personalización de la configuración de Nginx y el acceso a archivos estáticos.networks
: Conecta el contenedor a una red Docker personalizada.
-
db:
image
: Usa la imagenmysql:5.7
para el servicio de base de datos.container_name
: Nombre del contenedor.restart
: Configura la política de reinicio del contenedor.tty
: Asigna un pseudo-terminal al contenedor.ports
: Mapea el puerto 3306 del contenedor al puerto 3306 del host.environment
: Establece variables de entorno para configurar la base de datos.volumes
: Monta un volumen persistente para almacenar los datos de la base de datos, garantizando que los datos se conserven entre reinicios del contenedor.networks
: Conecta el contenedor a la red Docker personalizada.
Redes
- app-network:
driver
: Usa el driverbridge
para crear una red de puente local para los contenedores.
Volúmenes
- db_data:
driver
: Define el driver del volumen.local
es el driver predeterminado para almacenamiento local en el host.
Beneficios de Usar Docker Compose
-
Configuración Declarativa: Define todos los servicios y configuraciones en un solo archivo YAML, lo que facilita la reproducibilidad y la gestión del entorno.
-
Orquestación de Contenedores: Docker Compose asegura que los contenedores se inicien en el orden correcto y maneja las dependencias entre servicios.
-
Redes Personalizadas: Al crear una red personalizada (
app-network
), los contenedores pueden comunicarse entre sí utilizando nombres de servicio, lo que simplifica la configuración de la red interna. -
Persistencia de Datos: Los volúmenes permiten almacenar datos de forma persistente, asegurando que los datos de la base de datos no se pierdan al reiniciar o eliminar contenedores.
-
Facilidad de Gestión: Usar
docker-compose up
para iniciar todos los servicios definidos en el archivo ydocker-compose down
para detenerlos y eliminar los contenedores, redes y volúmenes asociados.
Para más información y detalles sobre los parámetros y opciones disponibles, consulta la documentación oficial de Docker Compose.