6.1 Fundamentos de las variables de entorno
Las variables de entorno juegan un papel importante en la configuración de aplicaciones, permitiendo cambiar dinámicamente el comportamiento y los parámetros de los servicios sin modificar el código. Docker Compose soporta el uso de variables de entorno para configurar los contenedores, proporcionando flexibilidad y comodidad al manejar configuraciones.
Una de las formas más convenientes de gestionar las variables de entorno es utilizando archivos .env
. En esta lección analizaremos en detalle cómo usar variables de entorno en Docker Compose, incluyendo la creación y uso de archivos .env
.
Fundamentos de las variables de entorno en Docker Compose
Las variables de entorno se pueden usar en el archivo compose.yaml
para parametrizar configuraciones. Estas variables pueden definirse en un archivo .env
, directamente en el compose.yaml
, o pasarse directamente a través de la línea de comandos.
Ejemplo de uso de variables de entorno en compose.yaml
:
En este ejemplo se usan las variables NGINX_VERSION
y HOST_PORT
, cuyos valores pueden ser definidos en un archivo .env
o pasados a través de la línea de comandos.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 Uso de archivos .env
1. Crear archivo .env
El archivo .env
se coloca en el mismo directorio que el compose.yaml
, y contiene pares "clave-valor" que definen los valores de las variables de entorno. Cada variable se especifica en una nueva línea.
Ejemplo de archivo .env
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Integración de archivo .env
con Docker Compose
Docker Compose carga automáticamente las variables del archivo .env
si se encuentra en el mismo directorio que el compose.yaml
.
Ejemplo de archivo compose.yaml
usando variables de entorno:
En este ejemplo, las variables NGINX_VERSION
, HOST_PORT
, DB_USER
y DB_PASSWORD
se toman del archivo .env
.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 Pasar variables
Pasar variables desde la línea de comandos
Puedes pasar variables de entorno directamente desde la línea de comandos usando el comando export
en sistemas tipo Unix o usando el parámetro --env-file
en Docker Compose.
Ejemplo de uso de export
:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
Ejemplo de uso de --env-file
:
Puedes especificar un archivo alternativo con variables de entorno usando el parámetro --env-file
.
docker compose --env-file .env.dev up
Uso de variables de entorno integradas en Docker Compose
Docker Compose admite variables de entorno integradas, como ${PWD}
, que representan el directorio de trabajo actual.
Ejemplo:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 Ejemplos prácticos
Ejemplos prácticos del uso de variables de entorno:
Ejemplo 1: Configuración de un servidor web y una base de datos
Crea un archivo .env
con parámetros para el servidor web y la base de datos:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
Crea un archivo compose.yaml
que utilice estas variables:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Inicia Docker Compose:
docker compose up
Ejemplo 2: Separación de entornos para desarrollo y producción
Crea dos archivos .env
para diferentes entornos: .env.dev
y .env.prod
.
Archivo .env.dev
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
Archivo .env.prod
:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
Crea un archivo compose.yaml
que utilice las variables de estos archivos:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Inicia Docker Compose para desarrollo:
docker compose --env-file .env.dev up
Inicia Docker Compose para producción:
docker compose --env-file .env.prod up
GO TO FULL VERSION