1. 程式人生 > >Docker Swarm volume 資料持久化

Docker Swarm volume 資料持久化

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