Saltar al contenido

¿Cómo configuro las variables de entorno durante la compilación en Docker?

Ya no necesitas indagar más por otras webs ya que llegaste al espacio indicado, poseemos la respuesta que necesitas hallar sin complicarte.

Solución:

ARG es para configurar las variables de entorno que se utilizan durante la docker build proceso: no están presentes en la imagen final, por lo que no los ve cuando usa docker run.

Tu usas ARG para configuraciones que solo son relevantes cuando se está construyendo la imagen y no son necesarias para los contenedores que ejecuta desde la imagen. Puedes usar ENV para que las variables de entorno se utilicen durante la compilación y en los contenedores.

Con este Dockerfile:

FROM ubuntu                                                                                                            
ARG BUILD_TIME=abc                                                                                                     
ENV RUN_TIME=123                                                                                                       
RUN touch /env.txt                                                                                                     
RUN printenv > /env.txt 

Puede anular el argumento de compilación como lo ha hecho con docker build -t temp --build-arg BUILD_TIME=def .. Entonces obtienes lo que esperas:

> docker run temp cat /env.txt                                                                                         
HOSTNAME=b18b9cafe0e0                                                                                                  
RUN_TIME=123                                                                                                           
HOME=/root                                                                                                             
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin                                                      
BUILD_TIME=def                                                                                                         
PWD=/ 

Resumiré los aspectos más destacados de este gran artículo.


ARG Vs ENV

1) Breve explicación:
ARG solo está disponible durante la compilación de una imagen de Docker (RUN, etc.), no después de que se crea la imagen y se inician los contenedores desde ella (ENTRYPOINT, CMD).

ENV los valores están disponibles para los contenedores, pero también los comandos de estilo RUN durante la compilación de Docker comenzando con la línea donde se introducen. Si configura una variable de entorno en un contenedor intermedio usando bash (RUN export VARI = 5 &&…) no persistirá en el siguiente comando.

2) Explicación más larga:
ARG también se conocen como variables de tiempo de compilación. Solo están disponibles desde el momento en que se ‘anuncian’ en el Dockerfile con una instrucción ARG hasta el momento en que se crea la imagen. Los contenedores en ejecución no pueden acceder a los valores de las variables ARG. Esto también se aplica a las instrucciones CMD y ENTRYPOINT que solo indican qué debe ejecutarse el contenedor de forma predeterminada. Si le dice a un Dockerfile que espere varias variables ARG (sin un valor predeterminado) pero no se proporciona ninguna al ejecutar el comando de compilación, aparecerá un mensaje de error.

Sin embargo, los valores ARG se pueden inspeccionar fácilmente después de crear una imagen, al ver el historial de la ventana acoplable de una imagen. Por lo tanto, son una mala elección para datos sensibles.

ENV Las variables también están disponibles durante la compilación, tan pronto como las introduzca con una instrucción ENV. Sin embargo, a diferencia de ARG, también son accesibles mediante contenedores que parten de la imagen final. Los valores de ENV se pueden anular al iniciar un contenedor, más sobre eso a continuación.

3) Con diagrem:

A continuación, se ofrece una descripción general simplificada de las disponibilidades de ARG y ENV en torno al proceso de creación de una imagen de Docker a partir de un Dockerfile y ejecución de un contenedor.

Se superponen, pero ARG no se puede utilizar desde el interior de los contenedores.

ingrese la descripción de la imagen aquí

Configuración de valores ARG y ENV

Configuración de valores ARG

Entonces, tienes tu Dockerfile, que define ARG y ENV valores. ¿Cómo configurarlos y dónde? Puede dejarlos en blanco en el Dockerfileo establecer valores predeterminados. Si no proporciona un valor a las variables ARG esperadas que no tienen un valor predeterminado, recibirá un mensaje de error.

Aquí hay un Dockerfile ejemplo, tanto para valores predeterminados como sin ellos:

ARG some_variable_name
# or with a hard-coded default:
#ARG some_variable_name=default_value

RUN echo "Oh dang look at that $some_variable_name"
# you could also use braces - $some_variable_name

Al crear una imagen de Docker desde la línea de comandos, puede configurar ARG valores usando –build-arg:

$ docker build --build-arg some_variable_name=a_value

