본문 바로가기

STUDY/Docker & Kubernetes: 실전 가이드 -2022년판

9. 환경변수와 빌드인수

환경변수와 빌드인수

 

> docker build --build-arg
> docker run --env

도커 이미지 빌드는 Dockerfile에 따라서 이루어지고, 도커 컨테이너의 실행은 도커 이미지에 따라서 이루어진다. 그런데 상황에따른 약간의 유연함은 항상 필요하다. 같은 Dockerffile로 빌드하더라도 상황에 맞게 일부 빌드 내용을 바꾸거나, 같은 이미지로 컨테이너를 실행하더라도 일부 설정을 다르게 해야할 수 있다. 이때 사용할 수 있는것이 환경변수와 빌드인수이다.

 

 


환경변수

 

// server.js
...
app.listen(80);
...

위 코드는 nodejs로 작성된 웹서버이다. 마지막에 app.listen(80) 코드를 통해 80번 포트로 요청을 받아서 동작한다는 것을 알 수 있다. 이 소스가 포함된 도커 이미지를 실행할 경우 웹서버는 항상 80번 포트를 사용할 수 밖에 없다. 만약 해당 포트를 사용할 수 없는 환경이라면 소스를 수정하고 다시 이미지를 빌드해야 할 것이다.

 

// server.js
...
app.listen(process.env.PORT);
...

 

> docker run --env PORT=8000
> docker run -e PORT=8000
> docker run --env-file ./server.env

 

서버의 소스를 위와같이 환경변수 PORT의 값으로 포트를 열도록 수정했다. 그리고 docker run 명령에서 --env, -e 또는 --env-file 옵션으로 환경변수 값을 주면 해당 포트로 서버가 실행된것을 확인할 수 있다.

 

 

// Dockerfile
...
ENV PORT 80
...
EXPOSE $PORT
...

환경변수는 docker run에 옵션뿐만 아니라 Dockerfile에서도 정의할 수 있다. Dockerfile에서 정의한 환경변수는 docker run에서 --env로 선언해주지 않아도 기본값으로 사용된다. 이렇게 환경변수는 같은 이미지로 다르게 컨테이너를 실행할 수 있도록 하는 유연성을 제공해준다. 그리고 자격증명과 같이 민감한 내용이 Dockerfile과 이미지에 포함되지 않도록 할때에도 사용된다.

 

 


빌드인수

 

// Dockerfile
...
ARG DEFAULT_PORT=80

ENV PORT $DEFAULT_PORT
...
EXPOSE $PORT
...

 

> docker build --build-arg DEFAULT_VALUE=8000

빌드인수는 이미지를 빌드할 때의 유연성을 제공해준다. PORT라는 환경변수가 Dockerfile에 정의되어 있을 때, 해당 환경변수의 기본값을 빌드할때마다 다르게 하고 싶을 수 있다. Dockerfile에 ARG로 빌드인수를 선언하고 docker build에 --build-arg 옵션을 사용하여 빌드할때마다 그 값을 바꿀 수 있다.

 

 

728x90