如何在 Docker Swarm 中使用卷共享?
介紹
Docker Swarm 是一個流行的容器編排平臺,允許使用者大規模部署和管理容器。Docker Swarm 的關鍵特性之一是它支援卷共享,這允許容器訪問和共享儲存在持久卷中的資料。在本文中,我們將解釋什麼是卷,它們如何在 Docker Swarm 中使用,並展示如何在不同場景中實現卷共享的示例。
先決條件
Docker 和容器化的基本知識
熟悉 Docker Swarm
瞭解 Docker 中的卷
命令列操作經驗
什麼是 Docker Swarm?
Docker Swarm 是一個用於大規模部署和管理容器化應用程式的工具。它提供了一種簡單有效的方法來擴充套件跨節點叢集的應用程式。它提供了一系列用於構建和維護高可用性系統的功能。
要使用 Docker Swarm,您需要在系統上安裝 Docker 並建立 Swarm 叢集。您可以透過執行以下命令建立 Swarm 叢集:
$ docker swarm init --advertise-addr 192.145.43.78 --listen-addr 0.0.0.0
輸出
Swarm initialized: current node (xi0zolslqrszt94yed0wglxxo) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-4phd8znfpiprjuijltfdlz62bq5yghdmwhnpj0rf8f7kyv-bgpelv8wu5n2rzdmexhsc8wvq 192.168.43.97:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
這將建立一個單節點 Swarm 叢集,當前節點充當管理器。然後,您可以透過在其他節點上執行 docker swarm join 命令並將管理器節點的 IP 地址和埠號指定給其他節點,將其他節點新增到 Swarm 中。
Docker 中的卷是什麼?
卷是 Docker 中儲存資料的一種方式,獨立於容器的映象或檔案系統。它們可以用於在容器重啟之間保留資料、在容器之間共享資料或在環境之間遷移資料。
Docker 中主要有兩種型別的卷:
繫結掛載
卷
繫結掛載允許您將主機系統上的檔案或目錄掛載到容器中,而卷由 Docker 管理並存儲在主機系統上的單獨位置。
要建立 Docker 中的卷,您可以使用 docker volume create 命令,如下所示:
$ docker volume create my-volume
輸出
my-volume
此命令將建立一個名為“my-volume”的新卷,任何容器都可以使用它。您還可以同時建立卷並將其掛載到容器,在執行容器時使用-v標誌:
$ docker run -d --name my-container -v my-volume:/container/data Ubuntu
輸出
4f463a1c36ce692b973d4590e0f3a2cc738aa8aeda76f619bc14eb07a2bf2231
此命令將基於 Ubuntu 映象建立一個名為“my-container”的新容器,並將“my-volume”卷掛載到容器內的 /container/data 目錄。
Docker Swarm 如何實現卷共享?
在 Docker Swarm 中,卷由卷驅動程式或外掛管理,這些驅動程式或外掛處理卷的建立、管理和刪除。Docker Swarm 帶有一個名為“local”的內建卷驅動程式,它將卷儲存在主機系統上,但您也可以使用其他卷驅動程式,如 NFS、GlusterFS 或 Ceph。
要在 Swarm 中建立卷,您可以使用 docker service create 命令,如下所示:
$ docker service create --name my-service --mount type=volume,source=my-volume,target=/usr/local/apache2/htdocs/ httpd
輸出
3xhufnsysxmvzbm0p60nwkokd overall progress: 1 out of 1 tasks 1/1: running [==================================================>] verify: Service converged
此命令將基於 httpd 映象建立一個名為“my-service”的新服務,並將“my-volume”卷掛載到服務中容器的 /usr/local/apache2/htdocs/ 目錄。
您還可以使用 `--mount` 指定建立卷時要使用的卷驅動程式。
--mount type=volume,source=my-volume,target=/app/data,volume-driver=nfs
此選項將使用 NFS 卷驅動程式建立卷,允許您在遠端 NFS 伺服器上儲存卷。
要在 Swarm 中的多個服務之間共享卷,您可以在建立其他服務時使用 --mount 標誌並指定相同的卷名和目標路徑。例如:
$ docker service create --name my-service-2 --mount type=volume,source=my-volume,target=/app/data ubuntu
此命令將建立一個名為“my-service-2”的新服務,該服務與“my-service”服務共享“my-volume”卷。這兩個服務中的容器都能夠訪問和修改卷中的資料。
您還可以使用docker volume inspect命令檢視 Swarm 中卷的詳細資訊,包括其驅動程式、掛載點和大小:
$ docker volume inspect my-volume
輸出
此命令將輸出有關“my-volume”卷的資訊,例如以下內容:
[{ "CreatedAt": "2022-12-31T00:00:00Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-volume/_data", "Name": "my-volume", "Options": {}, "Scope": "local" }]
Docker Swarm 中卷共享的用例
卷共享在 Docker Swarm 的各種場景中都很有用,包括:
儲存持久資料 - 透過將資料儲存在卷中,您可以確保在容器停止或刪除時不會丟失資料。此型別對於儲存資料庫、日誌或需要長期保留的其他資料型別很有用。
在服務之間共享資料 - 透過在多個服務之間共享卷,您可以允許它們訪問和修改相同的資料。此型別對於共享檔案、快取資料或需要多個服務訪問的其他型別的資料很有用。
在環境之間遷移資料 - 透過使用支援在遠端伺服器上儲存卷的卷驅動程式,您可以輕鬆地在不同的環境之間遷移資料,例如從開發環境到生產環境。
在 Docker Swarm 中使用卷共享時,還有一些挑戰和注意事項需要牢記,例如:
效能 - 根據卷驅動程式和儲存後端,卷效能可能會有所不同。例如,使用 NFS 等網路卷驅動程式可能會導致比本地卷驅動程式更慢的效能。
資料一致性 - 當多個服務或容器訪問和修改卷中的相同資料時,務必確保資料保持一致且不會損壞。可以透過使用適當的鎖定機制或將單個服務指定為資料的主要寫入器來實現這種一致性。
結論
在這裡,我們解釋了卷以及它們如何在 Docker Swarm 中使用。我們還提供了卷共享如何在不同場景中發揮作用的示例。