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>

用途 Shell 命令
在构建时覆盖 ARG docker build --build-arg <name>=<value>
在运行时覆盖 ENV docker run --env <name>=<value> <image-name>
查看用于创建镜像的指令 docker history <image-name>
Docker 入门

Ayo berlatih!

Docker 入门

Preparing Video For Download...