您的位置:首页 > 运维架构 > Docker

Docker学习笔记(六)容器数据卷

2020-03-06 13:42 78 查看

1.什么是容器数据卷?

将docker运行产生的数据进行持久化。
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷。

2.数据卷能够干什么?

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器中,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性。
特点
1.数据卷可在容器间共享或重用数据
2.卷中的更改可以直接生效
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一直持续到没有容器使用它为止

3.添加容器卷方法一:命令直接添加

模板

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

执行下面命令

docker run -it -v /myDataVolume:/dataVolumeContainer centos

然后我们可以发现在我们主机的根目录下出现一个myDataVolume的文件夹

在我们新建的Centos容器根目录上出现一个dataVolumeContainer文件夹

这两个文件夹就建立了数据的共享对接
接下来我们检测一下

docker inspect 容器ID

在打印出来的json log中出现以下,即可判定成功

接下来我们看一下容器与宿主间的共享
我们现在宿主机中/myDataVolume下建立一个文件

然后我们进入centos 容器/dataVolumeContainer中,会发现在宿主机中创建的host.txt也存在于这里

接下来我们在容器中对host.txt进行编辑,同时新建一个container.txt文件

回到主机上观察发现数据同步更新

我们接下来做一个这样的问题:

容器停止退出后,主机修改后数据是否同步?

在容器中输入一下命令,退出容器centos

exit

我们在主机上/myDataVolume新建一个新的文件夹host2.txt

启动刚才的容器

docker start 刚才启动容器ID
docker attach 	容器ID

重新进入/dataVolumeContainer中,发现host2.txt存在

得出结论:

容器停止运行后,在主机上更新数据卷,容器再次开启时数据同步更新

接下来我们讨论一下容器数据卷权限问题:
举个例子比如说我们的U盘插在主机上,有的U盘我们可以直接在上面读写,但是有的U盘我们只有读的权限,数据卷也类似如此
命令模板

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker run -it -v /宿主机绝对路径目录:/容器内目录:rw 镜像名

添加容器数据卷方法二:DockerFile添加

Docker image ------> Docker File
Docker File其实就是Docker image源码级的描述文件。
我们可以在docker hub找到这些信息

**第一步:**根目录下新建mydocker文件并进入

mkdir mydocker
cd mydocker

第二步:可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷

VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

说明:
出于可移植和分享的考虑,用-v 主机目录:容器目录 这种方法不能够直接在Dockerfile中实现。
由于宿主主机目录是依赖于特定宿主机的,并不能保证在所有的宿主机上都存在这样的特定目录。
**第三步:**编写docker file

vi mydocker


上面的代码就相当于下面的命令:

docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash

**第四步:**生成镜像

docker build -f /mydocker/mydocker -t cst/centos .

docker images


**第五步:**运行容器

docker run -it 976e090c6cff
ls


可以看出两个容器卷已经形成,这就好像新装的电脑自动安装俩移动盘。
**第六步:**如何看默认在主机上绑定的目录

docker inspect 容器ID

数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
实际上就是活动硬盘上挂活动硬盘,实现数据的依赖。
以上一步新建的镜像cst/centos为模板并运行容器dc01/dc02/dc03
第一步:启动一个父容器
然后进入数据卷,创建dc01_add.txt

cd dataVolumeContainer2
touch dc01_add.txt

第二步:dc02/dc03继承dc01, --volumes-from

docker run -it --name dc02 --volumes-from dc01 cst/centos

再进入dc02的容器卷发现dc01创建的dc01_add.txt在其中

docker run -it --name dc03 --volumes-from dc01 cst/centos

接下来就不写操作步骤了,直接写结论

  • 点赞
  • 收藏
  • 分享
  • 文章举报
小熊奶黄包 发布了20 篇原创文章 · 获赞 0 · 访问量 155 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: