Despliegue y Gestión de Contenedores Múltiples con Docker Compose

Docker Compose es una herramienta que permite definir y ejecutar aplicaciones compuestas por múltiples contenedores de Docker. Utiliza un archivo en formato YAML para configurar todos los servicios, redes y volúmenes que conforman la aplicación, simplificando significativamente el despliegue en un solo host. Al definir la configuración en un único archivo, es posible iniciar, detener y gestionar todos los componentes de la aplicación de forma coordinada con comandos sencillos.

El archivo de configuración incluye las opciones de cada servicio, como la imagen base, los mapeos de puertos, las variables de entorno y los puntos de montaje. Una vez configurado, se ejecuta un solo comando para levantar todo el entorno. De manera similar, un solo comando se encarga de detener y limpiar todos los recursos asociados.

  1. Instalación en un Servidor Linux

Para instalar el binario de Docker Compose en un servidor Linux, se puede descargar directamente desde el repositorio oficial y establecer los permisos necesarios.

# Navegar al directorio donde se almacenarán los binarios del sistema
cd /usr/local/bin

# Descargar el ejecutable compatible con el sistema operativo y arquitectura
curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-$(uname -m)" -o docker-compose

# Asignar permisos de ejecución
chmod +x docker-compose

# Verificar la instalación
docker-compose --version
# Salida esperada: Docker Compose version v2.24.5

Para obtener ayuda sobre los comandos y opciones disponibles, se puede utilizar el indicador de ayuda.

docker-compose --help
  1. Estructura de un Archivo de Configuración

El archivo central de Docker Compose, comúnmente llamado docker-compose.yml, sigue una estructura jerárquica. A continuación se presenta un ejemplo básico que define dos servicios: uno para una aplicación web y otro para su base de datos.

# Especificación de la versión del formato del archivo
version: '3.8'

services:
  # Primer servicio: servidor de aplicaciones
  servidor_app:
    image: nginx:alpine
    ports:
      - "8080:80"
    networks:
      - red_interna

  # Segundo servicio: base de datos
  base_datos:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: usuario_app
      POSTGRES_PASSWORD: clave_segura
      POSTGRES_DB: bd_aplicacion
    volumes:
      - datos_postgres:/var/lib/postgresql/data
    networks:
      - red_interna

# Declaración de redes personalizadas
networks:
  red_interna:

# Declaración de volúmenes persistentes
volumes:
  datos_postgres:

En esta configuración:

  • version: Define la sintaxis del archivo. La versión 3.x es ampliamente utilizada.
  • services: Contiene la definición de cada contenedor independiente.
  • image: Especifica la imagen de Docker que se ejecutará.
  • ports: Mapea puertos entre el host y el contenedor.
  • environment: Establece variables de entorno para configurar la aplicación dentro del contenedor.
  • volumes: Define volúmenes para persistir datos más allá del ciclo de vida del contenedor.
  • networks: Crea redes aisladas para la comunicación entre servicios.
  1. Ejemplo Práctico: Desplegar una Aplicación WordPress

Este ejemplo despliega WordPress junto con su base de datos MySQL. Primero, se crea un directorio de proyecto y se define el archivo de configuración.

# Crear y acceder al directorio del proyecto
mkdir mi-sitio-wp && cd mi-sitio-wp

# Crear el archivo de configuración
cat > docker-compose.yml <<EOF
version: "3.8"

services:
  # Servicio de base de datos
  base_mysql:
    image: mysql:8.0
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
    volumes:
      - datos_mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: raizSecreta123
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wp_usuario
      MYSQL_PASSWORD: wp_password_segura

  # Servicio de la aplicación WordPress
  app_wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    depends_on:
      - base_mysql
    environment:
      WORDPRESS_DB_HOST: base_mysql:3306
      WORDPRESS_DB_USER: wp_usuario
      WORDPRESS_DB_PASSWORD: wp_password_segura
      WORDPRESS_DB_NAME: wordpress_db

volumes:
  datos_mysql:
EOF

Para iniciar todos los servicios definidos en el archivo, se ejecuta el comando up. La opción -d los ejecuta en segundo plano (modo detached).

# Iniciar los contenedores
docker-compose up -d

# Listar los contenedores en ejecución del proyecto
docker-compose ps
# Este comando mostrará el estado, los puertos asignados y los nombres de los contenedores creados.

Para detener y eliminar todos los contenedores, redes y volúmenes creados por el archivo de configuración, se utiliza el comando down.

docker-compose down

Para acceder a la instalación de WordPress, se debe abrir el puerto expuesto (8080 en este caso) en el firewall del servidor y navegar a la dirección IP o nombre de dominio del host, seguido del puerto.

Etiquetas: docker-compose Docker Nginx MySQL wordpress

Publicado el 6-24 19:51