磁碟區頂層元素
磁碟區是由容器引擎實作的永久性資料儲存區。Compose 提供了一種中立的方式讓服務掛載磁碟區,以及配置參數來將它們分配給基礎架構。頂層 `volumes` 宣告允許您設定可在多個服務之間重複使用的具名磁碟區。
要在多個服務之間使用磁碟區,您必須使用 `services` 頂層元素中的 volumes 屬性明確地授予每個服務的存取權限。`volumes` 屬性具有提供更精細控制的其他語法。
提示
正在使用大型儲存庫或 monorepo,或者使用不再與您的程式碼庫一起調整的虛擬檔案系統?Compose 現在利用同步檔案共用並自動為繫結掛載建立檔案共用。請確保您已使用付費訂閱登入 Docker,並在 Docker Desktop 的設定中啟用了**存取實驗性功能**和**使用 Compose 管理同步檔案共用**。
範例
以下範例顯示了一個雙服務設定,其中資料庫的資料目錄與另一個服務共用為一個名為 `db-data` 的磁碟區,以便定期備份。
services:
backend:
image: example/database
volumes:
- db-data:/etc/data
backup:
image: backup-service
volumes:
- db-data:/var/lib/backup/data
volumes:
db-data:
`db-data` 磁碟區分別掛載在備份和後端的 `/var/lib/backup/data` 和 `/etc/data` 容器路徑上。
執行 `docker compose up` 會在磁碟區不存在時建立它。否則,將使用現有的磁碟區,如果在 Compose 之外手動刪除它,則會重新建立它。
屬性
頂層 `volumes` 區段下的項目可以是空的,在這種情況下,它會使用容器引擎的預設配置來建立磁碟區。或者,您可以使用以下鍵進行設定
driver
指定應使用的磁碟區驅動程式。如果驅動程式無法使用,Compose 將會傳回錯誤,並且不會部署應用程式。
volumes:
db-data:
driver: foobar
driver_opts
driver_opts
指定要傳遞給此磁碟區驅動程式的選項清單,以鍵值對的形式呈現。選項會因驅動程式而異。
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
external
如果設定為 true
external
指定此磁碟區已存在於平台上,且其生命週期是由應用程式外部管理。Compose 接著不會建立磁碟區,如果磁碟區不存在,則會傳回錯誤。- 除了
name
之外的所有其他屬性皆不相關。如果 Compose 偵測到任何其他屬性,它會拒絕 Compose 檔案,視為無效。
在以下範例中,Compose 不會嘗試建立名為 {project_name}_db-data
的磁碟區,而是尋找一個名為 db-data
的現有磁碟區,並將其掛載到 backend
服務的容器中。
services:
backend:
image: example/database
volumes:
- db-data:/etc/data
volumes:
db-data:
external: true
labels
labels
用於將中資料新增至磁碟區。您可以使用陣列或字典。
建議您使用反向 DNS 標記法,以避免您的標籤與其他軟體使用的標籤衝突。
volumes:
db-data:
labels:
com.example.description: "Database volume"
com.example.department: "IT/Ops"
com.example.label-with-empty-value: ""
volumes:
db-data:
labels:
- "com.example.description=Database volume"
- "com.example.department=IT/Ops"
- "com.example.label-with-empty-value"
Compose 會設定 com.docker.compose.project
和 com.docker.compose.volume
標籤。
name
name
為磁碟區設定自訂名稱。名稱欄位可用於參照包含特殊字元的磁碟區。名稱會按原樣使用,且不會以堆疊名稱作為範圍。
volumes:
db-data:
name: "my-app-data"
這使得可以將此查詢名稱設為 Compose 檔案的參數,以便磁碟區的模型 ID 是硬編碼的,但在平台上的實際磁碟區 ID 則是在部署期間於執行階段設定。
例如,如果您的 .env
檔案中有 DATABASE_VOLUME=my_volume_001
volumes:
db-data:
name: ${DATABASE_VOLUME}
執行 docker compose up
會使用名為 my_volume_001
的磁碟區。
它也可以與 external
屬性搭配使用。這表示用於在平台上查詢實際磁碟區的名稱,與用於在 Compose 檔案中參照磁碟區的名稱是分開設定的。
volumes:
db-data:
external: true
name: actual-name-of-volume