Docker Compose를 사용하다 보면 docker-compose.yml 파일 하나만 쓰는 것이 아니라, 여러 개의 설정 파일을 합쳐서 실행해야 할 때가 있습니다. 이때 사용하는 것이 바로 -f (File) 옵션입니다.
1. -f 옵션이란?
- 의미: "이 설정 파일을 사용하겠다"라고 Docker에게 명시적으로 알려주는 옵션입니다.
- 기본 동작: 옵션 없이 docker compose up을 치면, Docker는 자동으로 현재 폴더의 docker-compose.yml 파일
딱 하나만 찾아서 실행합니다.
2. 왜 사용하는가? (Mattermost 예시)
Mattermost와 같은 오픈소스 프로젝트는 설정 관리를 편하게 하기 위해 기능을 여러 파일로 쪼개놓는 경우가 많습니다.
- docker-compose.yml: 핵심 기능 (Mattermost 앱, DB)
- docker-compose.nginx.yml: 웹 서버 기능 (Nginx, SSL 설정)
이때 기본 명령어(docker compose up)만 치면 핵심 기능만 실행되고 웹 서버는 실행되지 않는 문제가 발생합니다.
따라서 "이 두 파일을 합쳐서 실행해라!" 라고 명령하기 위해 -f 옵션을 씁니다.
3. 동작 원리 (Override & Merge)
여러 개의 -f 옵션을 나열하면, Docker는 앞에서부터 순서대로 파일을 읽어서 합칩니다(Merge).
docker compose -f base.yml -f override.yml up
- base.yml을 먼저 읽습니다.
- override.yml의 내용을 읽어서, 겹치는 설정은 덮어씌우고(Override) 새로운 설정은 추가합니다.
- 완성된 하나의 설정으로 컨테이너를 실행합니다.
4. 명령어 비교 (한눈에 보기)
| 상황 | 명령어 | 결과 |
| 기본 실행 | docker compose up | docker-compose.yml 파일 하나만 실행됨. (Nginx 누락됨) |
| 멀티 파일 실행 | docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d | 두 파일을 합쳐서 앱, DB, Nginx를 모두 실행함. |
💡 팁: 매번 치기 귀찮다면?
매번 긴 명령어를 치는 것이 번거롭다면, 리눅스의 alias(별칭) 기능을 사용하거나 환경 변수 COMPOSE_FILE을 설정하여
해결할 수 있습니다.
# .env 파일에 아래 내용을 추가하면 -f 옵션 없이도 자동으로 두 파일을 읽습니다.
COMPOSE_FILE=docker-compose.yml:docker-compose.nginx.yml