Publicar la aplicación Compose incluyendo variables de entorno
En este paso, aprenderemos cómo incluir variables de entorno en nuestra aplicación Docker Compose y cómo esto afecta la publicación. Las variables de entorno son una forma común de configurar aplicaciones, y Docker Compose proporciona varias formas de administrarlas.
Primero, detengamos el contenedor Nginx en ejecución del paso anterior. Navegue al directorio ~/project
si aún no está allí.
cd ~/project
Detenga los servicios en ejecución utilizando el comando docker-compose down
.
docker-compose down
Ahora, modifiquemos nuestro archivo docker-compose.yaml
para usar una variable de entorno. Agregaremos una variable de entorno simple al servicio web
. Abra el archivo docker-compose.yaml
en el directorio ~/project
usando nano
.
nano ~/project/docker-compose.yaml
Agregue una sección environment
a la definición del servicio web
. Agregaremos una variable llamada MY_VARIABLE
con un valor.
version: "3.8"
services:
web:
image: nginx@sha256:su_digest_de_imagen_aqui ## Reemplace con su digest real
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
Recuerde reemplazar your_image_digest_here
con el image digest real que obtuvo en el paso anterior.
Guarde el archivo presionando Ctrl + S
y salga del editor presionando Ctrl + X
.
Ahora, cuando inicie la aplicación con docker-compose up
, la variable de entorno MY_VARIABLE
se establecerá dentro del contenedor Nginx.
docker-compose up -d
Para verificar que la variable de entorno esté establecida dentro del contenedor, podemos ejecutar un comando dentro del contenedor en ejecución usando docker exec
. Primero, encuentre el ID del contenedor usando docker ps
.
docker ps
Anote el ID del contenedor (Container ID) del contenedor Nginx en ejecución. Luego, use docker exec
para ejecutar el comando printenv
dentro del contenedor y filtre la salida para MY_VARIABLE
.
docker exec < container_id > printenv | grep MY_VARIABLE
Reemplace <container_id>
con el ID real de su contenedor Nginx en ejecución. Debería ver una salida similar a MY_VARIABLE=HelloFromCompose
.
Al publicar una aplicación Compose que utiliza variables de entorno, debe considerar cómo se proporcionarán estas variables en el entorno de destino.
Un enfoque común es utilizar un archivo .env
. Docker Compose busca automáticamente un archivo llamado .env
en el directorio donde se encuentra el archivo docker-compose.yaml
. Puede definir variables de entorno en este archivo, y Compose las cargará.
Creemos un archivo .env
en el directorio ~/project
.
nano ~/project/.env
Agregue el siguiente contenido al archivo .env
:
ANOTHER_VARIABLE=ThisIsFromDotEnv
Guarde el archivo y salga de nano
.
Ahora, modifiquemos el archivo docker-compose.yaml
para usar esta nueva variable de entorno. Abra el archivo docker-compose.yaml
nuevamente.
nano ~/project/docker-compose.yaml
Agregue ANOTHER_VARIABLE
a la sección environment
.
version: "3.8"
services:
web:
image: nginx@sha256:su_digest_de_imagen_aqui ## Reemplace con su digest real
ports:
- "80:80"
environment:
- MY_VARIABLE=HelloFromCompose
- ANOTHER_VARIABLE
Observe que para ANOTHER_VARIABLE
, simplemente enumeramos el nombre de la variable. Compose buscará esta variable en el entorno donde se ejecuta docker-compose up
, incluidas las variables cargadas desde el archivo .env
.
Guarde el archivo y salga de nano
.
Ahora, detenga y reinicie la aplicación Compose para recoger los cambios.
docker-compose down
docker-compose up -d
Obtenga el nuevo ID del contenedor usando docker ps
.
docker ps
Ahora, use docker exec
para verificar ambas variables de entorno dentro del contenedor.
docker exec < container_id > printenv | grep MY_VARIABLE
docker exec < container_id > printenv | grep ANOTHER_VARIABLE
Reemplace <container_id>
con el nuevo ID del contenedor. Debería ver tanto MY_VARIABLE=HelloFromCompose
como ANOTHER_VARIABLE=ThisIsFromDotEnv
en la salida.
Al publicar, normalmente compartiría el archivo docker-compose.yaml
y proporcionaría instrucciones sobre cómo establecer las variables de entorno necesarias, ya sea a través de un archivo .env
o estableciéndolas directamente en el entorno donde se ejecuta Compose. La información confidencial no debe codificarse en los archivos docker-compose.yaml
o .env
y debe administrarse utilizando soluciones de administración de secretos (secrets management solutions).