[Docker] ARG vs ENV 차이점

ARG(빌드 시간 변수)

도커 이미지가 빌드되는 동안 사용할 수 있는 변수입니다. 이미지를 빌드한 후에는 ARG를 사용할 수 없습니다. 이는 주로 빌드 시점에 필요한 설정 값을  전달하기 위해 사용됩니다. ARG 변수를 사용하면 다음 명령어로 빌드 시 변수 값을 설정할 수 있습니다.

FROM alpine

ARG name=hanmailco34
RUN echo "My name is $name"
CMD echo "My name is $name"

Dockerfile을 빌드할 때 RUN 명령어로 찍히는 걸 볼 수 있습니다.

하지만 docker run할 때는 $name의 값이 비어있습니다.

docker build시 값을 전달할 수도 있습니다.

docker build --build-arg name=hanmailco34 -t test-001 .

ENV- 전체적으로 사용 가능한 변수

도커 이미지와 컨테이너 모두에서 사용할 수 있는 변수입니다. ENV는 컨테이너를 시작할 때 재정의할 수 있으며, 이미지가 빌드된 후에도 사용할 수 있습니다. ENV 변수는 주로 런타임 설정 값을 전달하기 위해 사용됩니다.

FROM alpine

ENV name=hanmailco34
RUN echo "My name is $name"
CMD echo "My name is $name"

Dockerfile을 빌드한 후 컨테이너를 실행할 때 마다 값이 찍히는 걸 볼 수 있습니다.

docker run 할때 값을 전달할 수도 있습니다.

docker run --rm test-001
# 출력 : My name is hanmailco34
docker run --rm -e name=tistory test-001
# 출력 : My name is tistory

기본 환경 변수 값을 오버라이드할 수 있습니다.