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