Docker零基础入门——3.Docker之数据卷和数据卷容器

前言
————————————————————————————————————
本文安装docker的基础是linux centos7系统,使用终端模拟软件xshell,有需要安装教程的同鞋可以戳我之前的博客
VMware下载,安装及创建虚拟机
VMware安装Centos7 究极逐步详细图文流程
上节内容↓
Docker零基础入门——2.Docker之容器的使用

1.数据卷的概念(Data Volumes)

之前在我们第0章的时候说明了镜像和容器的关系,容器是在镜像的多层可读层上加了一个读写层,使得容器可以写入数据,这里容器可以理解为一个小的服务器,他的数据是需要持久化的,数据卷的作用就是如此。下边详细说明

1.可以将容器中产生的数据持久化
→ 原理是容器和宿主主机有一个数据目录的关联 两方同时维护使用一个存储数据的目录
2.可以和宿主主机进行文件交互,同上
3.可以将多个容器的数据目录指向同一个宿主主机的目录,就可以完成容器间的数据共享
4.数据卷的更新不会影响产生容器的镜像
5.数据卷的修改会立即生效,不用重启什么
6.数据卷会一直存在,即使挂载数据卷的容器已经被删除
你可以把数据卷理解为挂载在容器上的一个和宿主机共享的文件夹。他只是一个文件目录,可以被多个容器同时指定。

数据卷对应的单词(关键字)就是 volume

2.数据卷的创建和查看

我们先来查看一下数据卷对应的命令参数,是volume的开头字母v
在这里插入图片描述
下来我们创建数据卷,命令如下

docker run -v 对应的宿主机目录 冒号: 对应的容器目录 镜像:版本
举例:
docker run -it -v /hostDataVolume:/containerDataVolume centos:7

在这里插入图片描述
命令执行后,我们分别在宿主机和容器中找到了对应目录下的数据卷(文件夹)
我们可以在宿主机的数据卷下创建一个文件,看看容器是否能够看见
在这里插入图片描述
我们在宿主机创建的aaa.txt是可以成功在容器中看见的,这边我们进入容器的方式是使用了nsenter工具,你用attach命令也是可以进入容器的,具体要了解的可以戳我们上节的内容。

这里我要强调的一点是,使用我们nsenter工具进入容器和用attach命令此时是有区别的,这也依旧同上一节所说一样,不推荐使用attach命令,首先,这里我们是没有设置数据卷权限的(下一部分会详细讲),所以宿主机和容器都是可以对里边的内容进行修改的,我们使用nsenter工具进入是没问题的,是可以修改aaa.txt文件的,如图
在这里插入图片描述
然后我们退出nsenter的进入,
在这里插入图片描述
使用attach命令进入
在这里插入图片描述
此时发现,aaa.txt文件变成只读了。而我们并没有设置权限为只读。
所以还是建议大家使用nsenter工具进入容器,上一节我们也有说明过。

数据卷的绑定假如哪天突然忘了怎么办,没关系,我们可以查看到数据卷的对应关系,使用我们上节使用到的容器详情查询命令即可查看

docker inspect 容器id
因为里边属性过多,这里直接说明一下查看哪两个包含数据卷信息的属性值
HostConfig → Bings
Mounts → Source,Destination

HostConfig → Bings
在这里插入图片描述
Mounts → Source,Destination
在这里插入图片描述

3.数据卷的权限

其实从上边图中容器详情的Mounts属性中看到 RW:true。RW就是read write的权限,这边默认的就是读写权限,我们可以设置容器数据卷为只读权限,命令如下

docker run -it -v /hostDataVolume:/containerDataVolume:ro centos:7
使用 ro 参数,也就是read only的意思,这里需要注意的是,在容器数据卷目录后边,还加了一个冒号,这个大家可能会忽略掉。

下来让我们创建一个只读权限的数据卷。注意这里冒号和ro是连接的,没有空格
在这里插入图片描述
下来我们看一下权限,
在这里插入图片描述
没有问题,是只读的。

4.dockerfile指定数据卷

这边dockerfile的内容我们会在下一节进行详细说明,这边我们暂时先使用一下。
先上一段dockerfile脚本的代码。

FROM centos:7
VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]
CMD echo "finished ---- success"
CMD /bin/bash

别的命令可以先不管,找我们认识的,就是VOLUME,dockerfile是用来生成镜像的,所以用上边代码生成的镜像,在启动成为容器后就已经有了两个数据卷和宿主机关联起来,不过不能指定宿主机上的关联文件夹,宿主机上的数据卷关联文件夹是自动生成的,我们需要去查看再确定宿主机数据卷和容器数据卷的关联关系。
下来我们实际操作一下,首先创建我们的dockerfile(more命令是查看不是创建)
在这里插入图片描述
创建完毕,将其构建为我们的镜像
在这里插入图片描述
然后让我们直接启动为容器,
在这里插入图片描述
并查看是否自动创建了数据卷,在Mounts中
在这里插入图片描述
source目录为宿主机的数据卷目录
destination目录为容器的数据卷目录
我们是可以确认这个目录的存在的
在这里插入图片描述

5.数据卷容器(Data Volume Containers)

如果你有一些持续更新的数据需要在容器间实现数据共享,最好是创建一个数据卷容器。数据卷容器其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载。数据卷容器就和宿主机没有什么关联关系了,主要是强调容器间数据共享。
下来我们开始实际操作一下,还是使用上边dockerfile构建的那个镜像
先创建第一个容器,给一个名字叫做 d01

docker run -it --name d01 myimage:1.0 bin/bash

在这里插入图片描述
再创建一个d02,使用同样的镜像,加上数据卷容器挂载的命令 --volumes-from

docker run -it --name d02 --volumes-from d01 myimage:1.0

在这里插入图片描述
此时,我们在d02中的第一个数据卷里创建一个文件aaa.txt
在这里插入图片描述
然后我们退出d02,进入d01对应关联的数据卷中查看
在这里插入图片描述
发现是可以查看到的,并且也可以修改,这就是数据卷的作用,即使我们停止和删除了容器d01,这个数据卷容器依旧存在,并且容器d01对数据卷容器的修改也不会被抹去。


以上便是今天数据卷和数据卷容器的内容,我们下节再见。

猜你喜欢

转载自blog.csdn.net/cjl836735455/article/details/106451026