Переменные в Dockerfile

Введение в Docker

Tim Sangster

Software Engineer @ DataCamp

Переменные с инструкцией ARG

Создание переменной в Dockerfile

ARG <var_name>=<var_value>

Например ARG path=/home/repl

Использование в Dockerfile

$path

Например COPY /local/path $path

Введение в Docker

Примеры использования инструкции ARG

Указание версии 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

Настройка папки

FROM ubuntu
ARG project_folder=/projects/pipeline_v3
COPY /local/project/files $project_folder
COPY /local/project/test_files $project_folder/tests
Введение в Docker

Переопределение ARG во время сборки

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

Передача переменной при сборке

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

ARG перезаписывается, и файлы попадают в:

COPY /local/project/files /repl/pipeline
COPY /local/project/test_files /repl/pipeline/tests
Введение в Docker

Переменные с инструкцией ENV

Создание переменной в Dockerfile

ENV <var_name>=<var_value>

Например ENV DB_USER=pipeline_user

Использование в Dockerfile или во время выполнения

$DB_USER

Например CMD psql -U $DB_USER

Введение в Docker

Примеры использования инструкции ENV

Задание каталога для использования во время выполнения

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

Установка или замена переменной во время выполнения

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
Введение в Docker

Хранить секреты в переменных небезопасно

docker history <image-name>

ARG DB_PASSWORD=example_password

Будет показано в docker history:

IMAGE          CREATED        CREATED BY                          SIZE      ...
cd338027297f   2 months ago   ARG DB_PASSWORD=example_password    0B        ...
Введение в Docker

Итоги

Назначение Инструкция Dockerfile
Создать переменную, доступную только при сборке ARG <name>=<value>
Создать переменную ENV <name>=<value>

Назначение Команда оболочки
Переопределить ARG при docker build docker build --build-arg <name>=<value>
Переопределить ENV при docker run docker run --env <name>=<value> <image-name>
Просмотреть инструкции, использованные при создании образа docker history <image-name>
Введение в Docker

Давайте потренируемся!

Введение в Docker

Preparing Video For Download...