使用Docker Compose卷管理永續性資料

使用Docker Compose卷管理永續性資料

Docker Compose 是一款功能強大的協調工具,旨在使用 Docker 簡化多容器應用程式的管理和部署。docker-compose.yml 檔案通過在一個檔案中定義具有多個服務、網路和卷的複雜應用程式來簡化部署。使用 Docker Compose 的一個重要方面是使用卷管理持久化資料。

本文探討了在 Docker Compose 中使用卷處理永續性資料的重要性,並提供了有效使用卷的實踐指南。

什麼是 Docker 卷?

Docker 卷是一個重要的生態系統元件,用於儲存和管理由短暫容器生成的持久資料。即使在移除或更新容器後,資料也能持久存在,這樣就不會在日常操作中丟失重要的應用程式資料。

卷與容器的檔案系統是分離的,因此你可以輕鬆地對它們進行備份,在多個容器之間共享它們,並在主機之間遷移它們。

與繫結掛載(即從主機系統到容器的目錄掛載)相比,使用卷的一個關鍵優勢是可移植性。你可以在不同主機或容器之間快速移動卷,但必須將繫結掛載繫結到主機系統上的特定目錄。

這種可移植性使基於容器的應用中的資料管理更靈活、更高效。卷還相容各種儲存驅動程式,讓您可以根據具體的使用情況選擇最佳的儲存解決方案。

Docker 卷的型別

Docker 卷對於管理基於容器的應用程式中的資料至關重要。它們有兩種不同的型別:命名卷和匿名卷。本節將深入探討這兩種型別的主要區別,並演示如何實施它們來管理應用程式中的資料。

命名卷和匿名卷的用途不同,提供的控制和管理功能也各不相同。由於命名卷具有人類可讀的識別符號,且易於管理,因此在大多數使用案例中,命名卷通常是首選,但要最大限度地發揮這兩種型別的優勢,必須瞭解它們的功能。

已命名卷

命名卷有一個使用者定義的名稱,便於識別、管理和在多個容器之間共享。Docker 建立並管理命名卷,並將其資料儲存在主機系統的特定位置。該位置通常位於 Docker 安裝目錄下,有一個與卷名相對應的唯一 ID。

命名卷提供了更大的控制性和靈活性,因為你可以使用它們的人可讀識別符號輕鬆地引用和操作它們。

要在 Docker 中建立命名卷,請執行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker volume create my_named_volume
docker volume create my_named_volume
docker volume create my_named_volume

匿名卷

與命名卷不同,匿名卷沒有使用者定義的名稱。相反,Docker 會在你建立容器時自動建立它們,併為卷分配一個唯一的 ID。

由於缺乏人類可讀的識別符號,管理和儲存卷通常比較困難。由於 Docker 會自動建立卷,因此通常使用匿名捲進行臨時儲存。如果在建立容器時沒有指定命名卷,也會出現匿名卷。

要使用匿名卷建立容器,請執行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker run -v /data nginx
docker run -v /data nginx
docker run -v /data nginx

此命令將匿名卷掛載到容器 nginx 內的 /data 目錄。可以用掛載卷的容器名稱替換 nginx

如何使用 Docker Compose 建立和管理卷

Docker Compose 可以在 docker-compose.yml 檔案中定義卷,從而簡化了卷的建立和管理。該檔案包含應用程式的服務、網路和卷的配置,可在一個地方輕鬆管理應用程式的資源。

1. 在 Docker Compose 中定義卷

要在 docker-compose.yml 檔案中建立一個已命名的卷,請在 volumes 關鍵字下定義它。如有必要,還可以指定卷驅動程式和選項。

2. 將卷掛載到容器

要把卷附加到容器上,請在 docker-compose.yml 檔案的 service 定義中使用 volumes 關鍵字。指定卷名稱後的冒號和要掛載卷的容器路徑。

你還可以使用相同的卷名,在多個容器之間共享卷。

下面是在 docker-compose.yml 檔案中建立名為 web_datadb_data 的卷的例子:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
version: '3.8'
services:
web:
image: nginx
volumes:
- web_data:/var/www/html
web-test:
image: nginx
volumes:
- web_data:/var/www/html # Web and web test share the web_data volume
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
volumes:
web_data:
db_data:
driver: local # Define the driver and options under the volume name
driver_opts:
type: none
device: /data/db_data
o: bind
version: '3.8' services: web: image: nginx volumes: - web_data:/var/www/html web-test: image: nginx volumes: - web_data:/var/www/html # Web and web test share the web_data volume db: image: mysql volumes: - db_data:/var/lib/mysql volumes: web_data: db_data: driver: local # Define the driver and options under the volume name driver_opts: type: none device: /data/db_data o: bind
version: '3.8'
services:
web:
image: nginx
volumes:
- web_data:/var/www/html
web-test:
image: nginx
volumes:
- web_data:/var/www/html # Web and web test share the web_data volume
db:
image: mysql
volumes:
- db_data:/var/lib/mysql
volumes:
web_data:
db_data:
driver: local # Define the driver and options under the volume name
driver_opts:
type: none
device: /data/db_data
o: bind

