Docker - 容器存储详解2(volume container、data-packed volume container)
作者: hangge 发布时间: 2019-09-09 浏览: 2257 次 编辑三、volume container
1,基本介绍
volume container 是专门为其它容器提供 volume 的容器。
volume container 提供的卷可以是 bind mount,也可以是 docker managed volume。
2,volume container 的优点
与 bind mount 相比,不必为每一容器指定 host path,所有 path 都在 volume container 中定义好,容器只需要与 volume container 关联,从而实现容器与 host 的解偶。
3,volume container 的创建
(1)下面使用 docker create 命令创建一个名为 vc_data 的 volume container,该容器 mount 了两个 volume(两种类型):
一种是 bind mount,存放 Web Server 的静态文件。
另一种是 docker managed volume,存放一些实用工具(这个只是用于演示,里面没有东西也没关系)
1 2 3 4 | docker create --name vc_data \ -v ~/htdocs:/usr/local/apache2/htdcocs \ -v /other/uesful/tool \ busybox |
(2)实用 docker inspect vc_data 命令可以看到这两个 volume:
4,volume container 的使用
(1)volume container 创建好之后,其它容器可以通过 --volumes-from 来使用它。比如下面三个 httpd 容器都使用了 vc_data。
1 2 3 | docker run --name web1 -d --volumes-from vc_data httpd docker run --name web2 -d --volumes-from vc_data httpd docker run --name web3 -d --volumes-from vc_data httpd |
(2)我们随便查看一个容器,这里以 web1 为例,执行 docker inspect web1 可以看到该容器使用的就是 vc_data 的 volume。
四、data-packed volume container
1,基本介绍
(1)前面例子 volume container 的数据归根到底还是在 host 里,如果想要将数据完全放到 volume container 中,同时又能与其它容器共享可以使用 data-packed volume container。
(2)data-packed volume container 原理是将数据打包到镜像中,然后通过 docker managed volume 共享。
2,使用场景
由于 data-packed volume container 是自包含的,不依赖 host 提供数据,具有很强的移植性,非常适合只使用静态数据的场景。比如应用的配置信息、Web server 的静态文件等。
3,data-packed volume container 的创建
(1)首先我们创建一个 Dockerfile 文件用于构建镜像,内容如下:
内容说明:
第二行:ADD 将静态文件添加到容器目录 /usr/local/apache2/htdocs
第三行:VOLUME 作用与 -v 等效,用来创建 docker managed volume,mount point 为 /usr/local/apache2/htdocs。因为这个目录就是 ADD 添加的目录,所以会将已有数据复制到 volume 中。
1 2 3 | FROM busybox:latest ADD htdocs /usr/local/apache2/htdocs VOLUME /usr/local/apache2/htdocs |
(2)接着 build 这个镜像,命名为 datapacked
1 | docker build -t datapacked . |
(3)最后用这个镜像创建 data-packed volume container 即可。
1 | docker create --name vc_data datapacked |
4,data-packed volume container 的创建
data-packed volume container 创建好之后,其它容器同样通过 --volumes-from 来使用它。比如下面三个 httpd 容器都使用了 vc_data。
1 2 3 | docker run --name web1 -d --volumes-from vc_data httpd docker run --name web2 -d --volumes-from vc_data httpd docker run --name web3 -d --volumes-from vc_data httpd |
留原文链接:https://www.hangge.com/blog/cache/detail_2404.html