Ejecutando ese comando, con lo anterior Dockerfile, dará como resultado la impresión de la siguiente línea (entre otras): Oh maldición, mira ese a_value

Entonces, ¿cómo se traduce esto en usar docker-compose.yml archivos?
Al usar docker-compose, puede especificar valores para transmitir ARG, en un bloque de argumentos:
(archivo docker-compose.yml)

version: '3'

services:
  somename:
    build:
      context: ./app
      dockerfile: Dockerfile
      args:
        some_variable_name: a_value

Cuando intenta establecer una variable que no es ARG mencionado en el Dockerfile, Docker se quejará.

Configuración de valores ENV

Entonces, ¿cómo configurar ENV ¿valores? Puede hacerlo al iniciar sus contenedores (y veremos esto un poco a continuación), pero también puede proporcionar valores predeterminados ENV valores directamente en su Dockerfile codificándolos. Además, puede establecer valores predeterminados dinámicos para las variables de entorno.

Al crear una imagen, lo único que puede proporcionar es ARG valores, como se describe arriba. No puedes proporcionar valores para ENV variables directamente. Sin embargo, ambos ARG y ENV pueden trabajar juntos. Puede utilizar ARG para establecer los valores predeterminados de ENV vars.
Aquí hay un básico Dockerfile, utilizando valores predeterminados codificados de forma rígida:

# no default value
ENV hey
# a default value
ENV foo /bar
# or ENV foo=/bar

# ENV values can be used during the build
ADD . $foo
# or ADD . $foo
# translates to: ADD . /bar

Y aquí hay un fragmento de Dockerfile, usando valores env dinámicos en construcción:

# expect a build-time variable
ARG A_VARIABLE
# use the value to set the ENV var default
ENV an_env_var=$A_VARIABLE
# if not overridden, that value of an_env_var will be available to your containers!

Una vez creada la imagen, puede lanzar contenedores y proporcionar valores para ENV variables de tres formas diferentes, ya sea desde la línea de comando o utilizando un docker-compose.yml expediente.
Todos ellos anularán cualquier defecto ENV valores en el Dockerfile.
diferente a ARG, puede pasar todo tipo de variables de entorno al contenedor. Incluso aquellos no definidos explícitamente en el Dockerfile.
Sin embargo, depende de su aplicación si eso hará algo.

Opción 1: proporcione los valores uno por uno

Desde la línea de comandos, use la bandera -e:

$ docker run -e "env_var_name=another_value" alpine env

A partir de una docker-compose.yml expediente:

version: '3'

services:
  plex:
    image: linuxserver/plex
      environment:
        - env_var_name=another_value

Opción 2: pasar valores de variables de entorno desde su host

Es el mismo que el método anterior.
La única diferencia es que no proporciona un valor, solo nombra la variable. Esto hará que Docker acceda al valor actual en el entorno del host y lo pase al contenedor.

$ docker run -e env_var_name alpine env

Para el docker-compose.yml archivo, omita el signo de la ecuación y todo lo que le sigue para obtener el mismo efecto.

version: '3'

services:
  plex:
    image: linuxserver/plex
      environment:
        - env_var_name

Opción 3: tomar valores de un archivo (env_file)

En lugar de escribir las variables o codificarlas (no es de buen gusto según la gente de 12 factores), podemos especificar un archivo para leer los valores. El contenido de dicho archivo se parece a esto:

env_var_name=another_value

El archivo de arriba se llama env_file_name (nombre arbitrario) y está ubicado en el directorio actual.
Puede hacer referencia al nombre del archivo, que se analiza para extraer las variables de entorno para establecer:

$ docker run --env-file=env_file_name alpine env

Con docker-compose.yml files, solo hacemos referencia a un env_file, y Docker lo analiza en busca de las variables para establecer.

version: '3'

services:
  plex:
    image: linuxserver/plex
    env_file: env_file_name

Formas comunes de configurar ARG y ENV desde la línea de comando

Aquí hay una pequeña hoja de trucos, que combina una descripción general de ARG y ENV disponibilidad con formas comunes de configurarlos desde la línea de comandos.

ingrese la descripción de la imagen aquí

Calificaciones y comentarios

Si te mola la idea, tienes la libertad de dejar un tutorial acerca de qué te ha impresionado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *