电商| 物流| 科技| 创业| 经商| 运营| 科普| 财经| 文娱| AI| 物联| 品牌| 会议| 政策| 时尚| 健康| 家居| 金融| 农业| 汽车| 房产| 百科| 生活| 游戏| 管理| 快讯
 
首页 » 资讯 » 科技 » Docker 卷到底是个啥玩意?从使用到深入!

Docker 卷到底是个啥玩意?从使用到深入!

放大字体  缩小字体 时间:2020-10-29 11:11    热度:182
Docker 支持持久化和非持久化两种方式的存储。非持久化化存储自动创建,从属于容器,生命周期与容器相同,即删除容器也会删除全。。。

Docker 支持持久化和非持久化两种方式的存储。

非持久化化存储自动创建,从属于容器,生命周期与容器相同,即删除容器也会删除全部非持久化数据。 如果想把容器中的数据保留下来,也就是持久化,那么需要将数据存储到卷上。卷与容器是解耦的,从而可以独立地创建并管理卷,并且卷也不与任意容器声明周期绑定,即用户删除一个关联了卷的容器,但是卷并不会被删除。

非持久化存储

每个容器都会被自动分配本地存储。默认情况下,容器全部文件和目录都是用该存储的。非持久存储属于容器的一部分,并且与容器的生命周期一样---容器创建时会创建非持久化存储,同时该存储也会随着容器的删除而删除。

在 Linux 系统中,该存储目录在 /var/lib/docker/ 下,是容器的一部分。这个 storage-driver 是指要使用的存储驱动。假如要想在生产环境中使用 Linux 运行 Docker,需要确认当前的存储驱动是否符合当前 Linux 版本:

RedHat Enterprise Linux:Docker 17.06 或者更高的版本中使用 Overlay2 驱动。 Ubuntu:使用 Overlay2 或者 AUFS 驱动。如果正在使用 Linux 4.x 或者更高版本的内核,建议使用 Overlay2。

总的来说,Overlay2 驱动正在逐渐流行,可能在未来会成为大多数平台上的推荐存储驱动。

持久化

容器中持久化数据的方式推荐使用卷,也就是先创建卷,接着将卷挂载到容器上。这个时候,卷会挂载到容器文件系统的某个目录中,任何写到该目录下的内容都会写到卷中。即使容器被删除了,卷及其上面的数据也仍然存在。

如下图所示,Docker 卷就被挂载到了容器的 /code 目录,那么任何写入 /code 目录中的数据其实都是写入到 Docker 卷中,并且这个 Docker 卷在容器删除之后依然存在。而其他目录使用的都是临时的本地存储。

卷本质就是 Docker 主机上的一个目录。将 Docker 主机中的一个目录挂载到了容器文件系统中的一个目录后,此时操作容器文件系统中的目录,其实就是操作相应的 Dokcer 主机上的目录。也就是相当于容器不再仅仅只能访问容器的文件系统了,还可以访问所在 Docker 主机所在的文件系统了。”见识一下

创建和查看卷

docker volumn create myvol  # 创建名为 myvol 的卷 

默认情况下,Docker 创建新卷时采用内置的 local 驱动,采用这个驱动也就说明创建的卷只能被容器所在的 Docker 主机所使用(上述所使用的就是 local 驱动)。

除了 local 驱动之外,你还可以使用 -d 参数指定不同的驱动。第三方驱动也可以通过插件方式接入,这些驱动提供了高级存储特性,并为 Docker 集成了外部存储系统。卷插件涵盖了块存储、文件存储、对象存储等。

块存储:相对性能更高,适用于对小块数据的随机访问负载。比如 Amazon EBS 或者 OpenStack 块存储服务。 文件存储:包括 NFS 和 SMB 协议的系统,在高性能场景下表现优异。比如 NetApp FAS、Azure 文件存储。 对象存储:适用于较大且长期存储的、很少变更的二进制数据存储。通常对象存储是根据内容寻址,并且性能较低。比如 Amazon S3。 docker volumn ls  docker volumn inspect [VOLUMN_NAME] 

inspect 命令会输出相应卷的详细信息,Driver 和 Scope 都是 local,那么表示这个卷使用默认 local 驱动创建,只能用于当前 Docker 主机上的容器。Mountpoint 表示卷位于 Docker 主机上的位置,使用 local 驱动创建的卷在 Docker 主机上均有专属目录。在 Linux 中则位于 /var/lib/docker/volumes 目录下。

[     {         "CreatedAt": "2020-09-28T16:07:25+08:00",         "Driver": "local",         "Labels": {},         "Mountpoint": "/var/lib/docker/volumes/myvol/_data",         "Name": "myvol",         "Options": {},         "Scope": "local"     } ] 

Dockerfile 中可以使用 VOLUMN 指令的方式部署卷。需要注意的是 Dockerfile 中无法指定主机目录,因为主机目录通常情况是相对主机的一个目录(就是跟主机有关的目录),那么这个目录在不同主机间会不同,可能会导致构建失败。如果通过 Dockerfile 指定,那么每次部署时都需要指定主机目录。”

