Compose是用於定義和運行多容器Docker應用程序的工具。通過Compose,您可以使用YAML文件來配置應用程序的服務。然後,使用一個命令,就可以從配置中創建並啓動所有服務。要了解有關Compose的所有功能的更多信息,請參閱功能列表。
Compose可在所有環境中工作:生產,分期,開發,測試以及CI工作流。您可以在“ 常見用例”中瞭解有關每種情況的更多信息。
使用Compose基本上是一個三步過程:
-
使用
Dockerfile
定義您的應用環境,以便可以在任何地方重建。 -
使用docker-compose.yml
定義組成應用程序的服務, 以便它們可以在隔離的環境中一起運行。 -
運行
docker-compose up,以
啓動並運行您的整個應用程序。
一個docker-compose.yml
看起來像這樣:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
有關Compose文件的更多信息,請參見 Compose文件參考。
Compose具有用於管理應用程序整個生命週期的命令:
- 啓動,停止和重建服務
- 查看正在運行的服務的狀態
- 以流的形式輸出正在運行的服務的日誌
- 在服務上運行一次性命令
Compose文檔
特徵
使Compose有效的功能包括:
單個主機上的多個隔離環境
Compose使用項目名稱將環境彼此隔離。您可以在幾個不同的上下文中使用此項目名稱:
- 在開發主機上,以創建單個環境的多個副本,例如當您要爲項目的每個功能分支運行穩定副本時
- 在CI服務器上,爲防止內部版本相互干擾,可以將項目名稱設置爲唯一的內部版本號
- 在共享主機或開發主機上,以防止可能使用相同服務名稱的不同項目相互干擾
默認項目名稱是項目目錄的基本名稱。您可以使用-p
命令行選項或 COMPOSE_PROJECT_NAME
環境變量來設置自定義項目名稱 。
創建容器時保留卷數據
Compose保留您的服務使用的所有卷。當docker-compose up
運行時,如果它從以前的運行中找到任何容器,則將卷從舊容器複製到新容器。此過程可確保您在卷中創建的所有數據均不會丟失。
如果docker-compose
在Windows計算機上使用,請參閱 環境變量並根據您的特定需求調整必要的環境變量。
僅重新創建已更改的容器
Compose緩存用於創建容器的配置。重新啓動未更改的服務時,Compose會重新使用現有容器。重複使用容器意味着您可以快速更改環境。
變量和環境之間的合成移動
Compose支持Compose文件中的變量。您可以使用這些變量針對不同的環境或不同的用戶自定義合成。有關更多詳細信息,請參見變量替換。
您可以使用該extends
字段或通過創建多個Compose文件來擴展Compose文件。有關更多詳細信息,請參見擴展。
常見用例
Compose可以以多種不同方式使用。下面概述了一些常見的用例。
開發環境
在開發軟件時,在孤立的環境中運行應用程序並與之交互的能力至關重要。撰寫命令行工具可用於創建環境並與之交互。
在Compose文件提供了一種方法來記錄和配置所有應用程序的服務依賴(數據庫,隊列,高速緩存,Web服務的API,等等)。使用Compose命令行工具,您可以使用單個命令(docker-compose up
)爲每個依賴項創建並啓動一個或多個容器。
這些功能一起爲開發人員提供了一種方便的方式來開始項目。Compose可以將多頁的“開發人員入門指南”簡化爲單個機器可讀的Compose文件和一些命令。
自動化測試環境
自動測試套件是任何持續部署或持續集成過程的重要組成部分。自動化的端到端測試需要在其中運行測試的環境。Compose提供了一種方便的方法來爲您的測試套件創建和銷燬隔離的測試環境。通過在Compose文件中定義完整的環境,您只需幾個命令即可創建和銷燬這些環境:
$ docker-compose up -d
$ ./run_tests
$ docker-compose down
單主機部署
傳統上,Compose一直專注於開發和測試工作流,但是在每個版本中,我們都在面向生產的更多功能方面取得了進展。您可以使用Compose部署到遠程Docker Engine。Docker Engine可以是配備有Docker Machine的單個實例,也可以是 整個 Docker Swarm集羣。
有關使用面向生產的功能的詳細信息,請參閱 本文檔中的“ 在生產中使用Compose”。
發行說明
要查看Docker Compose的過去和當前版本的更改的詳細列表,請參閱 CHANGELOG。
獲得幫助
Docker Compose正在積極開發中。如果您需要幫助,希望做出貢獻或只是想與志趣相投的人談論該項目,我們有許多開放的溝通渠道。
-
要與人們實時討論該項目:
#docker-compose
在freenode IRC上加入 頻道。
有關更多信息和資源,請訪問“ 獲得幫助”項目頁面。