ENV vs ARG
ENV
- 환경변수 지정
- $변수 혹은 ${변수} 형태로 표현 가능
- 또한, ${변수:-값}으로 값을 기본값으로 표현 가능
- ${변수:+값}의 경우는 반대에 경우인데 사용할 일이 있을까 싶다.
- docker run 시에 --e 옵션을 활용하여 오버라이딩 할 수 있다.
ARG
- build 시점에만 사용되는 변수
- ARG 변수 혹은 ARG 변수=값 형태로 표현 가능
- ENV처럼 ${변수:+값}, ${변수:-값}으로도 표현 가능
- docker build 시에 --build-arg 옵션을 활용하여 오버라이딩 할 수 있다.
TEST 1
Scope 확인
FROM debian:jessie-slim ENV NAME_ENV=wonchul ARG NAME_ARG=wonchul RUN echo "envirment = ${NAME_ENV:-WonChul}" \ && echo "argument = ${NAME_ARG:-WonChul}" CMD echo "envirment = ${NAME_ENV:-WonChul}" \ && echo "argument = ${NAME_ARG:-WonChul}"
- override 안했을 때(build, run)
$ docker build -t basic . # build # 결과 ... envirment = wonchul argument = wonchul ...
$ docker run basic # run # 결과 envirment = wonchul argument = WonChul
- override 했을 때(build, run)
$ docker build -t basic --build-arg NAME_ARG=WONCHUL . # build # 결과 ... envirment = wonchul argument = WONCHUL ...
$ docker run -e NAME_ENV=WONCHUL basic # run # 결과 envirment = WONCHUL argument = WonChul
TEST 2
ENV와 ARG 덮어쓰기
FROM debian:jessie-slim ARG NAME ENV NAME=${NAME:-WonChul} RUN echo "NAME = ${NAME}" CMD echo "NAME = ${NAME}"
- override 안했을 때(build, run)
$ docker build -t basic . # build # 결과 ... NAME = WonChul ...
$ docker run basic # run # 결과 NAME = WonChul
- override 했을 때(run)
$ docker run -e NAME=WONCHUL basic # run # 결과 NAME = WONCHUL
- override 했을 때(build, run)
$ docker build -t basic --build-arg NAME=WONCHUL . # build # 결과 ... NAME = WONCHUL ...
$ docker run basic # run # 결과 NAME = WONCHUL
$ docker run -e NAME=WONCHUL_ENV basic # run # 결과 NAME = WONCHUL_ENV
'IT > Docker' 카테고리의 다른 글
[Dockerfile] 자주쓰는 instruction (0) | 2020.11.26 |
---|---|
[Dockerfile] FROM (0) | 2020.11.26 |
docker image latest tag 강제로 바꾸기 (0) | 2020.07.21 |
Got permission denied while trying to connect to the Docker daemon socket at (0) | 2020.05.19 |
Docker 컨테이너 라이프 사이클 (0) | 2019.04.23 |