卷使用

docker container run -it --name voltainer --mount source=bizvol,target=/vol alpine 

上述的命令创建了一个新的独立容器,并将容器内的 /vol 目录挂载到了名为 bizvol 的卷。假如容器的文件系统中没有 /vol 这个目录,那么会创建;假如已有这个目录,那么则会使用这个目录(该目录的内容到时候会变成卷里面的内容)。同理,系统中没有叫 bizvol 的卷,那么该命令也会创建一个这样的卷;如果已经存在这个卷了,那么则使用这个卷。

假设,我们把这个容器给删除了,那么 bizvol 这个卷还是在的。而且,你在容器运行过程中往 /vol 这个目录中写入的数据也在这个卷中。如下所示,在容器运行过程中先往 /vol/file 中写入一段数据,然后退出并删除容器。之后,查看卷所在的目录,发现创建的文件和写入的数据还是在的。

深入深入

上面对卷的阐述更多是更多是从持久化的角度出发,而卷的另一大作用就是“打通”容器文件系统和主机文件系统,使得容器里在指定目录下创建的文件可以被宿主机访问到,也可以使得宿主机上指定目录下的文件可以被容器里的进程访问到。那么,这个是如何做到的呢?

这里主要用到了 Linux 的绑定挂载(bind mount)机制。它的主要作用就是将一个目录或者文件挂载到一个指定的目录上。并且,之后你在挂载点上进行的任何操作,都只发生在被挂载的目录或者文件上,而原挂载点的内容则会被隐藏起来且不受影响。绑定挂载实际上是一个 inode 替换的过程。比如,执行 mount --bind /home /test 会将 /home 以 bind 的方式挂载到 /test 上。而这一操作其实就相当于将 /test 重定向到了 /home 的 inode 上。因此,当我们修改 /test 目录的时候,实际上修改的是 /home 目录的 inode。

因此,我们只需要在“容器进程“创建出来并且容器的 rootfs 准备好之后,但是在 chroot 之前,把 volume 指定的宿主机目录挂载到指定的容器目录在宿主机上对应的目录即可(因为这时候容器进程可以一直看到宿主机上的整个文件系统,同时由于执行这个挂载操作的时候,容器已经创建出来了,那么此时 mount namespace 相当于已经开启了,所以挂载事件只在容器里可见)。

这边的容器进程是 Docker 创建的一个容器初始化进程(dockerinit),而不是应用进程(ENTRYPOINT+CMD)。dockerinit 负责完成根目录的准备、挂载设备和目录、配置 hostname 等一系列需要在容器内进行的初始化操作。最后通过 execv() 系统调用,让进程取代自己,成为容器里 PID=1 的进程。”由于 volume 挂载到指定的容器目录在宿主机上对应的目录位于可读写层,那么在 docker commit 的时候会被提交嘛?不会。这个主要是因为 docker commit 发生在宿主机空间,而这个 mount 发生在容器里面,并且这个 mount 由于 mount namespace 的隔离,不会影响到宿主机,也就是说宿主机上并没有这个挂载。因此,在提交的时候只会提交一个空的目录,因为 /test 是实实在在被新建在可读写层了的(这个新建可不受 mount namespace 的影响,因为 mount namespace 只影响 mount 相关的)。

下面我们来实验一下,首先启动一个容器并且让这个容器使用一个 volume,挂载在容器里的 /test 目录上。之后在容器的 /test 目录中创建一个新的文件为 test.txt。

之后跑到卷所在的位置查看是否有相应的 test.txt 文件创建,结果显示有 test.txt 文件创建。之后,我们再去可读写层对应的目录查看是否有 test.txt 文件,结果显示是有 test 目录,但是没有 test.txt 文件。因此,docker commit 的时候只会提交一个 test 空目录。

常用命令汇总

# 创建名为 myvol 的卷。默认情况下,新卷创建使用 local 启动,但是也可以使用 -d 指定不同的驱动 docker volumn create myvol  # 列出本地 Docker 主机上的全部卷 docker volumn ls  # 查看卷的详细信息,可以通过这条命令查看卷在 Docker 主机文件系统中的具体位置 docker volumn inspect [VOLUMN_NAME]  # 删除未装入到某个容器或者服务的所有卷,不能删除正在被容器或者服务使用的卷 docker volumn prune  # 删除指定卷,不能删除正在被容器或者服务使用的卷 docker volumn rm [VOLUMN_NAME]  # 创建了一个新的容器,并将容器内的 /vol 目录挂载到了名为 bizvol 的卷。假如容器的文件系统中没有 /vol 这个目录,那么会创建;假如已有这个目录,那么则会使用这个目录(该目录的内容到时候会变成卷里面的内容)。同理,系统中没有叫 bizvol 的卷,那么该命令也会创建一个这样的卷;如果已经存在这个卷了,那么则使用这个卷。 docker container run -it --name voltainer --mount source=bizvol,target=/vol alpine  # 没有显示声明宿主机目录,那么会在宿主机上创建一个临时目录 /var/lib/docker/volumn/[volume_name]/_data,然后把它挂载到容器 /test 目录上。 docker run -v /test ...  # 把宿主机的 /home 目录挂载到容器的 /test 目录上 docker run -v /home:/test ... 

