Docker Swarm volume 資料持久化
阿新 • • 發佈:2018-11-10
Docker Swarm volume 資料持久化
volume 是將宿主級的目錄對映到容器中,以實現資料持久化。
可以用兩種方式來實現:
- volume 預設模式:工作節點宿主機資料同步到容器內。
- volume NFS 共享儲存模式:管理節點宿主同步到工作節點宿主,工作節點宿主同步到容器。
環境:
- 系統:Centos 7.4 x64
- 應用版本:Docker 18.09.0
- 管理節點:192.168.1.79
- 工作節點:192.168.1.78
- 工作節點:192.168.1.77
volume 預設模式
1、管理節點:建立服務並新增資料卷
docker service create \--mount type=volume,src=test,dst=/data \ --name v-hello \ busybox ping www.baidu.com
# 建立服務 docker service create \ # 建立資料卷 type=volume,src=volume名稱,dst=容器目錄 --mount type=volume,src=test,dst=/data \ # 服務名 --name v-hello \ # 映象 busybox # 容器內執行指令 ping www.baidu.com命令解析
2、工作節點1或2:檢視資料卷
命令:docker volume ls
DRIVER VOLUME NAME
local test
檢視資料卷
命令:docker volume inspect test [ { "Driver": "local", "Labels": null, # 掛載宿主級目錄 "Mountpoint": "/var/lib/docker/volumes/test/_data", "Name": "test",檢視資料卷詳細資訊"Options": {}, "Scope": "local" } ]
3、工作節點1或2:進入容器檢視已建立資料卷
命令:docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 019d6e42a364 busybox:latest "ping www.baidu.com" 33 seconds ago Up 31 seconds v-hello.1.m22z2lmpk4c27a9nsji6q0mog檢視啟動容器
# 1、進入容器 docker exec -it 019d6e42a364 sh
# 2、容器內進入資料卷節點 / # cd /data /data #
# 3、容器外進入資料卷目錄建立檔案 cd /var/lib/docker/volumes/test/_data touch a.txt
# 4、容器內測試data目錄資料 完成測試! /data # ls a.txt
volume NFS共享儲存模式(推薦)
一、搭建NFS服務與客戶端
1、管理節點:安裝nfs服務端、配置nfs主配置檔案、新增許可權、啟動
yum install nfs-utils -y
vim /etc/exports
# 新增目錄給相應網段訪問並新增讀寫許可權 /opt/docker/wwwroot 192.168.1.0/24(rw)
# 建立共享目錄,新增許可權 mkdir -p /opt/docker/wwwroot chmod 777 /opt/docker/wwwroot/
# 開啟rpc服務 systemctl start rpcbind
# 啟動服務並設定開機自啟 systemctl start nfs
2、工作節點:安裝nfs客戶端、啟動服務
yum install nfs-utils -y
# 開啟rpc服務 systemctl start rpcbind # 啟動服務並設定開機自啟 systemctl start nfs
二、NFS建立共享資料卷
1、管理節點:使用NFS共享儲存建立服務及資料卷
docker service create --mount 'type=volume,src=nfs-test,dst=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=192.168.1.79:/opt/docker/wwwroot,"volume-opt=o=addr=192.168.1.79,vers=4,soft,timeo=180,bg,tcp,rw"' -p 8888:80 --name nginx nginx:1.12
# 儲存型別 type=volume, # volume名稱, src=<VOLUME-NAME>, # 目標路徑 dst=<CONTAINER-PATH>, # 官方配置 volume-driver=local, # 服務型別 volumeopt=type=nfs, # 官方配置引數 volume-opt=device=<nfs-server>:<nfs-path>, "volume-opt=o=addr=<nfsaddress>,vers=4,soft,timeo=180,bg,tcp,rw"‘ \命令解析
2、工作節點1或2:檢視建立volumes
docker volume inspect nfs-test
[ { "CreatedAt": "2018-11-08T15:16:35+08:00", "Driver": "local", "Labels": {}, # 工作節點宿主級:資料存放位置 "Mountpoint": "/var/lib/docker/volumes/nfs-test/_data", "Name": "nfs-test", "Options": { # 管理幾點共享儲存位置,與工作節點共享 "device": "192.168.1.79:/opt/docker/wwwroot", "o": "addr=192.168.1.79,vers=4,soft,timeo=180,bg,tcp,rw", "type": "nfs" }, "Scope": "local" } ]
3、工作節點1或2:測試資料卷同步
# 管理節點:/opt/docker/wwwroot 目錄下建立test檔案 touch test # 工作節點:檢視宿主節點宿主是否同步 ls /var/lib/docker/volumes/nfs-test/_data test # 工作節點:進入容器節點檢視容器是否同步 docker exec -it 7429f79519eb sh ls /usr/share/nginx/html test