Docker Swarm(四)Volume 數據(掛載)持久化


 

前言

為了獲得最佳的性能和可移植性,應該避免將重要數據直接寫入容器的可寫層,而應使用數據卷或綁定掛載。

可以為集群中的服務創建兩種類型的掛載,數據卷掛載(volume mounts)或綁定掛載(bind mounts)。

無論使用哪種類型的掛載,在創建服務時使用 --mount 標志進行配置,或者在更新服務時使用 --mount-add 或 --mount-rm 標志。如果不指定一個類型,默認類型是數據卷掛載。

注:tmpfs mount 僅可用於獨立容器,不能在 Docker Swarm Service 中使用,故此處不介紹。

 

 

一、數據卷掛載

數據卷是在主機上的持久化存儲,即使容器刪除,也不會影響數據卷。

使用 docker volume create 命令創建一個volume:

docker volume create --name cwxvolume

使用 docker volume ls 命令查看volume列表:

docker volume ls

創建服務時使用創建好的volume掛載目錄:

docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --mount type=volume,src=cwxvolume,dst=/home/mppay/logs/masl --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

參數src寫成source也可以;dst表示容器內的路徑,也可以寫成destination

使用 docker service ps 命令查看服務情況:

docker service ps masl

發現分別在 manager-node 和 node1 節點上都創建了 masl 任務。

登陸 manager-node 服務器,使用 docker ps -a 命令查看容器運行情況:

docker ps -a

再使用 docker exec 進入容器:

docker exec -ti f820be6cf958 /bin/bash

發現,在容器內部的 /home/mppay/logs/masl 目錄下有一個 masl.log文件,然后輸入exit命令退出容器。

使用 docker volume inspect 命令查看掛載詳細信息

docker volume inspect cwxvolume

 進入上面指定的目錄:

cd /var/lib/docker/volumes/cwxvolume/_data
ls

 發現宿主機上也有這個文件。

 

 

二、綁定掛載

綁定掛載是調度程序為該任務部署容器時主機的文件系統路徑,Docker 將路徑掛載到容器中。在 Swarm 為任務初始化容器之前,該文件系統路徑必須存在。

使用以下命令創建服務:

docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --mount type=bind,source=/usr/local/tomcal_masl/logs,destination=/home/mppay/logs/masl --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

其中,參數destination表示容器里面的路徑,source表示本地硬盤路徑

重要:雖然綁定掛載能用,但是也有可能導致一些問題:

1) 如果你掛載了一個主機路徑到你的服務容器中,那么這個路徑必須存在於 Swarm 集群中的每一個節點。Docker Swarm 調度器會把容器調度到任何滿足資源可用性和滿足你特定約束、位置偏好的節點上。

2) 如果運行中的容器變得不健康或者不可用,那么 Docker Swarm 調度器可能會隨時重新安排它。

3) 主機綁定掛載是完全不可移植的。當你使用綁定掛載時,不能保證你的應用在開發中的運行方式與在生產中的運行方式相同。

 

 

總結

1) 掛載volume后,宿主機和容器之間就可以通過volume進行雙向實時同步.
 
2) 如果replicas是多份,則每個節點宿主機上都會有一個volume路徑,即每個節點宿主機的 /var/lib/docker/volumes/cwxvolume/_data 和分布到它上面的 容器里的/home/mppay/logs/masl 進行實時同步.
 
3)在容器里的同步目錄下沒有寫權限,更新內容時只要放到宿主機的掛在目錄下即可。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM