容器数据卷
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时刪除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2: 卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
容器内添加:
一、直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /myDataVolume:/dataVolumeContainer centos
该命令会在宿主机创建myDataVolume目录,与容器centos中创建目录dataVolumeContainer,并实现数据同步,就算容器关闭了,宿主机下的myDataVolume目录下的文件发生变化,centos容器再次启动后dataVolumeContainer会再次同步到与宿主机的数据一致。
如果出现cannot open directory :Permission denied错误。
在挂在目录后多加一个--privileged=true参数即可
添加权限
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos
容器只有读的权限
DockerFile方法,创建脚本
#volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finidhed,--------sccess" CMD /bin/bash
脚本生成镜像
-f指定脚本位置,-t指定镜像的名称和版本号
docker build -f /mydocker/Dockerfile -t lq/centos .
运行
docker run -it 【容器id】 /bin/bash
我们可以看到这个容器里面有两个容器卷的目录
在宿主机上使用docker inspect [容器id]可以查看与容器同步的目录。
一般在/var/lib/docker/volumes/目录下
通过之前新建的镜像来实现数据共享,通过镜像实例出dc01、dc02、dc03 3个容器
启动镜像dc01
docker run -it --name dc01 lq/centos
在dataVolumeContainer2中新增内容
dc02和dc03继承自dc01
--volumes-from
docker run -it --name dc02 --volumes-from dc01 lq/centos
docker run -it --name dc03 --volumes-from dc01 lq/centos
分别在在dataVolumeContainer2中新增内容
回到dc01可以看到02/03各自添加的都能共享
删除dc01,dc2修改后dc03可以访问
删除dc02后dc03可以访问
新增dc04继承dc03在删除dc03
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器去使用它为止