Docker Container에서 환경변수를 활용하는 방법에 대해서 설명합니다. 현재 시점 기준으로 하여 docker documentation에 명시된 사항들을 대상으로 합니다. 다양한 방법을 소개하나, 각 인프라 환경에 맞게 선택하여 활용하는 것을 권장합니다.

기본 사용방법

docker 를 실행하는 구문에 -e 옵셥을 이용하여 설정하는 방법입니다.

docker run -e VARIABLE=VALUE ...

만약 docker-compose나 kubernetes 에서 yaml 파일을 활용하는 경우 다음과 같이 설정해 주면 됩니다.

web:
  environment:
    - DEBUG=1

시스템 환경변수 pass 하기

만약 docker 를 실행하는 시스템의 환경 변수를 그대로 전달하고 싶다면 VARIABLE=VALUE 쌍에서 VALUE를 뺀 VARIABLE만을 전달하면 됩니다.

docker run -e VARIABLE ...

이렇게 하면 docker run을 실행하는 시스템의 환경 변수값을 그대로 전달하게 됩니다. (당연하게도, container를 실행한 이후에 시스템에서 환경변수의 값을 변경해도 container에는 적용되지 않습니다. 다시 재시작을 해주어야 합니다.)

web:
  environment:
    - DEBUG

env file 활용하기

환경 변수가 많아지거나, 혹은 시스템별로 관리를 하고 싶은 경우에는 파일로 묶어서 처리할 수 있습니다.

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 의 정보를 아래와 같이 활용할 수 있습니다.