여러 Compose 파일에서 구성 병합 및 출력
이 단계에서는 여러 Docker Compose 파일에서 구성을 병합하고 최종 결합된 구성을 출력하는 방법을 배우게 됩니다. 이는 기본 구성을 정의한 다음 추가 파일로 재정의하거나 확장할 수 있는 강력한 기능으로, 서로 다른 환경 (예: 개발, 스테이징, 프로덕션) 을 관리하는 데 유용합니다.
~/project 디렉토리에서 계속 작업합니다. 이전 단계에서 docker-compose.yaml 파일을 만들었습니다. 이제 기본 구성을 확장하기 위해 다른 Compose 파일을 만들어 보겠습니다. 이름을 docker-compose.override.yaml로 지정합니다.
nano ~/project/docker-compose.override.yaml
다음 내용을 docker-compose.override.yaml 파일에 붙여넣습니다.
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
이 재정의 파일은 docker-compose.yaml에 정의된 web 서비스를 수정합니다. 호스트 포트 매핑을 80 에서 8080 으로 변경하고 html이라는 로컬 디렉토리에서 정적 HTML 콘텐츠를 제공하기 위해 볼륨 마운트를 추가합니다.
Ctrl + X, Y, Enter를 눌러 파일을 저장합니다.
이제 html 디렉토리와 그 안에 간단한 index.html 파일을 만들어 보겠습니다.
mkdir ~/project/html
nano ~/project/html/index.html
다음 내용을 ~/project/html/index.html에 붙여넣습니다.
<h1>Hello from Nginx!</h1>
Ctrl + X, Y, Enter를 눌러 파일을 저장합니다.
기본적으로 Docker Compose 는 현재 디렉토리에서 docker-compose.yaml 및 docker-compose.override.yaml을 자동으로 찾아 병합합니다. 재정의 파일의 구성이 우선합니다.
병합된 구성을 보려면 ~/project 디렉토리에 있는지 확인하고 docker-compose config 명령을 다시 실행합니다.
cd ~/project
docker-compose config
이제 web 서비스에 포트 매핑 8080:80과 볼륨 마운트 ./html:/usr/share/nginx/html이 있는 결합된 구성을 볼 수 있습니다.
-f 플래그를 사용하여 사용할 Compose 파일을 명시적으로 지정할 수도 있습니다. 파일을 지정하는 순서가 중요하며, 이후 파일이 이전 파일을 재정의합니다.
예를 들어, docker-compose.yaml 및 docker-compose.override.yaml을 명시적으로 병합하려면 다음을 실행할 수 있습니다.
docker-compose -f docker-compose.yaml -f docker-compose.override.yaml config
이 경우 docker-compose.override.yaml이 docker-compose.yaml 다음에 자동으로 감지되고 병합되므로, 이는 -f 플래그 없이 docker-compose config를 실행하는 것과 동일한 병합된 출력을 생성합니다.