Cómo pasar variables de entorno a contenedores Docker

Jack Wallen le muestra cómo pasar variables de entorno a contenedores Docker para un proceso de desarrollo más eficiente.

Ilustración: Lisa Hornung / TechRepublic

¿Sabía que puede pasar variables de entorno desde su host a contenedores Docker? Al usar esta función, puede hacer que el desarrollo de esos contenedores sea un poco más eficiente. Pero antes de entrar en el cómo de esto, debemos abordar el qué, como en, ¿qué son las variables de entorno?

VER: Los mejores lenguajes de programación para aprender, y lo peor (TechRepublic Premium)

Las variables de entorno son valores con nombres dinámicos que se pueden almacenar y luego pasar a servicios, aplicaciones o scripts. Esta es una manera fácil de almacenar un valor en una ubicación centralizada (generalmente en la memoria) y luego usarlo globalmente. Para obtener más información sobre qué son las variables de entorno, consulte “Linux 101: ¿Qué son las variables de entorno?”

Este tipo de variables son un truco increíblemente útil para tener bajo la manga. Y si es un desarrollador de contenedores, ellos pueden ayudarlo a hacer su trabajo un poco más fácil.

Déjame enseñarte como.

Lo que necesitarás

Lo único que necesitará para pasar variables de entorno a los contenedores de Docker es una instancia en ejecución de Docker y un usuario que sea parte del grupo de Docker. Eso es todo. Pasemos algunas variables.

Cómo configurar una variable de entorno

Para pasar una variable de entorno a un contenedor, primero tenemos que configurarla. Voy a demostrar esto en Linux. Si utiliza un sistema operativo diferente para el desarrollo de contenedores, deberá averiguar cómo hacer lo mismo en la plataforma que elija.

Digamos que queremos establecer la variable para un usuario de la base de datos y planeamos usar esa variable para diferentes contenedores. Podríamos establecer una variable llamada DB_USER, que sería viable para cualquier contenedor que use cualquier tipo de base de datos. Digamos que el valor de DB_USER será TechRepublic. Para establecer esa variable, emitiríamos el comando:

export DB_USER=TechRepublic

Para verificar que se haya establecido la variable, ejecute el comando:

echo $DB_USER

Debería ver TechRepublic impreso en la terminal. Eso es todo, ha configurado su variable. Llevemos esto un paso más allá (por ejemplo) y también establezcamos una contraseña como variable de entorno. No haría esto en producción, pero es una buena forma de ilustrar cómo se hace. Establezca una variable de entorno para la contraseña con:

export DB_PWORD=T3chR3public

Cómo pasar la variable a un contenedor

Ahora que comprende cómo funcionan las variables de entorno, puede ver cómo se pueden pasar fácilmente a sus contenedores. Primero demostraré cómo hacerlo desde la línea de comandos de la ventana acoplable y luego usaré un archivo .env.

A diferencia del uso de variables de entorno en Linux, no puede configurarlas en el host y luego pasar esas variables configuradas al contenedor de la misma manera que lo haría dentro del sistema host. En otras palabras, no puede usar las variables que acabamos de configurar con el comando Docker como:

docker run --name postgresql -e $DB_PWORD -e $DB_USER -d postgres

Si intenta implementar el contenedor como tal, se ejecutará pero se cerrará inmediatamente. ¿Por qué? Porque a diferencia del sistema Linux, donde puedes definir variables de entorno como quieras, las imágenes de contenedor esperan ciertas variables. Por ejemplo, la base de datos PostgreSQL no puede usar DB_PWORD o DB_USER, ya que espera POSTGRES_PASSWORD y POSTGRES_USER. Con ese fin, puede configurar esas variables de entorno en sus hosts de Linux con los comandos:

export POSTGRES_PASSWORD=t3chr3public
export POSTGRES_USER=TechRepublic

Bien, ahora podemos ejecutar el mismo comando con:

docker run --name postgresql -e POSTGRES_PASSWORD -e POSTGRES_USER -d postgres

El comando se ejecutará correctamente y el contenedor seguirá funcionando. Puede probarlo accediendo al comando de PostgreSQL dentro del contenedor emitiendo:

docker exec -it postgresql psql -U $POSTGRES_USER

Debería encontrarse en la consola de PostgreSQL dentro de su contenedor.

Cómo pasar variables con un archivo .env

Uno de los problemas con el paso de variables de entorno como se describe anteriormente es que viven en la memoria (hasta que las desarma con el desarmado mando). Para evitar esto, usamos un archivo de variable de entorno.

Sigamos con las mismas variables que usamos anteriormente. Cree un nuevo archivo .env con el comando:

nano .env

En ese archivo pegue lo siguiente:

POSTGRES_PASSWORD=t3chr3public
POSTGRES_USER=TechRepublic

Guarde y cierre el archivo.

Ahora bien, ¿cómo pasamos esas variables? Simple, emitiríamos el comando:

docker run --name postgresql --env-file .env -d postgres

Asegúrese de usar la ruta completa a su archivo .env (si no está ejecutando el comando docker desde el mismo directorio que contiene el archivo). Su contenedor se desplegará y estará listo para usar. Puede probarlo accediendo a la consola de PostgreSQL. La única diferencia es que debe escribir manualmente el usuario (ya que no configuramos la variable POSTGRES_USER en el sistema host). Ese comando sería:

docker exec -it postgresql psql -U TechRepublic

Y así es como pasa las variables de entorno a un contenedor Docker, ya sea desde la línea de comandos o usando un archivo .env. Con suerte, puede utilizar este método en el flujo de trabajo de su desarrollador para hacer las cosas un poco más eficientes.

Ver también

Leave a Comment