Docker이미지와 빌드

ARG와 ENV 차이

빌드 시점 변수 `ARG`와 런타임 환경 변수 `ENV`를 어떻게 구분해야 하는지 정리합니다.

마지막 수정 2026년 3월 21일

기본 패턴

dockerfile
ARG NODE_VERSION=22
FROM node:${NODE_VERSION}-alpine

ENV NODE_ENV=production
ENV PORT=3000

설명

  • ARG는 이미지 빌드 과정에서만 쓰는 변수입니다. 베이스 이미지 버전, 빌드 옵션, 의존성 경로 같은 값을 빌드 시점에 바꿀 때 적합합니다.
  • ENV는 최종 이미지와 컨테이너 실행 환경에 남는 변수입니다. 애플리케이션 설정 기본값, 런타임 옵션, 포트 같은 값에 주로 씁니다.
  • 둘 다 "변수"처럼 보이지만 생존 범위가 다릅니다. ARG는 빌드가 끝나면 런타임 기본값으로 직접 쓰이지 않습니다.
  • 실전에서는 "이미지를 어떻게 만들 것인가"와 "컨테이너가 어떤 설정으로 돌 것인가"를 이 둘로 분리해서 생각하면 Dockerfile 구조가 훨씬 선명해집니다.
  • 민감한 값은 ARGENV든 Dockerfile에 직접 적는 방식이 적절하지 않을 수 있습니다. Secret 관리 도구를 따로 봐야 하는 경우가 많습니다.

짧은 예제

bash
docker build --build-arg NODE_VERSION=20 -t my-app .
docker run -e PORT=4000 my-app

빠른 정리

항목시점
ARG이미지 빌드 시점
ENV컨테이너 실행 시점
--build-arg빌드 변수 주입
-e런타임 환경 변수 주입

주의할 점

ARGENV는 목적이 다르기 때문에 하나를 다른 하나 대신 억지로 쓰면 Dockerfile 의도가 흐려집니다. 빌드 변수와 운영 설정을 명확히 분리하는 습관이 장기적으로 훨씬 안전합니다.

참고 링크

2 sources