docker compose

說明Docker Compose
用法docker compose

說明

使用 Docker 定義和執行多容器應用程式

選項

選項預設值說明
--all-resources包含所有資源,即使是服務未使用到的資源
--ansi自動控制何時列印 ANSI 控制字元("never"|"always"|"auto")
--compatibility以回溯相容模式執行 Compose
--dry-run以乾燥執行模式執行指令
--env-file指定替代環境檔案
-f, --fileCompose 設定檔
--parallel-1控制最大平行處理數量,-1 表示無限制
--profile指定要啟用的設定檔
--progress自動設定進度輸出的類型(auto、tty、plain、json、quiet)
--project-directory指定替代工作目錄
(預設值:第一個指定的 Compose 檔案的路徑)
-p, --project-name專案名稱

範例

使用 -f 指定一個或多個 Compose 檔案的名稱和路徑

使用 -f 旗標指定 Compose 設定檔的位置。

指定多個 Compose 檔案

您可以提供多個 -f 設定檔。當您提供多個檔案時,Compose 會將它們組合成單一設定。Compose 會按照您提供檔案的順序建置設定。後續檔案會覆寫並新增到先前的檔案。

例如,考慮以下命令列

$ docker compose -f docker-compose.yml -f docker-compose.admin.yml run backup_db

docker-compose.yml 檔案可能會指定 webapp 服務。

services:
  webapp:
    image: examples/web
    ports:
      - "8000:8000"
    volumes:
      - "/data"

如果 docker-compose.admin.yml 也指定了相同的服務,則任何相符的欄位都會覆蓋先前的檔案。新的值會新增到 webapp 服務設定中。

services:
  webapp:
    build: .
    environment:
      - DEBUG=1

當您使用多個 Compose 檔案時,檔案中的所有路徑都是相對於第一個使用 -f 指定的設定檔。您可以使用 --project-directory 選項來覆蓋此基底路徑。

使用 -f 並以 -(破折號)作為檔案名稱來從 stdin 讀取設定。當使用 stdin 時,設定中的所有路徑都相對於目前的工作目錄。

-f 旗標是選用的。如果您未在命令列中提供此旗標,Compose 會遍歷工作目錄及其父目錄,尋找 compose.yamldocker-compose.yaml 檔案。

指定單個 Compose 檔案的路徑

您可以使用 -f 旗標來指定 Compose 檔案的路徑,該檔案不在目前的目錄中,可以從命令列指定,也可以在您的 shell 或環境檔案中設定 COMPOSE_FILE 環境變數。

以下列出在命令列中使用 -f 選項的範例,假設您正在執行 Compose Rails 範例,並且在名為 sandbox/rails 的目錄中有一個 compose.yaml 檔案。您可以使用 docker compose pull 之類的指令,透過使用 -f 旗標,從任何地方取得 db 服務的 postgres 影像,如下所示

$ docker compose -f ~/sandbox/rails/compose.yaml pull db

使用 -p 指定專案名稱

