Variables en Dockerfiles

Introducción a Docker

Tim Sangster

Software Engineer @ DataCamp

Variables con la instrucción ARG

Crea variables en un Dockerfile

ARG <var_name>=<var_value>

Por ejemplo: ARG path=/home/repl

Para usarlas en el Dockerfile

$path

Ejemplo: COPY /local/path $path

Introducción a Docker

Casos de uso de ARG

Definir la versión de Python

FROM ubuntu
ARG python_version=3.9.7-1+bionic1
RUN apt-get install python3=$python_version
RUN apt-get install python3-dev=$python_version

Configurar una carpeta

FROM ubuntu
ARG project_folder=/projects/pipeline_v3
COPY /local/project/files $project_folder
COPY /local/project/test_files $project_folder/tests
Introducción a Docker

Definir ARG en tiempo de build

FROM ubuntu
ARG project_folder=/projects/pipeline_v3
COPY /local/project/files $project_folder
COPY /local/project/test_files $project_folder/tests

Definir una variable en la build

docker build --build-arg project_folder=/repl/pipeline .

ARG se sobrescribe y los archivos quedan en:

COPY /local/project/files /repl/pipeline
COPY /local/project/test_files /repl/pipeline/tests
Introducción a Docker

Variables con ENV

Crea variables en un Dockerfile

ENV <var_name>=<var_value>

Por ejemplo: ENV DB_USER=pipeline_user

Para usar en el Dockerfile o en runtime

$DB_USER

Ejemplo: CMD psql -U $DB_USER

Introducción a Docker

Casos de uso de ENV

Definir un directorio para usar en runtime

ENV DATA_DIR=/usr/local/var/postgres
ENV MODE production

Definir o reemplazar una variable en runtime

docker run --env <key>=<value> <image-name>

docker run --env POSTGRES_USER=test_db --env POSTGRES_PASSWORD=test_db postgres

1 https://hub.docker.com/_/postgres
Introducción a Docker

Los secretos en variables no son seguros

docker history <image-name>

ARG DB_PASSWORD=example_password

Mostrará en docker history:

IMAGE          CREATED        CREATED BY                          SIZE      ...
cd338027297f   2 months ago   ARG DB_PASSWORD=example_password    0B        ...
Introducción a Docker

Resumen

Uso Instrucción de Dockerfile
Crear una variable accesible solo durante la build ARG <name>=<value>
Crear una variable ENV <name>=<value>

Uso Comando de shell
Sobrescribir un ARG en docker build docker build --build-arg <name>=<value>
Sobrescribir un ENV en docker run docker run --env <name>=<value> <image-name>
Ver las instrucciones usadas para crear una imagen docker history <image-name>
Introducción a Docker

¡Vamos a practicar!

Introducción a Docker

Preparing Video For Download...