一、是什么?
Docker的理念:将运用于运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的希望是持久化,同时希望容器之间能够共享数据。Docker产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。Docker为了保存数据就使用了Docker数据卷。
二、作用
卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。
特点:1)、数据卷可以在容器之间共享或重用数据。
2)、数据卷中的更改可以直接生效。
3)、数据卷中的更改不会包含在镜像的更新中。
4)、数据卷的生命周期一直持续到没有容器使用它为止。
三、数据卷(容器内添加)
【1】、直接命令添加
● 命令:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 (两个文件目录都可以不存在,会自动新建)
docker run -it -v /myDataVolume:/myDataVolumeContine centos
● 查看数据卷是否挂载成功:docker inspect
● 容器和宿主机之间可以进行数据共享。
● 容器停止退出后,主机修改后数据是否同步?容器启动会,会进行同步。
● 命令(带只读权限)docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
【2】、DockerFile添加
● 根目录下新建mydocker文件夹并进入:mkdir mydocker
● 可在Dockerfile中使用VOLUME命令来给镜像中添加一个或多个数据卷(命令的方式只能添加一个,且需要指定主机文件),由于宿主机目录依赖于特定宿主机,我们并不能保证在所有宿主机上都存在这样的特定目录。
● File构建如下:
#创建一个文件dockerfile,内容如下
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finish"
CMD /bin/bash
● build后生成镜像:docker build -f /mydocker/dockerfile -t zzx/centos .
构建完后生成如下镜像文件:
● run 我们新生成的镜像,产生新容器:docker run -it zzx/centos
● 查看我们定义的容器内的卷目录:
● 主机对应的默认地址:docker inspect c5a0adf0c5e9
四、数据卷容器
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,称之为数据卷容器。
案例:1)、先启动一个父容器dc01:docker run -it --name dc01 zzx/centos 修改dataVolumeContainer2中的文件。
2)、创建dc02和dc03继承dc01:docker run -it --name dc02 --volumes-from dc01 zzx/centos 三个容器间就可共享数据。
3)、删除dc01与dc02后dc03是否可访问。dc02和dc03中的数据不会影响。数据共享具有传递性。
结论:容器之间配置信息的传递,数据卷的声明周期移植维持到么有容器使用为止。