Compose 開發規範

注意

Develop 是 Compose 規範的可選部分。它在 Docker Compose 2.22.0 及更高版本中可用。

本頁面定義了 Compose 如何高效地輔助您,並定義了 Compose 設定的開發約束和工作流。只有 Compose 檔案服務的子集可能需要 `develop` 子部分。

示例說明

services:
  frontend:
    image: example/webapp
    build: ./webapp
    develop:
      watch: 
        # sync static content
        - path: ./webapp/html
          action: sync
          target: /var/www
          ignore:
            - node_modules/

  backend:
    image: example/backend
    build: ./backend
    develop:
      watch: 
        # rebuild image and recreate service
        - path: ./backend/src
          action: rebuild

屬性

`develop` 子部分定義了 Compose 應用的配置選項,以最佳化工作流,協助您進行服務開發。

watch

`watch` 屬性定義了一系列規則,這些規則控制根據本地檔案更改自動更新服務。`watch` 是一個序列,序列中的每個單獨項都定義了一個 Compose 應用的規則,用於監視原始碼更改。有關更多資訊,請參閱使用 Compose Watch

action

`action` 定義了檢測到更改時要執行的操作。如果 `action` 設定為:

  • `rebuild`:Compose 根據 `build` 部分重建服務映象,並使用更新後的映象重新建立服務。
  • `restart`:Compose 重啟服務容器。適用於 Docker Compose 2.32.0 及更高版本。
  • `sync`:Compose 保持現有服務容器執行,但根據 `target` 屬性將原始檔與容器內容同步。
  • `sync+restart`:Compose 根據 `target` 屬性將原始檔與容器內容同步,然後重啟容器。適用於 Docker Compose 2.23.0 及更高版本。
  • `sync+exec`:Compose 根據 `target` 屬性將原始檔與容器內容同步,然後在容器內部執行命令。適用於 Docker Compose 2.32.0 及更高版本。

exec

要求: Docker Compose 2.32.2 及更高版本

`exec` 僅在 `action` 設定為 `sync+exec` 時相關。與服務鉤子一樣,`exec` 用於定義容器啟動後在容器內部執行的命令。

  • `command`:指定容器啟動後要執行的命令。此屬性是必需的,您可以選擇使用 shell 形式或 exec 形式。
  • `user`:執行命令的使用者。如果未設定,則命令以與主服務命令相同的使用者身份執行。
  • `privileged`:允許命令以特權訪問執行。
  • `working_dir`:執行命令的工作目錄。如果未設定,則在與主服務命令相同的工作目錄中執行。
  • `environment`:設定執行命令的環境變數。雖然命令繼承了為服務主命令定義的環境變數,但此部分允許您新增新變數或覆蓋現有變數。
services:
  frontend:
    image: ...
    develop:
      watch: 
        # sync content then run command to reload service without interruption
        - path: ./etc/config
          action: sync+exec
          target: /etc/config/
          exec:
            command: app reload

ignore

`ignore` 屬性用於定義要忽略的路徑模式列表。任何與模式匹配或屬於與模式匹配的資料夾的更新檔案都不會觸發服務重新建立。語法與 `.dockerignore` 檔案相同。

  • `*` 匹配檔名中 0 個或多個字元。
  • `?` 匹配檔名中的單個字元。
  • `*/*` 匹配兩個任意名稱的巢狀資料夾。
  • `**` 匹配任意數量的巢狀資料夾。

如果構建上下文包含 `.dockerignore` 檔案,則此檔案中的模式將作為 `ignores` 檔案的隱式內容載入,並且 Compose 模型中設定的值將附加。

include

有時,選擇要監視的檔案比使用 `ignore` 宣告不監視的檔案更容易。

`include` 屬性用於定義一個或多個模式,以指定要考慮監視的路徑。只有與這些模式匹配的檔案才會在應用監視規則時被考慮。語法與 `ignore` 相同。

services:
  backend:
    image: example/backend
    develop:
      watch: 
        # rebuild image and recreate service
        - path: ./src
          include: "*.go"  
          action: rebuild
注意

在許多情況下,`include` 模式以萬用字元(`*`)字元開頭。這在 YAML 語法中具有特殊含義,用於定義別名節點,因此您必須用引號將模式表示式括起來。

path

`path` 屬性定義要監視更改的原始碼路徑(相對於專案目錄)。路徑內任何未匹配任何 `ignore` 規則的檔案更新都會觸發配置的操作。

target

`target` 屬性僅在 `action` 配置為 `sync` 時適用。`path` 中有更改的檔案將與容器的檔案系統同步,以便容器始終執行最新內容。