Variáveis em Dockerfiles

Introdução ao Docker

Tim Sangster

Software Engineer @ DataCamp

Variáveis com ARG

Crie variáveis no Dockerfile

ARG <var_name>=<var_value>

Ex.: ARG path=/home/repl

Para usar no Dockerfile

$path

Ex.: COPY /local/path $path

Introdução ao Docker

Casos de uso do ARG

Definindo a versão do 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

Configurando uma pasta

FROM ubuntu
ARG project_folder=/projects/pipeline_v3
COPY /local/project/files $project_folder
COPY /local/project/test_files $project_folder/tests
Introdução ao Docker

Definindo ARG no build

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

Definindo uma variável no comando de build

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

ARG é sobrescrito, e os arquivos vão para:

COPY /local/project/files /repl/pipeline
COPY /local/project/test_files /repl/pipeline/tests
Introdução ao Docker

Variáveis com ENV

Crie variáveis no Dockerfile

ENV <var_name>=<var_value>

Ex.: ENV DB_USER=pipeline_user

Para usar no Dockerfile ou em runtime

$DB_USER

Ex.: CMD psql -U $DB_USER

Introdução ao Docker

Casos de uso do ENV

Definindo um diretório para uso em runtime

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

Definir ou substituir uma variável em 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
Introdução ao Docker

Segredos em variáveis não são seguros

docker history <image-name>

ARG DB_PASSWORD=example_password

Vai aparecer em docker history:

IMAGE          CREATED        CREATED BY                          SIZE      ...
cd338027297f   2 months ago   ARG DB_PASSWORD=example_password    0B        ...
Introdução ao Docker

Resumo

Uso Instrução do Dockerfile
Criar variável acessível só durante o build ARG <name>=<value>
Criar uma variável ENV <name>=<value>

Uso Comando Shell
Sobrescrever um ARG no docker build docker build --build-arg <name>=<value>
Sobrescrever um ENV no docker run docker run --env <name>=<value> <image-name>
Ver as instruções usadas para criar a imagem docker history <image-name>
Introdução ao Docker

Vamos praticar!

Introdução ao Docker

Preparing Video For Download...