使用多個Compose文件使您可以針對不同的環境或不同的工作流程自定義Compose應用程序。
默認情況下,Compose讀取兩個文件,一個Docker-compose.yml和一個可選 docker-compose.override.yml文件。按照約定,docker-compose.yml 包含您的基本配置。顧名思義,替代文件可以包含現有服務或全新服務的配置替代。
如果在兩個文件中都定義了服務,則Compose使用添加和覆蓋配置中描述的規則合并 配置。
要使用多個替代文件或具有不同名稱的替代文件,可以使用該-f選項指定文件列表。Compose按照在命令行上指定的順序合并文件。有關使用的更多信息,請參見 docker-compose命令參考-f。
使用多個配置文件時,必須確保文件中的所有路徑都相對于基本的Compose文件(用指定的第一個Compose文件-f)。這是必需的,因為替代文件不一定是有效的撰寫文件。替代文件可以包含一些小的配置片段。跟蹤服務的哪個片段相對于哪個路徑是困難且令人困惑的,因此為了使路徑更易于理解,必須相對于基本文件定義所有路徑。
用例示例
在本節中,有兩個常見的用例,用于多個Compose文件:針對不同的環境更改Compose應用程序,以及針對Compose應用程序運行管理任務。
不同的環境
多個文件的常見用例是將開發Compose應用程序更改為生產環境(可能是生產,演示或CI)。為了支持這些差異,您可以將Compose配置拆分為幾個不同的文件:
從定義服務規范配置的基本文件開始。
docker-compose.yml
web:
image: example/my_web_App:latest
depends_on:
- db
- cache
db:
image: postgres:latest
cache:
image: redis:latest
在此示例中,開發配置將一些端口暴露給主機,將我們的代碼作為卷安裝,并構建Web映像。
docker-compose.override.yml
web:
build: .
volumes:
- '.:/code'
ports:
- 8883:80
environment:
DEBUG: 'true'
db:
command: '-d'
ports:
- 5432:5432
cache:
ports:
- 6379:6379
運行時,docker-compose up它會自動讀取覆蓋。
現在,很高興在生產環境中使用此Compose應用程序。因此,請創建另一個替代文件(該文件可以存儲在其他git repo中,也可以由其他團隊進行管理)。
docker-compose.prod.yml
web:
ports:
- 80:80
environment:
PRODUCTION: 'true'
cache:
environment:
TTL: '500'
要使用此生產Compose文件進行部署,您可以運行
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
該部署使用配置中的所有三個服務 docker-compose.yml和docker-compose.prod.yml(但不是在開發配置docker-compose.override.yml)。
有關生產中撰寫的更多信息,請參見生產。
行政任務
另一個常見用例是針對Compose應用程序中的一個或多個服務運行臨時任務或管理任務。本示例演示了如何運行數據庫備份。
從docker-compose.yml開始。
web:
image: example/my_web_app:latest
depends_on:
- db
db:
image: postgres:latest
在docker-compose.admin.yml中添加新服務以運行數據庫導出或備份。
dbadmin:
build: database_admin/
depends_on:
- db
要開始正常的環境運行docker-compose up -d。要運行數據庫備份,請同時包含docker-compose.admin.yml。
docker-compose -f docker-compose.yml -f docker-compose.admin.yml
run dbadmin db-backup
免責聲明:以上內容轉載自TMT觀察網,所發內容不代表本平臺立場。