본문으로 바로가기
728x90
반응형
SMALL

DOCKER COMPOSE의 환경변수 사용 방법

version: '3'
services:
  mysql:
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

위와 같이 ${}으로 환경변수 호출하여 사용하는 것을 알 수 있다.

만약 민감정보라면 컴포즈에 직접 값이 노출되는것 보다는 환경변수로 사용하는것이 더 안전한 방법이다.

 

 

환경변수 사용방법

1. 쉘 환경변수 사용

cli 환경에서 변수 선언을 한다. 이 값은 전역적으로 선언된다.

$ export MYSQL_ROOT_PASSWORD=1234

convert 로 적용됬는지 확인하자

$ docker compose convert


#    environment:
#      MYSQL_ROOT_PASSWORD: 1234

 

 

2. 개별 환경변수 파일 만들기

어떤 환경변수가 존재하며 도커 컴포즈 별로 환경변수 명은 중복되만 값을 다르게 쓰고싶을 경우.

도커 컴포즈같은 위치에서 .env 을 만들어서 사용하자

.env

MYSQL_ROOT_PASSWORD=1234

오로지 Docker Compose에서 docker compose up 명령어 수행시에만 활용 가능하다

 

 

3. 한 지점에서 여러 환경변수 파일 만들기

여러곳에서 환경변수를 따로 관리하면 힘들어진다. 때문에 한 곳에서 관리하며

도커 컴포즈의 --env-file 옵션을 통해 환경변수 path만 대입하면 된다.

필자는 대게 이 방법을 애용중이며 효율적이라 생각한다.

.env.dev

MYSQL_ROOT_PASSWORD=1234

.env.prod

MYSQL_ROOT_PASSWORD=Server!@34

운영별 적용도 가능하다.

$ docker compose --env-file ./config/.env.dev config
$ docker compose --env-file ./config/.env.prod config
 

4. Docker Compose 내부에 명시하기

version: '3.9'
services:
  mysql:
    env_file: # 파일이 여러 개라면 리스트 형태로 삽입한다.
      - a.env
      - b.env
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
주의사항

중복된 변수명이 존재할 경우, env_file 옵션의 선언 순서로 판단하여 맨 뒤 b.env 파일이 적용된다.

선언 순서에 주의하자

 

 

5. Dockerfile 환경변수 지정

FROM mysql:8
ENV MYSQL_ROOT_PASSWORD 1234

직접 도커파일로 이미지를 만들때 선언하면 환경변수 파일을 따로 만들 필요가 없다

 

 

환경변수 값 적용 우선순위

  • 1.Compose에 직접 입력한 값
  • 2.쉘 환경변수로 등록한 값
  • 3.환경변수 파일(.env)로 입력된 값
  • 4.Dockerfile을 통해 삽입된 값

 

주의사항

위의 모든 환경변수 관리 방법에는 단점이 존재한다.

모든 정보가 평문으로 저장된다.

이를 위해 프라이빗 레지스트리, 쿠버네티스, 도커 스윔 같은 도구에서 Secret을 지원한다.

추후 이 내용에 대해서 공부를 하고 추가로 글을 연재하겠다

 

 

 

 

 

 

 

출처:

https://seongjin.me/environment-variables-in-docker-compose/

728x90
반응형
LIST