分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

Docker数据管理:Named volume

Docker中可以使用Named volume和data container来进行数据的管理。

单一Container的使用Helloworld

Step 1:创建一个Named Volume

事前确认volume的信息,没有VOLUME存在

[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAME[root@host88 volumes]#
  • 1
  • 2
  • 3

确认/var/lib/docker/volumes的状况

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# lltotal 0[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5

创建一个名为volname的数据卷,通过-v参数可以进行创建,同时也可以通过docker volume create来创建。

[root@host88 volumes]# docker run -it -v volname:/volumedata/dbdata debianroot@b2e3523a6dd9:/# cd volumedata/dbdataroot@b2e3523a6dd9:/volumedata/dbdata# ls -ltotal 0root@b2e3523a6dd9:/volumedata/dbdata#
  • 1
  • 2
  • 3
  • 4
  • 5

在Container外部确认此事volname是否已经创建成功

[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volname[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4

确认/var/lib/docker/volumes下面 的情况

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# lltotal 0drwxr-xr-x 3 root root 18 Jul 25 06:23 volname[root@host88 volumes]# find . -type f[root@host88 volumes]# find . -type d../volname./volname/_data[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

除了目录结构没有任何文件存在

Step 2:在Container中保存数据Hello world

root@b2e3523a6dd9:/volumedata/dbdata# ls -ltotal 0root@b2e3523a6dd9:/volumedata/dbdata# echo "hello, world" >>helloworldroot@b2e3523a6dd9:/volumedata/dbdata# cat helloworldhello, worldroot@b2e3523a6dd9:/volumedata/dbdata# ls -ltotal 4-rw-r--r-- 1 root root 13 Jul 25 06:26 helloworldroot@b2e3523a6dd9:/volumedata/dbdata#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在外部确认该信息是否已经存在

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# find . -type f./volname/_data/helloworld[root@host88 volumes]# cat ./volname/_data/helloworldhello, world[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Step 3:在外部直接修改该文件

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# find . -type f./volname/_data/helloworld[root@host88 volumes]# cat ./volname/_data/helloworldhello, world[root@host88 volumes]# echo "hell, this is `hostname`" >>./volname/_data/helloworld[root@host88 volumes]# cat ./volname/_data/helloworldhello, worldhell, this is host88[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在内部确认信息

root@b2e3523a6dd9:/volumedata/dbdata# ls -ltotal 4-rw-r--r-- 1 root root 34 Jul 25 06:29 helloworldroot@b2e3523a6dd9:/volumedata/dbdata# cat helloworldhello, worldhell, this is host88root@b2e3523a6dd9:/volumedata/dbdata#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

从Container中退出前再追加一条信息

root@b2e3523a6dd9:/volumedata/dbdata# echo "hello, I will exit from `hostname`" >>helloworldroot@b2e3523a6dd9:/volumedata/dbdata# cat helloworldhello, worldhell, this is host88hello, I will exit from b2e3523a6dd9root@b2e3523a6dd9:/volumedata/dbdata#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Step 4:退出Container后看数据是否仍然存在

root@b2e3523a6dd9:/volumedata/dbdata# exitexit[root@host88 volumes]# find . -type f./volname/_data/helloworld[root@host88 volumes]# cat ./volname/_data/helloworldhello, worldhell, this is host88hello, I will exit from b2e3523a6dd9[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

数据仍然存在。使用docker volume ls可以看到刚刚volname的数据卷也依然存在。

[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volname[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4

数据卷的管理

docker的volume的管理目前主要有下面4种:create/ls/inspect/rm

查询(ls)

[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volname[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4

正常的环境一定不会跑出这么清静的结果。

inspect

[root@host88 volumes]# docker volume inspect volname[    {        "Name": "volname",        "Driver": "local",        "Mountpoint": "/var/lib/docker/volumes/volname/_data"    }][root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

其实这个信息可能会觉得非常眼熟,看完docker insepect 的结果就会发现,内容是一致的,以下是docker inspect b2e3523a6dd9的mounts相关信息

        "Mounts": [            {                "Name": "volname",                "Source": "/var/lib/docker/volumes/volname/_data",                "Destination": "/volumedata/dbdata",                "Driver": "local",                "Mode": "z",                "RW": true,                "Propagation": "rslave"            }        ],
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

删除(rm)

删除之前的确认

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# find . -type f./volname/_data/helloworld[root@host88 volumes]# cat ./volname/_data/helloworldhello, worldhell, this is host88hello, I will exit from b2e3523a6dd9[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volname[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

删除volume之前需要删除与其有依赖关系的container

[root@host88 volumes]# docker rm b2e3523a6dd9b2e3523a6dd9[root@host88 volumes]#
  • 1
  • 2
  • 3

删除container并不会将volume一并删除

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# find . -type f./volname/_data/helloworld[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5

而使用docker volume rm则会干净地删除掉所有信息

[root@host88 volumes]# docker volume rm volnamevolname[root@host88 volumes]# lltotal 0[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAME[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

长时间运行的Docker环境中,成为僵尸的不只是/var/lib/docker/volumes下面的实际数据
  而且docker volume ls中也会有很多完全不知道的信息,甚至有些相关联的实际数据已经被删除
  这种情况在很多考虑不足的环境中屡见不鲜,虽然只是很简单的helloworld
  数据管理时候需要考虑的问题还是值得引起足够的重视。

创建(create):

可以像例子那样通过run 和-v创建volume,同时也可以使用docker volume create来创建

[root@host88 volumes]# docker volume create --driver=local --name=volnamevolname[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volname[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

有些volume在创建时还要结合使用–opt参数(或者-o)
  如果不指定–name参数,docker会体贴地替你取一个,大概就像下面这样

[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volname[root@host88 volumes]# docker volume createe54a0022fdff1e0e57b8635317e0b51b1e36c3c9b8c48a051e7778a45f08a83d[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volnamelocal               e54a0022fdff1e0e57b8635317e0b51b1e36c3c9b8c48a051e7778a45f08a83d[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

看着太闹心了,一下全部删掉吧。

[root@host88 volumes]# docker volume rm $(docker volume ls -q)volnamee54a0022fdff1e0e57b8635317e0b51b1e36c3c9b8c48a051e7778a45f08a83d[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4

需要注意的是这个名字必须是唯一的,所以前面也说到过不使用docker volume rm来删除的话会导致问题,
  下次用同样名字想要创建一个volume却发现已经存在的时候就只能是创建失败了。

多Container共用一个数据卷

Step 1:创建一个Named Volume

用你喜欢的方式创建一个named volume

[root@host88 volumes]# docker volume create --name=volnamevolname[root@host88 volumes]# docker volume lsDRIVER              VOLUME NAMElocal               volname[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Step 2:路人甲Container与之相连

[root@host88 volumes]# docker run -it -v volname:/volumedata/dbdata debianroot@5a43b6347b53:/#
  • 1
  • 2

路人甲使用Debian,他想知道谁是docker的主机

root@5a43b6347b53:/# lsbin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volumedataroot@5a43b6347b53:/# cd volumedata/dbdataroot@5a43b6347b53:/volumedata/dbdata# ls -ltotal 0root@5a43b6347b53:/volumedata/dbdata# echo "hello, world by `hostname`, who is host?" >> helloworldroot@5a43b6347b53:/volumedata/dbdata# cat helloworldhello, world by 5a43b6347b53, who is host?root@5a43b6347b53:/volumedata/dbdata#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Step 3:主机与路人乙

主机此时看到了这个信息

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# find . -type f./volname/_data/helloworld[root@host88 volumes]# cat ./volname/_data/helloworldhello, world by 5a43b6347b53, who is host?[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

同时路人乙也与该volume进行了连接

[root@host88 ~]# docker run -it -v volname:/volumedata/dbdata centos[root@6365668cea55 /]#
  • 1
  • 2

BTW,Docker现在不能使用相对路径,所以volname:/volumedata/dbdata的这个写法最前面的/仍然是不可或缺.
  路人乙说虽然你不是找我,但是我看见了,这是共享的,我就可以回信么,说我不知道。

[root@6365668cea55 dbdata]# ls -ltotal 4-rw-r--r-- 1 root root 43 Jul 25 09:36 helloworld[root@6365668cea55 dbdata]# cat helloworldhello, world by 5a43b6347b53, who is host?[root@6365668cea55 dbdata]# echo "hello, world by `hostname`, I do not know" >> helloworld[root@6365668cea55 dbdata]# cat helloworldhello, world by 5a43b6347b53, who is host?hello, world by 6365668cea55, I do not know[root@6365668cea55 dbdata]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Step 4:主机与路人丙

主机什么时候都能看见信息的更新,作为应该回邮件的人,完全有权利装作看不见

[root@host88 volumes]# pwd/var/lib/docker/volumes[root@host88 volumes]# lltotal 0drwxr-xr-x 3 root root 18 Jul 25 05:31 volname[root@host88 volumes]# find . -type f./volname/_data/helloworld[root@host88 volumes]# cat ./volname/_data/helloworldhello, world by 5a43b6347b53, who is host?hello, world by 6365668cea55, I do not know[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

路人丙使用ubuntu,他觉得这样数据设计地实在不好,他表示他根本不想看到这样的信息,大家不要再reply to all

[root@host88 ~]# docker run -it -v volname:/volumedata/dbdata ubunturoot@730209b03ea6:/# cd volumedata/dbdataroot@730209b03ea6:/volumedata/dbdata# ls -ltotal 4-rw-r--r-- 1 root root 87 Jul 25 09:44 helloworldroot@730209b03ea6:/volumedata/dbdata# cat helloworldhello, world by 5a43b6347b53, who is host?hello, world by 6365668cea55, I do not knowroot@730209b03ea6:/volumedata/dbdata#  echo "hello, world by `hostname`, please do not reply to all" >> helloworldroot@730209b03ea6:/volumedata/dbdata# cat helloworldhello, world by 5a43b6347b53, who is host?hello, world by 6365668cea55, I do not knowhello, world by 730209b03ea6, please do not reply to allroot@730209b03ea6:/volumedata/dbdata#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Step 5:大家都看到了信息,决定都不再说话

作为和现实世界相反的期待,大家觉得这实在太无聊了,于是没有人再不断跳出来Reply all说请把我从mail link中剔除

[root@6365668cea55 dbdata]# cat helloworldhello, world by 5a43b6347b53, who is host?hello, world by 6365668cea55, I do not knowhello, world by 730209b03ea6, please do not reply to all[root@6365668cea55 dbdata]#
  • 1
  • 2
  • 3
  • 4
  • 5
root@5a43b6347b53:/volumedata/dbdata# cat helloworldhello, world by 5a43b6347b53, who is host?hello, world by 6365668cea55, I do not knowhello, world by 730209b03ea6, please do not reply to allroot@5a43b6347b53:/volumedata/dbdata#
  • 1
  • 2
  • 3
  • 4
  • 5
[root@host88 volumes]# cat ./volname/_data/helloworldhello, world by 5a43b6347b53, who is host?hello, world by 6365668cea55, I do not knowhello, world by 730209b03ea6, please do not reply to all[root@host88 volumes]#
  • 1
  • 2
  • 3
  • 4
  • 5

实际多Container使用同一个Volume完全可以做的更好,把读写的权限进行合理设定,能够满足很多实际的场景。

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

Docker数据管理 Named volume相关推荐

  1. Named Volume 在 MySQL 数据持久化上的基本应用

    原文作者:春哥 非常感谢春哥的投稿,同时也有一些感慨. 初识春哥时,春哥是美术设计大咖.后不久,创业并致力于游戏开发,已有3年.从Unity3D到IOS(Swift)开发,从前端开发到后端以及容器技术 ...

  2. Docker学习五:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  3. Docker学习三:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  4. 6、docker 数据管理

    很早之前看的文章,进行了简单的排版整理,找不到源地址了,如有侵权,请联系删除. 1.数据卷(docker volume) 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用 ...

  5. CHAPTER 5 Docker数据管理

    docker 数据管理 5.1 数据卷 5.1.1 创建数据卷 5.1.2 绑定数据卷(`--mount`) 5.2 数据卷容器 5.3 利用数据卷容器来迁移数据 在生产环境中使用Docker,往往需 ...

  6. 解决 Windows Docker 安装 Gitlab Volume 权限问题

    解决 Windows Docker 安装 Gitlab Volume 权限问题 参考文章: (1)解决 Windows Docker 安装 Gitlab Volume 权限问题 (2)https:// ...

  7. docker mysql volum_Docker Volume

    什么是数据卷Volume呢? 首先需要明确Docker内的文件系统是如何工作的,Docker镜像被存储在一系列的只读层. Docker镜像是由多个文件系统(只读层)叠加而成,当启动一个容器的时候,Do ...

  8. Docker存储卷(Volume)

    简介 想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层 ...

  9. Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)

    文章主人公:帅哥BUG

最新文章

  1. 在SQLserver数据库里设置作业的步骤
  2. php多进程共享数据库,PHP多进程环境下通过共享内存与信号量实现资源共享
  3. java小程序例子_「小程序JAVA实战」java的聚合项目搭建(30)
  4. (13)System Verilog typedef创建新数据类型
  5. 【Python-2.7】对列表进行排序
  6. VoxelNet:End-to-End Learning for Point Cloud Based 3D Object Detection阅读笔记
  7. 【STM32标准库】【自制库】8位8段数码管(74HC595)【软件部分】
  8. 什么是servlet?servlet有什么用?
  9. qq音乐无损下载php源码,QQ音乐无损歌曲地址分析以及多平台源码
  10. 计算机控制电梯报告总结,电梯控制实验报告电梯控制实验报告.doc
  11. andriod studio git
  12. 嵌入式平台 STM32 libqrencode 移植 二维码生成
  13. 云栖社区订阅周刊大盘点
  14. 使用poi操作word文档实现套打功能
  15. Testin云测荣获5G应用企业服务优秀平台奖
  16. SM2签名方案的安全性
  17. 谷歌今遭遇史上至暗时刻,美司法部正式提起反垄断诉讼!22年前微软曾有此劫-1
  18. 双模sa_买5G手机一定要选5G双模手机,SA/NSA你都了解吗?
  19. matplotlib 进阶之Artist tutorial(如何操作Atrist和定制)
  20. 商城系统:包含用户注册/用户登陆/商品浏览/我的购物车功能.

热门文章

  1. android系统 默认颜色
  2. CAM是指利用计算机进行辅助制造工作,CAM计算机辅助制造系统
  3. vtp协议服务器配置,Cisco思科交换机VTP协议三种模式区别?
  4. C语言——switch语句
  5. word-200-1
  6. HanLP的自定义词典使用方式与注意事项介绍 1
  7. C语言学习-翁凯(第七章笔记)
  8. 破解的iphone上, 如何编写具有root权限的程序
  9. SQL Server 2005 安装图解
  10. 聚类算法模型评价指标