CodeGym /Cursos /Docker SELF /Variables de entorno en Docker Compose

Variables de entorno en Docker Compose

Docker SELF
Nivel 16 , Lección 0
Disponible

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.

Yaml

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:

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

Yaml

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:

Terminal

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.

Terminal

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:

Yaml

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:

.env

NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword

Crea un archivo compose.yaml que utilice estas variables:

Yaml

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:

Terminal

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:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword

Archivo .env.prod:

.env

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:

Yaml

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:

Terminal

docker compose --env-file .env.dev up

Inicia Docker Compose para producción:

Terminal

docker compose --env-file .env.prod up
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION