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/
'나의 주니어 개발 일기 > Docker(도커)' 카테고리의 다른 글
nGrinder 로 API 부하테스트 하기 with 도커 (1) | 2024.03.29 |
---|---|
Docker-compose로 DB 스키마 자동생성 하는 방법 (0) | 2024.03.28 |
Docker overlay2 경로 이동 방법 (0) | 2024.02.27 |
Docker에서 log관리 안하면 디스크가 터진다. (0) | 2023.12.31 |
Docker Network 트러블 슈팅 (0) | 2023.12.30 |