Docker Container에서 환경변수를 활용하는 방법에 대해서 설명합니다. 현재 시점 기준으로 하여 docker documentation에 명시된 사항들을 대상으로 합니다. 다양한 방법을 소개하나, 각 인프라 환경에 맞게 선택하여 활용하는 것을 권장합니다.
docker 를 실행하는 구문에 -e
옵셥을 이용하여 설정하는 방법입니다.
docker run -e VARIABLE=VALUE ...
만약 docker-compose
나 kubernetes
에서 yaml
파일을 활용하는 경우 다음과 같이 설정해 주면 됩니다.
web:
environment:
- DEBUG=1
만약 docker 를 실행하는 시스템의 환경 변수를 그대로 전달하고 싶다면 VARIABLE=VALUE
쌍에서 VALUE
를 뺀 VARIABLE
만을 전달하면 됩니다.
docker run -e VARIABLE ...
이렇게 하면 docker run
을 실행하는 시스템의 환경 변수값을 그대로 전달하게 됩니다. (당연하게도, container를 실행한 이후에 시스템에서 환경변수의 값을 변경해도 container에는 적용되지 않습니다. 다시 재시작을 해주어야 합니다.)
web:
environment:
- DEBUG
환경 변수가 많아지거나, 혹은 시스템별로 관리를 하고 싶은 경우에는 파일로 묶어서 처리할 수 있습니다.
docker run --env-file=FILE ...
파일은 VARIABLE=VALUE
가 한줄에 하나씩 나온 형태의 텍스트 문서이면 됩니다. (확장자는 문제되지 않는 것으로 알고 있습니다.)
web:
env_file:
- web-variables.env
만약 일일히 env_file
을 지정해 주지 않고 사용하고 싶다거나, 세트로 바꾸어 가면서 실행해야 할 필요가 없다면 .env
파일을 실행하는 위치에 생성해 주고 실행하면 됩니다.
$ cat .env
TAG=v1.5
$ cat docker-compose.yml
version: '3'
services:
web:
image: "webapp:${TAG}"
위 상황에서 docker-compose up
으로 실행한 container 의 정보를 아래와 같이 활용할 수 있습니다.