¿Cómo configurar las variables de entorno de Docker?

Docker es una herramienta versátil que garantiza un entorno de desarrollo uniforme en distintas plataformas. Las variables de entorno en Docker desempeñan un papel importante en la configuración de aplicaciones dentro de un contenedor Docker.

En esta guía, explorarás la información esencial sobre las variables de entorno en Docker. Además, aprenderás cómo establecer variables de entorno en Docker mediante varios métodos, incluyendo su definición o sobrescritura a través de comandos de Docker CLI y Docker Compose, junto con algunas buenas prácticas a tener en cuenta.

Qué son las variables de entorno en Docker

Las variables de entorno en Docker son valores predefinidos que influyen en todas las aplicaciones dentro de un contenedor. Sirven para distintos propósitos, como definir el comportamiento de la aplicación, establecer parámetros de configuración para imágenes Docker y almacenar de forma segura información sensible como credenciales de bases de datos o claves API.

Estas variables son importantes para mejorar la portabilidad y flexibilidad del contenedor. Permiten ajustar la configuración según el entorno de despliegue sin necesidad de reconstruir la imagen. De esta forma, las configuraciones se inyectan en tiempo de ejecución, garantizando que el contenedor funcione en distintos entornos y aumentando su portabilidad. El entorno del contenedor solo se establece cuando se define explícitamente en la configuración del servicio.

Cómo establecer variables de entorno en un Dockerfile

Un Dockerfile define todos los pasos necesarios para construir una imagen Docker y permite definir dos tipos de variables:

ENV: variables de entorno
ARG: variables en tiempo de construcción

Variables ENV

Las variables definidas con ENV se aplican a cualquier contenedor creado a partir de la imagen. El formato para establecer una variable en el Dockerfile es:

ENV env_variable_name=value

Variables ARG

Las variables de construcción se definen con ARG y pueden pasarse durante el proceso de build.

A continuación se muestra un ejemplo de Dockerfile que utiliza variables de entorno:

# Use an official Node.js runtime as a parent image
FROM node:14
# Set environment variables
ENV NODE_ENV=production
ENV PORT=3000
# Set the working directory
WORKDIR /usr/src/app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy the rest of the application code
COPY . .
# Expose port 3000
EXPOSE 3000
# Run the app
CMD ["npm", "start"]

En este ejemplo, NODE_ENV y PORT son variables de entorno definidas mediante la directiva ENV. Estas variables estarán disponibles para cualquier contenedor construido a partir de este Dockerfile.

Visualización de variables de entorno en Docker: ver y gestionar variables en un contenedor

Para ver las variables de entorno configuradas dentro de un contenedor o imagen Docker, existen varios métodos útiles para depuración e inspección.

1. Usar el comando docker inspect

El comando docker inspect permite examinar información detallada sobre un contenedor o imagen, incluidas las variables de entorno. Puedes usarlo así:

docker inspect --format '{{.Config.Env}}' <containerId_or_imageId>

Sustituye <containerId_or_imageId> por el ID real del contenedor o imagen. Este comando recupera y muestra únicamente las variables de entorno en formato JSON. Es útil para comprobar rápidamente qué variables están configuradas.

2. Usar el comando docker exec

Otro método para ver las variables de entorno es utilizar docker exec:

docker exec <containerID> env

Reemplaza <containerID> por el ID del contenedor en ejecución. Este comando ejecuta env dentro del contenedor y lista todas las variables configuradas.

Cómo establecer variables de entorno con Docker Compose

Usar CLI para definir variables en tiempo de ejecución no es ideal en aplicaciones con múltiples contenedores. Una mejor práctica es utilizar un archivo docker-compose.yml para definirlas. Este archivo contiene toda la configuración necesaria y se aplica con un solo comando al iniciar los contenedores. Para definir variables con Docker Compose, deben declararse explícitamente en la configuración del servicio.

Existen dos métodos principales.

1. Usar el atributo environment

En este método, defines las variables directamente en el archivo docker-compose.yml. Ejemplo con una aplicación Node y MongoDB:

Docker compose file:

version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- PORT=3000
- MONGO_URI=mongodb://mongo:27017/database_name
depends_on:
- mongo
mongo:
image: mongo:4.4
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
volumes:
Mongo-data:

2. Usar archivo .env o atributo env_file

En este método, almacenas las variables en un archivo .env separado y lo referencias desde docker-compose.yml.

Archivo .env:

PORT=3000
MONGO_URI=mongodb://mongo:27017/database_name

Docker compose file:

version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"

env_file:

- .env
depends_on:
- mongo
mongo:
image: mongo:4.4
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
volumes:
Mongo-data:

El uso de un archivo .env aporta flexibilidad y comodidad, ya que puede reutilizarse con docker run --env-file o compartirse entre varios servicios sin duplicar configuraciones largas en YAML.

Este enfoque separa las variables del archivo principal, mejorando organización y seguridad. También permite usar varios archivos .env en una misma aplicación. Las rutas especificadas son relativas al docker-compose.yml.

3. Establecer variables en tiempo de ejecución con docker compose

Docker Compose permite definir variables usando la opción --env-file:

docker compose --env-file <environmental_variables_file> up

Ahora añade una nueva variable al archivo .env:

MONGODB_PASSWORD=test

Ejecuta la aplicación y verifica las variables configuradas.

4. Usar docker compose run para variables puntuales

Cuando usas docker compose run, puedes establecer variables con -e o --env-file, igual que docker run.

Ejemplo:

docker compose run -e DEBUG=0 web

Este comando define DEBUG=0 solo para esa ejecución del contenedor web.

Buenas prácticas para variables de entorno en Docker

  • Usar archivo .env: Guarda variables en un archivo separado para organizar entornos. Añádelo a .gitignore para evitar exponer datos sensibles.
  • Encriptar datos sensibles: No guardes contraseñas ni claves en texto plano. Usa cifrado y descífralas en la aplicación.
  • Evitar cambios en runtime: No modifiques variables dentro de un contenedor activo. Si necesitas cambios, reinicia el contenedor con nueva configuración.
    Usar nomenclatura estándar: Mantén nombres consistentes para facilitar
  • mantenimiento.
  • Mantenimiento regular: Revisa y limpia variables obsoletas para mantener claridad.

Conclusión

Esta guía explicó la importancia de las variables de entorno en Docker para mantener un comportamiento consistente de las aplicaciones en distintas plataformas. Vimos cómo definirlas en un Dockerfile y gestionarlas mediante CLI y Docker Compose. Siguiendo buenas prácticas, puedes proteger datos sensibles, mantener configuraciones coherentes y mejorar la eficiencia del despliegue.

BlueVPS.com ofrece soluciones VPS de alto rendimiento con disponibilidad tipo cloud, proporcionando un entorno simple, escalable y personalizable ideal para despliegues Docker. Disfruta de recursos dedicados y tráfico ilimitado para optimizar tus aplicaciones containerizadas con rendimiento sólido y escalabilidad fluida.

Blog