使用 Docker Volume 的功能 (二)

上篇已经介绍了如何使用在执行docker run 指令,把Volume Mount 起来使得Container 的文件夹路径可以Mapping 到实体主机的文件夹路径,今天要介绍的部份是透过撰写Dockerfile 的方式使用Volume 的指令,这样使用者就不用在执行docker run 指令时指定-v 参数,就可以把Volume Mount 起来。

另外今天还会 Demo 如何让 Container 之间的资料共享

Example1:

撰写一个Dockerfile 使用VOLUME 指令,把Docker的Image Build起来,然后启动Docker Container,把资料写进在Docker Container里面,最后使用docker inspect 指令,找到Mapping 到实体主机的文件夹路径,确认是否有看到之前写在Container 里面的档案。

Dockerfile 如下

另外在 VOLUME 指令的写法可以写成多个路径,如下

Build Image 指令如下

输入 docker build 指令时,文件夹要切换到和 Dockerfile 档案同一层的文件夹路径,Build 完 Image 之后的结果如下画面

启动 Docker Container 指令如下

因为 VOLUME 已经写在 Dockerfile 里,所以在使用 docker run 指令时没有给 -v 参数

在 Container 里面写入一个档案,如下画面

在实体主机上使用 docker inspect 指令,找到 Volume 在实体主机的文件夹路径

e2987aaab700 为 ContainerID,也可以使用指定 Container Name 的方式

使用 root 权限,切换到 Volume 的实体主机的文件夹路径之后,可以看到在第4步骤在 Container 里面写的档案,也可以在实体主机的文件夹看到 helloworld.txt 的档案,画面如下

Example2:

如何让 Container 和 Container 之间的资料共享,可以使用以下的方式

启动第一个 Container 指令如下

启动第二个 Container 指令如下

--volumes-from 参数指定 Container Name 为 Container1 的 Volume 资料和Container2 做共享

测试二个 Container 之间资料是否能共享,画面如下

左边的Container1 切换到/data 资料夹之后建立一个helloworld.txt 的档案,之后在右边的Container2 切换到/data 资料夹之后查看helloworld.txt 的档案内容为HELLOWORLD,这样就代表了Container 之间的资料有做到共享的效果。

今天介绍了 Dockerfile Volume 的用法以及 Container 之间的资料做共享,不用另外的架设 file server 就可以分享资料,使资料在使用上更加的方便,对于在备份资料方面也更加的简单。