Docker Swarm volume 數據持久化

Docker Swarm volume 數據持久化html

volume 是將宿主級的目錄映射到容器中,以實現數據持久化。nginx

能夠用兩種方式來實現:docker

  • volume 默認模式:工做節點宿主機數據同步到容器內。
  • volume NFS 共享存儲模式:管理節點宿主同步到工做節點宿主,工做節點宿主同步到容器。

環境:vim

  • 系統:Centos 7.4 x64
  • 應用版本:Docker 18.09.0
  • 管理節點:192.168.1.79
  • 工做節點:192.168.1.78
  • 工做節點:192.168.1.77

volume 默認模式tcp

一、管理節點:建立服務並添加數據卷ide

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
命令解析

二、工做節點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"
    }
]
查看數據卷詳細信息

三、工做節點1或2:進入容器查看已建立數據卷spa

命令: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
查看啓動容器
# 一、進入容器
docker exec -it 019d6e42a364 sh
# 二、容器內進入數據卷節點
/ # cd /data
/data #
# 三、容器外進入數據卷目錄建立文件
 cd /var/lib/docker/volumes/test/_data
touch a.txt
# 四、容器內測試data目錄數據 完成測試!
/data # ls
a.txt

volume NFS共享存儲模式(推薦)3d

1、搭建NFS服務與客戶端code

一、管理節點:安裝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

二、工做節點:安裝nfs客戶端、啓動服務

yum install nfs-utils -y
# 開啓rpc服務
systemctl start rpcbind
# 啓動服務並設置開機自啓
systemctl start nfs

2、NFS建立共享數據卷

一、管理節點:使用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"‘ \
命令解析

二、工做節點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"
    }
]

三、工做節點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
相關文章
相關標籤/搜索