Docker学习笔记(六)容器数据卷
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
接下来就不写操作步骤了,直接写结论
- 点赞
- 收藏
- 分享
- 文章举报
- Docker学习笔记-数据卷、数据卷容器
- Docker学习笔记-数据卷、数据卷容器
- Docker学习笔记-数据卷、数据卷容器
- Docker学习笔记-数据卷、数据卷容器
- Docker学习笔记四:在容器中管理数据
- Docker学习笔记四:在容器中管理数据
- Docker学习笔记 - Docker的数据卷容器
- Docker学习笔记:容器数据管理,链接容器,构建私有库
- docker学习笔记2:容器操作
- docker学习笔记3--docker容器命令
- Docker学习笔记-Docker容器
- Docker 入门学习笔记三:Docker独立IP及容器互联(待处理)
- 学习笔记:从0开始学习大数据-36.docker部署zookeeper集群
- 【容器技术】非常详细的 Docker 学习笔记
- Docker学习笔记 - Docker容器内部署redis
- Docker容器学习梳理--Volume数据卷使用
- docker学习笔记:修改无法启动的容器中的内容
- 初学Docker容器网络不得不看的学习笔记
- Docker学习笔记之Weave实现跨主机容器互联