創建dockerSwarm nfs掛載
nfs高可用部署(lsyncd兩主機雙向同步)
nfs高可用部署(lsyncd三主機三向同步)
1. 通過 Volume
1.1 創建 Docker Volume
每個 swarm 節點均創建相同名稱的 Docker Volume(名稱為 nfs120)
docker volume create --driver local \--opt type=nfs \--opt o=addr=192.168.56.120,rw \--opt device=:/home/nfs \nfs120
1.2 查看 Volume 是否創建成功
docker volume ls
# swarm集群節點依次進行驗證
1.3 查看 Volume 詳情
docker volume inspect nfs120
其中:Mountpoint 為 Host 掛載點,Options 為 NFS 服務共享目錄信息。
1.4 驗證數據共享特性
在 docker swarm 的 master 節點執行創建服務操作
docker service rm web
docker service create \--name web \--publish 8080:80 \--mount type=volume,source=nfs120,destination=/data1 \--mode global \nginx:1.22
1.5 查看 Service 部署情況
1.6 驗證數據共享特性 NFS 服務創建測試數據
1.7 Service 驗證是否共享 NFS 數據
可見,數據被共享了,當然,你在容器中 /data1目錄下產生的數據也會被持久化到 NFS 服務上。
當然,Nginx 也是正常運行的
2. 通過 Docker Stack
官方文檔 Docker Stack CLI
通過 Volume 方式,你會發現每臺 swarm 集群 work 節點都需要創建 Volume(如果 master 節點也為 work 節點,也要創建 Volume )。稍顯麻煩,我們可通過 Docker Stack 方式來彌補這點不足,也就是使用 Docker Stack 方式時,就不需要手動創建 Docker Volume 了。
2.1 啟動一個stack服務
官方文檔:docker compose CLI
創建每個節點都啟動一個容器的service
cat > docker-compose.yml << EOF
version: "3"
services:web:image: nginx:1.22volumes:- nfs121:/dataports:- "8081:80" deploy: mode: global
volumes:nfs121:driver: localdriver_opts:type: "nfs"o: "addr=192.168.56.120,rw"device: ":/home/nfs"
EOFdocker service rm web_web
# 啟動一個web_web 的service
docker stack deploy -c docker-compose.yml web
2.2 查詢服務及掛載volume是否存在
docker service ls
docker service ps web_web
docker volume ls
docker volume inspect web_nfs121
2.3 驗證數據共享特性
docker exec -it web_web.mv3jjl59io5wx0sywoghdatqs.6nom1h5z2w0r9cyykb2gse8wy /bin/bash
以上步驟成功!
FQA:
1.create service 創建其他節點也存在volume
docker service create --mode global \--name web122 \--publish 8082:80 \--mount 'type=volume,source=nfs122,target=/home/nfs,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/home/nfs,volume-opt=o=addr=192.168.56.120' \nginx:1.22
查看結果