码迷,mamicode.com
首页 > 其他好文 > 详细

Docker Swarm(四)Volume 数据(挂载)持久化

时间:2020-03-06 23:42:41      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:导致   没有   node   home   命令   volumes   number   inf   network   

 

前言

为了获得最佳的性能和可移植性,应该避免将重要数据直接写入容器的可写层,而应使用数据卷或绑定挂载。

可以为集群中的服务创建两种类型的挂载,数据卷挂载(volume mounts)或绑定挂载(bind mounts)。

无论使用哪种类型的挂载,在创建服务时使用 --mount 标志进行配置,或者在更新服务时使用 --mount-add 或 --mount-rm 标志。如果不指定一个类型,默认类型是数据卷挂载。

技术图片

注:tmpfs mount 仅可用于独立容器,不能在 Docker Swarm Service 中使用,故此处不介绍。

 

 

一、数据卷挂载

数据卷是在主机上的持久化存储,即使容器删除,也不会影响数据卷。

使用 docker volume create 命令创建一个volume:

docker volume create --name cwxvolume

使用 docker volume ls 命令查看volume列表:

docker volume ls

技术图片

创建服务时使用创建好的volume挂载目录:

docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --mount type=volume,src=cwxvolume,dst=/home/mppay/logs/masl --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

参数src写成source也可以;dst表示容器内的路径,也可以写成destination

使用 docker service ps 命令查看服务情况:

docker service ps masl

技术图片

发现分别在 manager-node 和 node1 节点上都创建了 masl 任务。

登陆 manager-node 服务器,使用 docker ps -a 命令查看容器运行情况:

docker ps -a

技术图片

再使用 docker exec 进入容器:

docker exec -ti f820be6cf958 /bin/bash

技术图片

发现,在容器内部的 /home/mppay/logs/masl 目录下有一个 masl.log文件,然后输入exit命令退出容器。

使用 docker volume inspect 命令查看挂载详细信息

docker volume inspect cwxvolume

技术图片

 进入上面指定的目录:

cd /var/lib/docker/volumes/cwxvolume/_data
ls

技术图片

 发现宿主机上也有这个文件。

 

 

二、绑定挂载

绑定挂载是调度程序为该任务部署容器时主机的文件系统路径,Docker 将路径挂载到容器中。在 Swarm 为任务初始化容器之前,该文件系统路径必须存在。

使用以下命令创建服务:

docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --mount type=bind,source=/usr/local/tomcal_masl/logs,destination=/home/mppay/logs/masl --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

其中,参数destination表示容器里面的路径,source表示本地硬盘路径

重要:虽然绑定挂载能用,但是也有可能导致一些问题:

1) 如果你挂载了一个主机路径到你的服务容器中,那么这个路径必须存在于 Swarm 集群中的每一个节点。Docker Swarm 调度器会把容器调度到任何满足资源可用性和满足你特定约束、位置偏好的节点上。

2) 如果运行中的容器变得不健康或者不可用,那么 Docker Swarm 调度器可能会随时重新安排它。

3) 主机绑定挂载是完全不可移植的。当你使用绑定挂载时,不能保证你的应用在开发中的运行方式与在生产中的运行方式相同。

 

 

总结

1) 挂载volume后,宿主机和容器之间就可以通过volume进行双向实时同步.
 
2) 如果replicas是多份,则每个节点宿主机上都会有一个volume路径,即每个节点宿主机的/var/lib/docker/volumes/cwxvolume/_data和分布到它上面的容器里的/home/mppay/logs/masl进行实时同步.
 
3)在容器里的同步目录下没有写权限,更新内容时只要放到宿主机的挂在目录下即可。
 
 

Docker Swarm(四)Volume 数据(挂载)持久化

标签:导致   没有   node   home   命令   volumes   number   inf   network   

原文地址:https://www.cnblogs.com/caoweixiong/p/12381838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!