docker基础教程三(数据卷&dockerFile)

    数据卷与dockerfile

                        原创者:文思

一、容器数据卷

1、什么是数据卷,能做什么

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此可以绕过UnionFileSystem提供一些用于持续存储或共享数据的特性。

能做什么:容器持久化、数据共享

2、用命令添加数据卷

docker run –v宿主机路径:/容器目录 镜像名

示例:已打开交互终端方式进入容器

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

运行docker inspect 查看容器内部细节

可以看到已经绑定成功,并且可以读写。在宿主机的myDataVolume下新建host.txt后进入容器观察:

发现容器的dataVolumeContainer文件夹里也有host.txt了。然后打开并编辑容器里的host.txt我们看看宿主机上的会不会同步变化:

保存退出后,然后查看宿主机文件:

看到宿主机上的文件也同步一样。

当容器停止时,主机上的修改能同步过去吗?示例验证:

首先退出当前容器

宿主机上新建host0.txt并编辑:

查看确保docker没有任何运行中的容器实例:

doker start 容器实例ID,启动容器并进入数据卷目录查看:

可以看到容器停止退出后,主机修改数据后仍然同步。

容器目录后加参数可代表只读或只写等,如:docker  run  –v宿主机路径:/容器目录:ro 镜像名。代表只读,宿主机的数据可以单向的传过来,容器里不能任何修改,这里不再进行演示。

二、DockerFile

DockerFile:镜像模板的描述文件

出于移植性和分享性的考虑,用-v主机目录:容器目录这种方式不能直接在DockerFile中实现。在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷。

使用示例:

1、File构建-新建mydocker文件并使用VOLUME指令来给镜像添加一个或多个数据卷:

2、build后生成镜像:build -f dockerfile文件 -t 自定义镜像名 .

用docker images查看可以看到生成的新镜像。

3、docker inspect 新镜像可以看到没有指定宿主机,但会根据数据卷默认出来

三、数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个父容器实现数据共享,挂载数据卷的容器称为数据卷容器。

--volume-from容器间传递共享

启动我们自定义新建的镜像:

[root@f76a128edd1cdataVolumeContainer2]# touch dc01_add.txt

然后再以此镜像启动一个容器示例dc02(weicl@mysql5:/myDataVolume$ sudo docker run -it--name dc02 --volumes-from dc01 mydocker/centos):

可以看到dc02中也有dc01_add.txt,也就是继承了dc01。

假如dc03也继承dc01,将dc01删除后,dc02新增文件,dc03中也会被同步进来,这就是docker的数据分享。

结论:容器之间配置信息的传输,数据卷的生命周期一直持续到没有容器使用它为止。

你可能感兴趣的:(docker基础教程三(数据卷&dockerFile))