每個設定都有一個專案名稱。Compose 會使用以下機制設定專案名稱,依優先順序排列

  • -p 命令列旗標
  • COMPOSE_PROJECT_NAME 環境變數
  • 設定檔中的頂層 name: 變數(或使用 -f 指定的一系列設定檔中的最後一個 name:
  • 包含設定檔(或使用 -f 指定的第一個設定檔)的專案目錄的 basename(基本名稱)。
  • 如果未指定設定檔,則為目前目錄的 basename。專案名稱只能包含小寫字母、十進位數字、短橫線和底線,並且必須以小寫字母或十進位數字開頭。如果專案目錄或目前目錄的 basename 違反此限制,則必須使用其他機制之一。
$ docker compose -p my_project ps -a
NAME                 SERVICE    STATUS     PORTS
my_project_demo_1    demo       running

$ docker compose -p my_project logs
demo_1  | PING localhost (127.0.0.1): 56 data bytes
demo_1  | 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.095 ms

使用設定檔來啟用選用服務

使用 --profile 指定一個或多個啟用的設定檔。呼叫 docker compose --profile frontend up 會啟動具有 frontend 設定檔的服務以及沒有指定任何設定檔的服務。您也可以啟用多個設定檔,例如使用 docker compose --profile frontend --profile debug up,將啟用 frontenddebug 設定檔。

設定檔也可以透過 COMPOSE_PROFILES 環境變數設定。

設定平行處理

使用 --parallel 指定並行引擎呼叫的最大平行處理級別。呼叫 docker compose --parallel 1 pull 會一次拉取 Compose 檔案中定義的可拉取映像檔。這也可以用於控制建置的並行性。

平行處理也可以透過 COMPOSE_PARALLEL_LIMIT 環境變數設定。

設定環境變數

您可以為各種 docker compose 選項設定環境變數,包括 -f-p--profiles 旗標。

設定 COMPOSE_FILE 環境變數等同於傳遞 -f 旗標,COMPOSE_PROJECT_NAME 環境變數與 -p 旗標作用相同,COMPOSE_PROFILES 環境變數等同於 --profiles 旗標,COMPOSE_PARALLEL_LIMIT--parallel 旗標作用相同。

如果在命令列中明確設定了旗標,則會忽略相關聯的環境變數。

COMPOSE_IGNORE_ORPHANS 環境變數設定為 true 會阻止 docker compose 偵測專案的孤立容器。

COMPOSE_MENU 環境變數設定為 false 會在以附加模式執行 docker compose up 時停用輔助選單。或者,您也可以執行 docker compose up --menu=false 來停用輔助選單。

使用「預先執行模式」來測試您的命令

使用 --dry-run 旗標可以在不更改應用程式堆疊狀態的情況下測試命令。「預先執行模式」會顯示 Compose 在執行命令時套用的所有步驟,例如:

$ docker compose --dry-run up --build -d
[+] Pulling 1/1
 ✔ DRY-RUN MODE -  db Pulled                                                                                                                                                                                                               0.9s
[+] Running 10/8
 ✔ DRY-RUN MODE -    build service backend                                                                                                                                                                                                 0.0s
 ✔ DRY-RUN MODE -  ==> ==> writing image dryRun-754a08ddf8bcb1cf22f310f09206dd783d42f7dd                                                                                                                                                   0.0s
 ✔ DRY-RUN MODE -  ==> ==> naming to nginx-golang-mysql-backend                                                                                                                                                                            0.0s
 ✔ DRY-RUN MODE -  Network nginx-golang-mysql_default                                    Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Healthy                                                                                                                                           0.5s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Started                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Started                                     Started

從上面的範例中,您可以看到第一步是拉取 db 服務定義的映像檔,然後建置 backend 服務。接下來,建立容器。db 服務會啟動,而 backendproxy 會等到 db 服務正常運作後才啟動。

「預先執行模式」適用於幾乎所有命令。您無法將「預先執行模式」與不會更改 Compose 堆疊狀態的命令一起使用,例如 pslslogs

子命令

命令說明
docker compose alpha實驗性命令
docker compose build建置或重建服務
docker compose config以標準格式解析、解析和轉譯 compose 檔案
docker compose cp在服務容器和本機檔案系統之間複製檔案/資料夾
docker compose create為服務建立容器
docker compose down停止並移除容器、網路
docker compose events從容器接收即時事件
docker compose exec在正在執行的容器中執行命令
docker compose images列出已建立容器所使用的映像檔
docker compose kill強制停止服務容器
docker compose logs檢視容器的輸出
docker compose ls列出正在執行的 compose 專案
docker compose pause暫停服務
docker compose port印出連接埠繫結的公開連接埠
docker compose ps列出容器
docker compose pull拉取服務映像檔
docker compose push推送服務映像檔
docker compose restart重新啟動服務容器
docker compose rm移除已停止的服務容器
docker compose run在服務上執行一次性命令
docker compose start啟動服務
docker compose stop停止服務
docker compose top顯示正在執行的處理程序
docker compose unpause取消暫停服務
docker compose up建立並啟動容器
docker compose version顯示 Docker Compose 版本資訊
docker compose wait封鎖直到所有(或指定的)服務的容器停止。
docker compose watch監控服務的建置上下文,並在檔案更新時重建/重新整理容器