Docker Compose
1. Intoducción.
Docker Compose es una herramienta diseñada para definir y ejecutar aplicaciones de múltiples contenedores que pertenecen a un mismo entorno. Su propósito principal es gestionar conjuntos de contenedores que tienen dependencias entre sí y necesitan cominicarse.
- Prerrequisitos: Es fundamental comprender conceptos básicos de Docker (contenedores, imágenes, Dockerfile) antes de utilizar Compose.
- Problema que resuelve: Ejecutar múltiples contenedores mediante comandos individuales de 'docker run' es un proceso manual, tedioso y propenso a erores, especialmente cuando se gestionan decenas de servicios.
2. Estructura del archivo 'docker-compose.yml'
Docker compose utiliza un archivo en formato para centralizar toda la configuración de los servicios como código. Los componentes clave del archivo son:
-
version:Define la versión de la especificación del Docker Compose compatible con la herramienta instalada.
-
services:Es el atributo principal donde se listan todos los contenedores que se iniciarán.
-
Atributos por servicio:
image:Especifica la imagen del Docker Hub o un registro privado que se utilizará-ports:Mapea los puertos del host a los puertos internos del contenedor (ej. 'host:container')environment:Permite definir variables de enrotno, como credenciales de bases de datos.build:Se usa en lugar de 'image' para construir una imagen personalizada desde un Dockerfile local.-
depends_on:Gestión de dependencias. Permite establecer un orden de inicio entre servicios.
Ejemplo:
| docker-compose.yml | |
|---|---|
3. Comandos principales.
Docker Compose facilita la gestión del ciclo de vida de la aplicación con comandos simplificados:
-
docker-compose upLee el archivo , crea la red necesaria e inicia todos los servicios. Se puede usar la bandera
-dpara ejecutaren modo desatendido (background) -
docker-compose downDetiene y elimina los contenedores y las redes creadas.
-
docker-compose stopydocker-compose startDetienen e inician los contenedores existentes SIN eliminarlos, preservando el estado interno del contenedor si no hay volúmenes configurados.
Cuidado al usar 'docker-compose down' porque se eliminarán los datos del contenedor sino se utilizan volúmenes
4. Redes y Nombres.
- Redes automáticas: Docker Compose crea automáticamente una red compartida aislada para todos los servicios definidos en el archivo, permitiendo que se comuniquen entre sí usando solo el nombre del servicio.
- Nombres de proyectos: Por defecto, Compose utiliza el nombre de la carpeta donde se ejecuta el archivo como prefijo para los nombres de los contenedores y las redes. Este comportamiento se puede sobreescribir con la bandera.
5. Seguridad y Variables de Entorno.
Es una mala práctica de seguridad incluir credenciales sensibles (contraseñas, API keys...) directamente en el código del archivo .
-
Sintaxis de variables:
${NOMBRE_VARIABLE} -
Asignación: Los valores reales se pueden definir como variables de entorno en el sistema operativo o mediante un arvhivo
.env, lo que permite compartir el archivo de Compose sin exponer secretos.
6. Integración con Registros Privados.
Para entornos de producción o pruebas finales, Docker Compose puede extraer imágenes de registros privados (como Docker hub o ECR).
- Autenticación: Compose utiliza el estado de autenticación generado por el comando
'docker login'para acceder y descargar las imágenes configuradas.
7. Evolución de Docker-compose a Kubernetes.
Docker Compose es ideal para gestionar conjuntos pequeños o medianos de contenedores en entornos de desarrollo o pruebas. Sin embargo, tiene límites de escala:
- Kubernetes: Se utiliza cuando la aplicación requiere escalar a miles de contenedores distribuidos en múltiples servidores y necesita funciones de "Autohealing" (reinicio automático si un contenedor falla)