Docker ARG / ENV Variables(인수와 환경변수)

ARG

ENV

이러한 방식을 통해 하드 코딩할 필요 없이 유연한 이미지와 컨테이너를 만들 수 있습니다.

ENV PORT 80

# docker에게 $ 뒤에 있는 변수가 환경 변수임을 알려야합니다.
# 그래야만 PORT 환경 변수를 찾고 거기에 저장된 값을 호출합니다.
EXPORT $PORT
docker run ⁠--env PORT=8000
# or
docker run ... --env-file ./.env

환경 변수(ENV) 및 보안에 대한 한 가지 중요한 참고사항

환경 변수에 저장하는 데이터의 종류에 따라, 보안 데이터를 Dockerfile에 직접 포함하고 싶지 않을 수도 있습니다.

그 대신 런타임에만 사용되는 별도의 환경 변수 파일로 이동시키죠. (즉, Docker run으로 컨테이너를 실행할 때).

그렇지 않으면, 값이 ‘이미지에 포함’되며, 모든 이가 ‘docker history <이미지>‘를 통해, 이 값을 읽을 수 있습니다.

일부 값의 경우, 이것이 중요하지 않을 수도 있지만, 자격 증명, 개인 키 등의 경우에는 확실히 피해야만 합니다!

별도의 파일을 사용하는 경우, ‘docker run’을 실행할 때 그 파일을 가리키므로, 그 값은 이미지의 일부분이 아닙니다. 하지만 소스 컨트롤을 사용하는 경우, 별도의 파일을 소스 컨트롤 저장소의 일부분으로 커밋하지 않도록 조심하세요.

Build-time Arguments

도커 파일에 다양한 값을 플러그인하거나 도커 파일에 하드 코딩하지 않고도 이미지를 빌드할 때 다른 값을 플러그인할 수 있습니다.

# Dockerfile에서 사용할 수 있는 변수입니다.
ARG DEFAULT_PORT = 80
...
ENV PORT $DEFAULT_PORT

해당 ARG도 레이어를 생성하므로 만약 값이 수정된다면 모든 후속 레이어가 리빌드 되고, 재실행 됩니다.

모든 후속 명령이 재실행되므로 아래에 두는 것이 적합합니다.

Module 요약⁠