关于Docker 卷到底是个啥玩意?从使用到深入!的要点介绍,希望对大家了解Docker 卷到底是个啥玩意?从使用到深入!有所帮助,如有侵权,联系我们37442552@qq.com。
 
你可能感兴趣:
 
芬兰政府指责微软对诺基亚始乱终弃 承诺一个都

2016-05-28

本周早些时候,微软宣称它将会裁减1850个工作岗位,其中有1350个工作位于芬兰。人们认为微软裁员之举预示着该公司新手机开发工作的终结。据外电报道,芬兰政…

三星最新发布的C5酷似iPhone 6 售价只有后者一半
三星最新发布的C5酷似iPhone 6 售价只有后者一

2016-05-28 三星 C5

三星最新发布的C5酷似iPhone 6 售价只有后者一半;三星周四在中国市场发布的最新款智能手机C5酷似苹果iPhone 6和6S。

苹果下架腾讯全系产品只是虚惊一场 淘宝、京东

2016-05-29 苹果 腾讯 APP

苹果下架腾讯全系产品只是虚惊一场 淘宝、京东等APP也未能幸免;苹果下架腾讯全系产品,搜索出现大面积瘫痪,淘宝、京东等APP也未能幸免。据了解,腾讯也曾因…

华为为何要在此时向三星发起专利战?背后的原因究竟是什么?
华为为何要在此时向三星发起专利战?背后的原因

2016-05-29 华为 三星 专利

华为为何要在此时向三星发起专利战?背后的原因究竟是什么?作为中国企业的华为,其在专利,尤其是与通信相关的专利的申请和积累在全球均名列前茅。而华为之…

2016中国互联网大会时间地点主题 互联网大会有何亮点?
2016中国互联网大会时间地点主题 互联网大会有

2016-06-02 2016 中国 互联网 大会

 由中国互联网协会主办的2016(第十五届)中国互联网大会将于6月21-23日在北京国际会议中心举行。本届大会主题为“繁荣网络经济 建设网络强国”。

Facebook周四下架了突发新闻通知应用Notify
Facebook周四下架了突发新闻通知应用Notify

2016-06-04 Facebook Notify

Facebook周四下架了突发新闻通知应用Notify;Facebook发言人在发给科技博客The Verge的声明中表示,Notify采用的技术将集成到Messenger中,所以内容发布商可…

阿里回应被SEC问询 马云:那并不代表公司有问题

2016-06-04

近期,阿里巴巴接受美国证券交易委员会问询,16年来日本软银集团首度出售手中阿里股份,阿里股价震荡,相关消息持续引发关注。2

iphone7上市时间确定 国行或5288元起售

2016-06-04

根据国外网站PC-Tablet的报导称,苹果仍将下一代iPhone的发布时刻定在今年9月份,至于详细日期则为美国当地时刻9月9日或9月16日

印度最大手机厂商明年来华抢市场 有戏吗?

2016-06-04

Micromax联合创始人维卡斯贾因(VikasJain)当天在香港举办的一场科技大会上表明,公司的目标是在2020年前变成按销量核算的全球第

索尼Xperia X系列终于要来了6月8日携手周杰伦发

2016-06-04

索尼的手机一直以来都是以拍照以及颜值闻名的,在今年的MWC2016大会上,索尼曾经发布了一款Xperia X系列产品中的Xperia XPerform

 
热点图文
三星最新发布的C5酷似iPhone 6 售价只有后者一半

三星最新发布的C5酷似iPhone 6 售价只有后者一半

华为为何要在此时向三星发起专利战?背后的原因究竟是什么?

华为为何要在此时向三星发起专利战?背后的原因究竟是什么?

2016中国互联网大会时间地点主题 互联网大会有何亮点?

2016中国互联网大会时间地点主题 互联网大会有何亮点?

Facebook周四下架了突发新闻通知应用Notify

Facebook周四下架了突发新闻通知应用Notify

戴尔确认出售软件业务:4年净赔16亿美元

戴尔确认出售软件业务:4年净赔16亿美元

沉迷于成人VR的日本年轻人  年轻男女都拒绝恋爱(图)

沉迷于成人VR的日本年轻人 年轻男女都拒绝恋爱(图)

今日头条母公司字节跳动科创板上市成功几率多大?

今日头条母公司字节跳动科创板上市成功几率多大?

余承东回应:华为开发自有系统 以防美国科技巨头不授权现有系统

余承东回应:华为开发自有系统 以防美国科技巨头不授权现有系统

 
经商宝 — 经商创业营销推广电子商务门户 网站地图 | 关于我们 | 特惠服务 | 人才招聘 | 联系我们 | 法律声明