小知识:Docker中数据卷(volume)管理的两种方式

上篇文章给大家介绍过 docker基础知识之挂载本地目录的方法 ,今天给大家介绍Docker数据卷(volume)管理的两种方式,具体内容如下所示:

什么是数据卷

数据卷( volume ):volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利。

为什么要用数据卷

Docker分层文件系统存在的问题:

Docker的镜像是由一系列的只读层组合而来的,当启动一个容器时, Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题:

1、性能差。

2、多个容器之间的数据无法共享。

3、生命周期与容器相同。当删除容器时,容器产生的数据将丢失。数据卷机制的好处:

1、mount到主机中,绕开分层文件系统。

2、volume能在不同的容器之间共享和重用。

3、和主机磁盘性能相同。

4、对volume中数据的操作不会影响到镜像本身。

5、volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除。

Docker提供了volumedriver接口,通过实现该接口,我们可以为Docker容器提供不同的volume存储支持。当前官方默认实现了local这种volumedriver,它使用宿主机的文件系统为Docker容器提供volume。

数据卷管理的两种方式

Docker的volume的本质是容器中一个特殊的目录。在容器的创建过程中,Docker会将宿主机上的指定目录(一个以volume ID为名称的目录,或者指定的宿主机目录)挂载到容器中指定的目录上(使用bing mount挂载方法),故挂载完成后的宿主机目录和容器内的目标目录表现一致。

1、绑定挂载bind mount

bind mount是将主机上的目录或文件mount到容器里。使用直观高效,易于理解。

使用-v选项指定挂载路径,格式 :

#前面是宿主机真实存在的路径:后面是容器内的路径 后台运行一个使用nginx镜像的容器并将宿主机的/data目录挂载到容器的目录/usr/share/nginx/html [root@server1 ~]# docker run d name demo v /data:/usr/share/nginx/html nginx

%小知识:Docker中数据卷(volume)管理的两种方式-猿站网-插图

调到前台运行,分别查看宿主机和容器的指定的目录下的内容,是一样的。这是因为这种方式挂载和我们平时使用mount方式是一样的,原有数据隐藏,替换为宿主机的数据。

##/data目录下这么多东西是因为docker默认数据目录是/data [root@server1 ~]# docker execit demo bash

%小知识:Docker中数据卷(volume)管理的两种方式-1猿站网-插图

bind mount默认权限是读写rw,可以在挂载时指定只读ro。

v选项指定的路径,如果不存在,挂载时会自动创建。 docker run it name vm1 \ /etc/yum.repos.d/dvd.repo:/etc/yum.repos.d/dvd.repo:ro rhel7 bash

2、docker managed volume

bind mount必须指定host文件系统路径,限制了移植性。

docker managed volume不需要指定mount源,docker自动为容器创建数据卷目录。默认创建的数据卷目录都在 /var/lib/docker/volumes 中。

如果挂载时指向容器内已有的目录,容器内原有数据会被复制到volume中。

创建卷方式: [root@server1 ~]# docker volume create webdata #创建一个名为webdata的卷 [root@server1 ~]# docker rm f demo #把上面创建的卷删掉 [root@server1 ~]# docker run d name demo v webdata:/usr/share/nginx/html nginx #把webdata这个卷挂载到容器内的/usr/share/nginx/html目录上并运行一个容器

将创建的webdata卷挂载到容器的/usr…目录下

%小知识:Docker中数据卷(volume)管理的两种方式-2猿站网-插图

进入docker默认创建的数据卷目录查看卷里的内容,我们可以看到上面只创建了卷,没有写入任何东西,但卷里有内容是因为挂载时容器内指定目录里原本有东西,所以复制过来的

%小知识:Docker中数据卷(volume)管理的两种方式-3猿站网-插图

我们运行容器使用的是nginx镜像,访问一下,没有问题

%小知识:Docker中数据卷(volume)管理的两种方式-4猿站网-插图 如果挂载时没指定mount源,那么docker会自动随机创建一个文件名很长的卷 [root@server1 ~]# docker rm f demo [root@server1 ~]# docker run d name demo v /usr/share/nginx/html nginx 67ab13a7b24c19c53f4ce117136b9d0e4dec93c615a0192ead919d10e6c2acae

%小知识:Docker中数据卷(volume)管理的两种方式-5猿站网-插图

我们使用docker inspect demo命令查看下卷的源目录

%小知识:Docker中数据卷(volume)管理的两种方式-6猿站网-插图 得到路径后就可以查看目录下的内容了 ls /var/lib/docker/volumes/2ca22fd769e4b7b6f5a02dd96fe8d47a6df5578074c0d340ced3ab33b25456ca/_data

%小知识:Docker中数据卷(volume)管理的两种方式-7猿站网-插图

bind mount 与 docker managed volume 对比

相同点:两者都是 host 文件系统中的某个路径。

不同点如图:

%小知识:Docker中数据卷(volume)管理的两种方式-8猿站网-插图

到此这篇关于Docker中的数据卷(volume)管理的两种方式的文章就介绍到这了,更多相关Docker数据卷volume内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_55005311/article/details/119117454

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:基于Docker、Nginx和Jenkins实现前端自动化部署

2023-3-20 17:21:13

建站知识

小知识:Docker部署MySQL8集群(一主二从)的实现步骤

2023-3-20 17:36:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索