Docker Swarm volume 数据持久化
分类:
IT文章
•
2024-08-22 08:41:37
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主配置文件、添加权限、启动
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客户端、启动服务
# 开启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"‘
命令解析
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"
}
]
# 管理节点:/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