此示例定義了兩個命名卷。然後,它將卷掛載到各自容器的特定路徑下。接下來,它將 web_data 卷掛載到 web 容器中的 /var/www/html 目錄,將 db_data 卷掛載到 db 容器中的 /var/lib/mysql 目錄。

webweb-test 容器共享 web_data 卷,允許它們訪問和修改相同的資料卷。

通過在 docker-compose.yml 檔案中定義和管理卷,你可以根據需要輕鬆建立、更新和刪除卷,而無需使用 Docker 命令手動管理它們。這種簡化的流程讓您可以專注於開發和部署應用程式,而 Docker Compose 則負責處理底層資源管理。

如何使用 Docker Compose 和 Volume 命令

Docker Compose 提供了多種命令,可幫助您有效管理應用程式及其資源。讓我們詳細回顧一下這些命令及其與卷的關係:

  •  docker compose up 會建立並啟動你的應用程式,包括它的服務、網路和卷。如果你在 docker-compose.yml 檔案中定義了已命名的卷,這條命令會自動建立它。
  •  docker compose down 停止並刪除應用程式的服務和網路。預設情況下,它不會刪除已命名的卷。要刪除已命名的卷,請使用 --volumes-v 標誌。
  •  docker compose ps 會列出容器及其當前狀態,包括與卷相關的資訊。
  •  docker compose config 驗證並顯示從 docker-compose.yml 檔案生成的有效配置,包括卷定義。

列表卷

要列出所有卷,請使用 ls

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker volume ls
docker volume ls
docker volume ls

輸出會顯示所有已命名的卷,包括由 Docker Compose 建立的卷。

檢查卷

要檢視特定卷的詳細資訊,請使用 inspect 。它會輸出卷的相關資訊,如名稱、驅動程式、掛載點和選項:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker volume inspect db_data
docker volume inspect db_data
docker volume inspect db_data

卷的詳細資訊以 JSON 格式給出。例如,考慮到上面提供的 docker-compose.yml 檔案,這就是返回的輸出結果:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[
{
"CreatedAt": "some-date-here",
"Driver": "local",
"Labels": null,
"Mountpoint": "/path/on/host/where/volume/is/mounted",
"Name": "db_data",
"Options": {
"device": "/data/db_data",
"o": "bind",
"type": "none"
},
"Scope": "local",
"Status": {
"Mounts": [
...
]
}
}
]
[ { "CreatedAt": "some-date-here", "Driver": "local", "Labels": null, "Mountpoint": "/path/on/host/where/volume/is/mounted", "Name": "db_data", "Options": { "device": "/data/db_data", "o": "bind", "type": "none" }, "Scope": "local", "Status": { "Mounts": [ ... ] } } ]
[
{
"CreatedAt": "some-date-here",
"Driver": "local",
"Labels": null,
"Mountpoint": "/path/on/host/where/volume/is/mounted",
"Name": "db_data",
"Options": {
"device": "/data/db_data",
"o": "bind",
"type": "none"
},
"Scope": "local",
"Status": {
"Mounts": [
...
]
}
}
]

按名稱刪除 Docker 卷

要刪除 Docker 卷,可以使用 docker volume rm ,後面跟卷名:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker volume rm volume-name
docker volume rm volume-name
docker volume rm volume-name

清理未使用的卷

刪除未使用的卷,請使用 prune

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker volume prune
docker volume prune
docker volume prune

該命令有助於清理開發環境並回收儲存空間。它會刪除所有與容器無關的未使用卷,包括 Docker Compose 建立的卷。

利用這些命令及其與卷相關的功能,你可以有效地管理應用程式的資源,確保最佳效能和儲存空間的高效利用。

Docker Compose 版本

自 2023 年 7 月起,Docker Compose V1 停止接收更新。在新發布的 Docker Desktop 中,它也不再可用。不過,Docker Desktop 仍然支援 docker-compose 別名,以便將命令重定向到 docker compose ,從而提高與第三方工具和指令碼的相容性。

要將現有程式碼從 Docker Compose 版本 1 切換到版本 2,只需將破折號換成空格即可。例如, docker-compose up 變成 docker compose up

有了版本 2,你就可以直接在 Docker 命令列介面(CLI)中使用 & compose 命令,切換 Docker 上下文以在雲服務上構建容器,並使用亞馬遜 ECS 和微軟 ACI。

小結

這篇文章強調了在 Docker Compose 中使用卷管理永續性資料的重要性。卷是 Docker 生態系統中的一個重要元件,它使您能夠儲存和管理 Docker 容器生成的資料。有了 Docker 卷,即使在您刪除或更新容器後,重要的應用程式資料也會持續存在,有助於保持應用程式的完整性和一致性。

Docker Compose 提供了一種在 docker-compose.yml 檔案中建立和管理卷的簡化方法。這種方法簡化了開發過程,確保了資源的高效利用。

使用卷還能使開發變得靈活高效,Docker Compose 提供了各種與卷相關的命令,幫助你有效監督應用程式資源。利用這些命令,您可以輕鬆建立、檢查和清理卷。

評論留言