Docker Swarm volume 数据持久化

volume 是将宿主级的目录映射到容器中,以实现数据持久化。

可以用两种方式来实现:

  • volume 默认模式:工作节点宿主机数据同步到容器内。
  • volume NFS 共享存储模式:管理节点宿主同步到工作节点宿主,工作节点宿主同步到容器。

准备文件

docker-compose.yml

version: "3.8"services:db:image: mysql:5.7environment:- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_passsecrets:- mysql_passvolumes:- data:/var/lib/mysqlvolumes:data:secrets:mysql_pass:file: mysql_pass.txt

mysql_pass.txt

$ more mysql_pass.txt
abc123

volume 默认模式

$ docker stack deploy --compose-file docker-compose.yml db
Creating network db_default
Creating secret db_mysql_pass
Creating service db_db
$ docker stack ls
NAME      SERVICES   ORCHESTRATOR
db        1          Swarm
$ docker service ls
ID             NAME      MODE         REPLICAS   IMAGE       PORTS
rgbluvbnc4yq   db_db     replicated   1/1        mysql:5.7
$ docker service ps db_db
ID             NAME      IMAGE       NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
pvot7z2twld6   db_db.1   mysql:5.7   node2    Running         Running 23 seconds ago
$

切换node2节点

$ docker container ls
CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS              PORTS                 NAMES
9de5c08ca72e   mysql:5.7   "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp   db_db.1.pvot7z2twld676au2vrlkgcf0
$ docker volume ls
DRIVER    VOLUME NAME
local     db_data

service创建在那个节点上,节点就会创建volume

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
  1. 工作节点:安装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"‘ \
  1. 工作节点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. 工作节点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

【Docker系列 Swarm】 swarm volume 数据持久化相关推荐

  1. Docker系列之五:Volume 卷的使用——以Redis为例

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

  2. docker进阶篇(一) ---- Volume(数据卷)

    引言 docker的镜像是由多个只读的文件系统叠加在一起形成的.当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层.这时如果修改正在运行的容器中已有的 ...

  3. Docker容器学习梳理 - Volume数据卷使用

    Docker volume使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Docker中的数据可以存储在类似于虚拟机 ...

  4. 小白都能懂的 玩转docker系列之 Mysql同步数据

    先搜索一个镜像 [root@xiaoxiao ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL ...

  5. docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别

    前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此 ...

  6. Docker 的数据持久化项目实战

    文章目录 官网 概述 初探Mysql镜像容器的数据存储 镜像准备:拉取mysql镜像 docker pull mysql 启动Mysql镜像 登录Mysql镜像容器 登录mysql 容器数据存储路径查 ...

  7. docker mysql初始化数据及数据持久化

    1.初始化默认数据 我们经常会在mysql容器启动时,需要初始化一些数据库.数据表或者其他默认数据.其实mysql早已支持我们这种需求,具体方案如下: # 其实主要的做法就是重新build mysql ...

  8. Docker系列之八:在Dockerfile中使用多段构建Muti-stage build

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

  9. Docker系列之三:使用Docker镜像和仓库

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

最新文章

  1. [CODEVS 3147] 矩阵乘法 2
  2. 数据结构_树与二叉树(mindmap)+LeetCode_100.相同的树(C语言)
  3. pyqt5从子目录加载qrc文件_【JVM系统学习之路】一篇看懂类加载
  4. postfix+squirrelmail - rhat 5.4
  5. 使用python中的networkx来生成一个图
  6. 一家可能永远无法赚钱的公司,把自己卖了400亿
  7. Java类和对象(全网最细详解)
  8. mybatis报错:org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC
  9. minitools在win10上安装失败
  10. 自问自答系列——商城相关
  11. 【VCS】Git之无尽探索
  12. 小知识(3) 解决谷歌翻译问题(浏览器/IDEA)
  13. 第一个项目的大概流程
  14. pandas中的窗口对象(窗口函数)
  15. Java实现QQ邮箱登录,实现邮箱验证码三分钟失效,代码实现发送验证码和登录全过程思路。内附完整项目。
  16. mysql5.1 优化_7. 优化 - [ MySQL 5.1参考手册 ] - 在线原生手册 - php中文网
  17. 【加解密】在线加密工具推荐
  18. 传奇自定义技能栏技术分享-GEE
  19. 【华人学者风采】Xifeng Yan 加州大学圣巴巴拉分校
  20. Gallery2修改记录

热门文章

  1. 2018java面试题100道
  2. 解决电脑钉钉视频/腾讯会议会议无法旋转屏幕的问题
  3. python函数列表 输入n个元素并计算平均值_python每5个数求平均值
  4. Android开发随手记
  5. 青春正能量 中兴发布千元4G拍照神器红牛V5手机
  6. unity中瞄准倍镜效果和源码
  7. 分享自己觉得有意思的
  8. 织梦dedecms文章发布日期时间调用标签大全
  9. 京东VS猫宁,运费或将成为压垮京东的最后一根稻草
  10. 10. java之多态