도커는 빌드 타임 인수와 런타임 환경 변수를 지원해 유연한 이미지와 컨테이너를 만들 수 있다.
환경 변수는 런타임 (docker run) 에 유용하게 사용된다.
ENV PORT 80
EXPOSE $PORT
app.listen(process.env.PORT);
도커파일에 환경 변수를 지정하면 도커 파일내에서도 쓸 수 있고, 코드에도 사용할 수 있다.
docker run --name feedback-app -p 3000:8000 --rm -d --env PORT=8000 -v /app/node_modules -v feedback:/app/feedback -v /app/temp -v "<바인드 마운트>:/app:ro" feedback:env
--env PORT=8000
를 통해 docker run 에서 환경 변수를 지정할 수 있어 이미지를 재빌드 하지 않아도 된다는 장점이 있다.
--env-file <환경설정 파일>
플래그로 환경 파일의 셋팅을 환경 변수로 넘길 수 있다.
PORT=8000
원래 컨테이너에서 수행중인 애플리케이션은 80번 포트에서만 listen 하고 있었다..
보안 데이터를 Dockerfile에 직접 포함하면 안된다. 그렇기 때문에 환경 변수 파일을 이용해야 한다. 그렇지 않으면 이미지에 값이 포함되며 docker history <이미지>
를 통해 값을 읽을 수 있다.
이미지를 빌드할 때, 다른 값을 끼워 넣을 수 있다. docker build
시에 사용
ARG DEFAULT_PORT=80
ENV PORT $DEFAULT_PORT
EXPOSE $PORT
ARG 도커파일 내에서만 쓸 수 있다.
docker build -t feedback:dev --build-arg DEFAULT_PORT=8000 .
원래 이미지에 빌드된 애플리케이션은 사용자가 env를 넣지 않는다면 80번 포트를 기본으로 사용한다.
ARG를 통해 이미지를 빌드할 때 사용자가 arg로 기본으로 사용할 port를 지정할 수 있게 되었다.