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>

용도 셸 명령
docker build에서 ARG 덮어쓰기 docker build --build-arg <name>=<value>
docker run에서 ENV 덮어쓰기 docker run --env <name>=<value> <image-name>
이미지를 만든 지시문 확인 docker history <image-name>
Docker 입문

연습해 봅시다!

Docker 입문

Preparing Video For Download...