Docker学习笔记(五)

Docker存储

对于无状态的容器,直接放在镜像中就很好,因为每次没有需要维护的数据。但是其他应用就不能这样处理了。

我们需要借助Volume存储机制。

本质:volume是host的目录或文件。bind mount方式和docker managed volume方式


bind  mount ,是将host已存在的目录或文件mount到容器上。

通过参数 -v ~/htdocs:/usr/local/apache2/htdocs。<host path>:<container path>。如果容器的path下已经存在,原有数据会被隐藏

我们可以通过修改host本地文件,影响容器的存储内容。

同时,我们可以指定数据的读写权限,参数 -v <host path>:<container path>:ro

需要注意,如果-v连接的是单一文件,请确保文件存在,否则按照目录mount给容器。

如果需要迁移容器,请确保host的mount数据在相同路径中


docker managed volume, 是docker自定义的mount源。

参数-v 后直接跟<container path>。对应源在哪里呢?docker inspect 容器名 查看mount内容

查看自定义源路径,会发现其内容和容器路径下内容一模一样。因为mount 已有目录,则会将原有数据copy到volume中。

我们需要理解的是,这个时候容器-v路径下的内容,已经不在是镜像管理了,而是volume管理

docker volume ls查看volume粗略内容。

docker volume inspect (volumeName) 查看volume详细情况。

具体差异参考学习博客:www.cnblogs.com/CloudMan6/p/7152775.html


docker cp 可以在host和容器之间进行拷贝。容器ID:容器路径

容器之间数据共享

1、通过bind mount 将一个目录mount到多个容器即可。

2、通过volume container构建一个专门为其他容器提供volume的容器

例如:docker create --name vc_data -v ~/htdocs:/usr/local/apache2/htdocs -v /other/useful/tools busybox

我们不需要运行volume container,其他容器在运行时,添加参数 --volumes-from vc_data使用这个volume container即可。

相比于bind mount,volume container 实现了更好的解耦,将路径只需要在volume container 中配置即可,不需要配置多遍。

3、通过data-packed volume container,我们将数据打包到镜像中。

在Dockerfile中,ADD 静态文件到容器目录,然后VOLUME 创建docker managed volume。

用新镜像创建容器,然后我们的其他容器运行时指定这个容器作为volume container即可。这样就不依赖host提供数据,但是只适合静态数据场景,比如配置信息等。

posted @ 2017-12-28 14:30  FlyerS  阅读(92)  评论(0)    收藏  举报