Saltar al contenido principal

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 caso nginx: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 imagen mysql: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 driver bridge 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

  1. 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.

  2. Orquestación de Contenedores: Docker Compose asegura que los contenedores se inicien en el orden correcto y maneja las dependencias entre servicios.

  3. 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.

  4. 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.

  5. Facilidad de Gestión: Usar docker-compose up para iniciar todos los servicios definidos en el archivo y docker-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.