类似redis里面的rdb和aof,用来做数据持久化操作的
容器的持久化
容器间继承加共享数据
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供的一些用于持续共享数据的特性
卷的设计目的就是数据的持久化,完全独立与容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
未执行命令前,主机里面没有对应的目录,但是执行完命令后,主机里面创建的对应的目录,新建并运行的容器中也创建了指定的目录
可以看出 -v命令: 如果没有指定的目录的话,会新建一个
docker inspect命令,以json字符串形式查看当前容器内部细节
HostConfig 的BInds显示主机的myDataVolume目录与容器中dataVolumeCintainer目录绑定在了一起
在宿主机的myDataVolume目录下面新建一个文件
去容器里面绑定的目录下查看是否存在指定新建的文件
存在,实现了宿主机和容器之间的数据共享
容器向文件中写入数据
宿主机查看,发现了新增的数据
容器启动过程中,同步了一遍主机的数据,优点类似redis的rdb和aof
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
这里ro表示只可以宿主机对容器数据卷进行读写操作,而容器里面对于数据卷的操作只能够是只读的,不可以增删改
以只读的方式启动容器,切换到opt目录下面,创建dhy.txt文件,成功
下面切换到dataVolumeContainer目录下面,尝试创建文件
提示只读,说明只读的权限只针对于和宿主机绑定的共享目录
宿主机在对应的myDataVolume目录下创建文件成功
容器查看,可以得到对应的文件
VOLUME指令
给进行添加一个或多个数据卷VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"];
说明:
出于可移植性和分享的考虑,用-v主机目录这种方法不能够直接在Dockerfile中实现
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录
编写可执行的dockerfile脚本
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished, ----------------success1"
CMD /bin/bash
新建一个Dockerfile文件,并将上面的脚本放入其中
docker build -f /mydocker/Dockerfile -t zzyy/centos .(最后结尾有一个点)
获得一个新镜像zzyy/centos
docker run -it zzyy/centos
容器里面已经新建了两个数据卷
Docker挂载主机目录Docker访问出现cannot open directory…Permission denied
解决方法: 在挂载目录后多加一个 --privileged=true参数即可
“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”
此时已确定Docker本身已经安装正常。
问题原因是因为docker服务没有启动,所以在相应的/var/run/ 路径下找不到docker的进程。
执行 service docker start 命令,启动docker服务,返回
docker start/running, process 2662
此时进程启动成功,再执行docker ps,问题解决
上面新建的镜像 zzyy/centos为模板并运行容器dc01/dc02/dco3
他们已经具有容器卷: /dataVolumeContainer1 /dataVolumeContainer2
先启动一个父容器dco1,在dataVolumeContainer2新增内容
dco2和dco3继承dco1
命令: --volumes-from
dco2继承至dco1
docker run -it --name dco2 --volumes-from dco1 zzyy/centos
此时看到dco2下面的数据卷中存在dco1_add.txt
并且dco2在当前共享数据卷下面新建一个dco2_add.ttx
dco3继承至dco1,并在共享数据卷下面新建dco3_add.txt
此时回到dco1,可以看到三个不同容器创建的文件,即完成了容器间的数据共享
如果此时删除dco1,数据卷的共享是否会受到影响?
此时进入dco2,发现当前共享数据卷没有受到任何影响,然后我们再新建一个update_dco2.txt,看看是否dco3也可以看到新建的文件,即检验数据卷是否还可以共享
数据卷依然可以共享
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_53157173/article/details/120640329
内容来源于网络,如有侵权,请联系作者删除!