Imagen (inmutable)
Código de la aplicación, dependencias, runtime. No cambia entre ambientes.
Mecanismos para inyectar configuración en contenedores Docker Compose sin modificar la imagen. Recorra cada sección para ver ejemplos y detalles de comportamiento.
Concepto 1 de 7
Una imagen bien diseñada es un artefacto inmutable. La misma imagen debe poder ejecutarse en desarrollo, pruebas y producción.
Código de la aplicación, dependencias, runtime. No cambia entre ambientes.
Credenciales, URLs, puertos, niveles de log. Se inyecta en tiempo de ejecución mediante variables de entorno.
Cambie de ambiente y observe qué permanece igual y qué cambia.
Imagen · inmutable
miapp:1.4.0sha256:3f9a…c21eCódigo, dependencias y runtime. Es el mismo artefacto en todos los ambientes.
Configuración · Desarrollo
Ambiente Desarrollo: misma imagen sha256:3f9a…c21e, configuración propia.
Concepto 2 de 7
Define variables de entorno directamente en el archivo Compose, en formato NOMBRE=VALOR.
services: app: environment: - DATABASE_URL=postgresql://app:secreto@db:5432/midb - LOG_LEVEL=debug - PORT=8000Cada variable se establece como NOMBRE=VALOR y queda disponible para el proceso dentro del contenedor.
Concepto 3 de 7
Compose lee automáticamente un archivo .env en el mismo directorio. Las variables se referencian con ${VARIABLE}.
POSTGRES_USER=appPOSTGRES_PASSWORD=secreto123POSTGRES_DB=midbAPP_PORT=8000services: app: ports: - "${APP_PORT}:8000" environment: - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
db: image: postgres:16 environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB}Edite los valores del .env y observe cómo Compose sustituye cada referencia en el archivo.
docker compose config (resultado)
Concepto 4 de 7
Carga variables de entorno desde un archivo específico directamente en el contenedor, sin interpolación en compose.yml.
services: app: env_file: - ./app.env db: env_file: - ./db.envCada servicio puede tener su propio archivo de variables, manteniendo la configuración segmentada por componente.
Concepto 5 de 7
Dos mecanismos con propósitos y momentos de aplicación distintos.
Las variables se sustituyen dentro del archivo Compose durante su procesamiento. Resuelve ${VARIABLE} antes de crear los contenedores.
Las variables se cargan directamente en el entorno del contenedor. No participan en la sustitución de variables del archivo Compose.
Concepto 6 de 7
Confirmar que las variables se cargaron correctamente dentro del contenedor en ejecución.
Verificar variables 3 comandos
Ver todas las variables del servicio.
docker compose exec app envDATABASE_URL=postgresql://app:secreto123@db:5432/midbLOG_LEVEL=debugPORT=8000
Buscar una variable específica.
docker compose exec app env | grep DATABASE_URLDATABASE_URL=postgresql://app:secreto123@db:5432/midb
Ver la configuración resuelta de Compose.
docker compose configMuestra la configuración con todas las variables ya resueltas. Es el primer paso para diagnosticar problemas de interpolación.
Concepto 7 de 7
Cuando una misma variable se define en múltiples fuentes, Compose resuelve el valor siguiendo un orden de prioridad.
docker compose run -e.environment o env_file cuyo valor proviene de interpolación.env_file.La lista va de mayor a menor prioridad. Active las fuentes que definen LOG_LEVEL y observe cuál gana. Por debajo de todas está el valor que la imagen define con ENV en su Dockerfile.
Autoevaluación
Cinco preguntas rápidas para verificar las ideas clave de la lectura. Cada respuesta incluye una explicación.
0/5 respuestas correctas