Las variables de entorno son una forma poderosa de configurar y gestionar aplicaciones en Docker Compose. Permiten parametrizar configuraciones y hacer que las aplicaciones sean más flexibles y fáciles de mantener. En esta sección, aprenderás cómo utilizar variables de entorno en Docker Compose para mejorar la configuración de tus servicios.
¿Qué son las Variables de Entorno?
Las variables de entorno son pares clave-valor que se pueden utilizar para configurar el comportamiento de las aplicaciones. En Docker Compose, se pueden definir variables de entorno para:
- Configurar servicios.
- Pasar información sensible como contraseñas y tokens.
- Parametrizar configuraciones que pueden cambiar entre entornos (desarrollo, prueba, producción).
Definiendo Variables de Entorno en Docker Compose
- Usando el archivo
.env
.env
Docker Compose permite definir variables de entorno en un archivo .env
en el mismo directorio donde se encuentra el archivo docker-compose.yml
. Estas variables se pueden referenciar en el archivo docker-compose.yml
utilizando la sintaxis ${VARIABLE_NAME}
.
Ejemplo de archivo .env
:
Ejemplo de archivo docker-compose.yml
:
version: '3.8' services: db: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_DATABASE=${MYSQL_DATABASE}
- Definiendo Variables Directamente en el
docker-compose.yml
docker-compose.yml
También puedes definir variables de entorno directamente en el archivo docker-compose.yml
bajo la sección environment
.
Ejemplo:
- Usando Variables de Entorno del Sistema
Docker Compose también puede utilizar variables de entorno definidas en el sistema operativo. Estas variables se pueden referenciar en el archivo docker-compose.yml
de la misma manera que las variables definidas en el archivo .env
.
Ejemplo:
En este caso, la variable API_KEY
debe estar definida en el entorno del sistema antes de ejecutar Docker Compose.
Ejemplo Práctico
Vamos a crear un ejemplo práctico para ilustrar cómo utilizar variables de entorno en Docker Compose.
Paso 1: Crear el archivo .env
Crea un archivo .env
con el siguiente contenido:
Paso 2: Crear el archivo docker-compose.yml
Crea un archivo docker-compose.yml
con el siguiente contenido:
version: '3.8' services: db: image: postgres:13 environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} volumes: - db_data:/var/lib/postgresql/data app: image: myapp:latest environment: - DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB} depends_on: - db volumes: db_data:
Paso 3: Ejecutar Docker Compose
Ejecuta el siguiente comando para iniciar los servicios definidos en el archivo docker-compose.yml
:
Este comando iniciará los servicios db
y app
, utilizando las variables de entorno definidas en el archivo .env
.
Ejercicio Práctico
Ejercicio
-
Crea un archivo
.env
con las siguientes variables:REDIS_PASSWORD=supersecret REDIS_PORT=6379
-
Crea un archivo
docker-compose.yml
que defina un servicioredis
utilizando las variables de entorno del archivo.env
.
Solución
Archivo .env
:
Archivo docker-compose.yml
:
version: '3.8' services: redis: image: redis:6.2 command: redis-server --requirepass ${REDIS_PASSWORD} environment: - REDIS_PASSWORD=${REDIS_PASSWORD} - REDIS_PORT=${REDIS_PORT} ports: - "${REDIS_PORT}:${REDIS_PORT}"
Retroalimentación
- Error Común: Olvidar definir las variables de entorno en el archivo
.env
o en el sistema operativo. Asegúrate de que todas las variables referenciadas en el archivodocker-compose.yml
estén definidas. - Consejo: Utiliza variables de entorno para manejar configuraciones sensibles y específicas del entorno, como contraseñas y claves API, para mantener tu configuración segura y flexible.
Conclusión
Las variables de entorno en Docker Compose son una herramienta esencial para gestionar configuraciones de manera flexible y segura. Al utilizar archivos .env
, variables definidas directamente en el docker-compose.yml
o variables del sistema, puedes parametrizar tus servicios y hacer que tus aplicaciones sean más fáciles de mantener y desplegar en diferentes entornos.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga