오버라이드 파일을 사용해 환경별로 다른 설정값을 적용
비밀값(secrets)
- 도커 컴포즈, 도커 스웜, 쿠버네티스에서 모두 지원하는 기능으로, 설정값을 주입하기에 매우 유용한 기능
- source: 원본 위치, 컨테이너 런타임이 비밀값의 값을 읽어 오는 곳
- target: 대상 위치, 컨테이너 안에서 비밀값이 위치할 경로
# docker-compose.yml
001) services:
002) todo-web:
003) image: diamol/ch06-todo-list
004) secrets:
005) - source: todo-db-connection
006) target: /app/config/secrets.json
- 005: 이 이름으로 정의된 비밀값이 해당 컴포즈 파일에 정의되어 있어야 함.
- 006: 컨테이너 속 경로 /app/config/secrets.json 파일로 전달된다. 이 경로는 애플리케이션이 설정 파일을 찾는 경로이기도 하다.
오버라이드
- 개발 환경 용 오버라이드 파일로 개발 환경을 위한 추가 설정과 비밀값을 정의할 수 있다.
- environment: 컨테이너 안에서만 사용되는 환경 변수, 설정값을 전달하는 방법 중 가장 간단한 방법
- env_file: 텍스트 파일의 경로를 값으로 받는다.
- secrets: 컴포즈 파일의 최상위 프로퍼티. 비밀값 정의
# docker-compose-dev.yml
001) services:
002) todo-web:
003) ports:
004) - 8089:80
005) environment:
006) - Database:Provider=Sqlite
007) env_file:
008) - ./config/logging.debug.env
009)
010) secrets:
011) todo-db-connection:
012) file: ./config/empty.json
- 005~006: 이 환경 변수 값을 적용하면 애플리케이션이 데이터베이스로 파일 데이터베이스인 Sqlite 를 사용한다.
- 007~008: 이 파일에 정의된 환경 변수가 컨테이너에 적용된다.
- 010~012: todo-db-connection의 실제 값 혹은 경로가 정의된다.
호스트 컴퓨터의 환경 변수 값을 컨테이너에 전달
- 컴포즈 파일을 수정하지 않고 설정값을 변경할 수 있기 때문에 애플리케이션의 이식성이 향상된다.
- 달러 기호가 붙은 중괄호 부분이 괄호 안에 적힌 이름의 환경 변수 값으로 치환된다.
# docker-compose-test.yml
001) services:
002) todo-web:
003) ports:
004) - "${TODO_WEB_PORT}:80"
005) environment:
006) - Database:Provider=Postgres
007) env_file:
008) - ./config/logging.information.env
009) networks:
010) - app-net
011)
012) todo-db:
013) image: diamol/postgres:11.5
014) ports:
015) - "${TODO_DB_PORT}:5432"
016) networks:
017) - app-net
018)
019) networks:
020) app-net:
021) name: todo-test
022)
023) secrets:
024) todo-db-connection:
025) file: ./config/secrets.json
- 004: 도커 컴포즈를 실행 중인 컴퓨터의 환경 변수 TODO_WEB_PORT의 값이 8877이었 다면 ports 프로퍼티의 값이 "8877:80"이 된다.
env 파일 사용
- env 파일이 컴포즈 애플리케이션의 디렉터리에 존재하면 자동으로 읽어 들여 적용된다.
- 도커 컴포즈는 env 파일만을 환경 파일로 간주하기 때문에 환경 파일 여러 개를 만들어 바꿔 가면서 사용할 수 없다.
# 컨테이너 설정값 - 공개 포트
TODO_WEB_PORT=8877
TODO_DB_PORT=5432
# 도커 컴포즈 실행 옵션 - 컴포즈 파일 지정, 프로젝트 이름
COMPOSE_PATH_SEPARATOR=;
COMPOSE_FILE=docker-compose.yml;docker-compose-test.yml
COMPOSE_PROJECT_NAME=todo_ch10
정리
environment * 간단하고 컴포즈 파일의 가독성이 좋다. * 평문 텍스트로 작성되기 때문에 API 키나 데이터베이스 접속 정보 같은 민감한 정보에는 사용하지 않는 편이 좋다.
비밀값(secrets) * 모든 컨테이너 런타임에서 적용 가능하고 민감한 정보가 유출될 우려도 없기 때문에 유연성 면에서 가장 뛰어나다. * 비밀값의 실제 값은 로컬 파일 시스템에 저장할 수도 있고, 도커 스웜이나 쿠버네티스 클러스터에 저장할 수도 있다. * 실제값이 어디에 저장되든 애플리케이션이 실행될 때 컨테이너 속의 특정한 파일로 전달된다.
env_file * 서비스 간에 공유하는 설정이 많은 경우에 유용하다. * 설정값을 파일에 저장한 다음 이 파일의 경로로 읽어들여 사용 * 컴포즈가 로컬에 위치한 파일을 읽어 각 설정값을 지정해 주기 때문에 원격 컴퓨터에서 실행 중인 도커 엔진을 다룰 때도 로컬 컴퓨터의 설정값을 적용할 수 있다.
.env * 환경을 막론하고 기본 설정을 지정할 때 유용하다.