繁体   English   中英

为什么我要在Dockerfile中使用VOLUME?

[英]Why would I want to to use VOLUME inside a Dockerfile?

对我来说,Dockerfile中的VOLUME并没有接缝做任何事情,其中​​命令行上的-v实际上使容器内的目录可用。

当我阅读VOLUME的Docker手册时,我不太清楚为什么我想在Dockerfile中编写它,而不仅仅是在命令行上?

默认情况下,在Dockerfile中定义卷不会将卷公开给主机。 相反,它设置链接卷以允许其他容器链接到其他Docker容器中的卷。 这通常用于“数据容器”配置,您可以在其中启动容器,其唯一目的是持久化数据。 这是一个简单的例子:

 docker run -d --name docker_data docker/image1
 docker run -d --volumes-from docker_data --name new_container docker/image2

注意--volumes-from标志。

有关更详细的说明,请参见http://container-solutions.com/understanding-volumes-docker/

除了接受的答案之外,使用卷的另一个考虑因素是性能 通常,Docker使用的分层文件系统(通常是AUFS或Devicemapper,取决于您正在使用的Linux发行版)并不是最快的,并且可能成为高吞吐量方案(例如,数据库或缓存目录)的瓶颈。

另一方面,即使未显式映射到主机目录,卷仍然是对主机文件系统的简单绑定挂载,从而在写入数据时允许更高的吞吐量。

为了进一步阅读, IBM就此主题发表了一篇有趣的论文 ,其中包含一些关于使用Docker卷(强调我的)的性能影响的有趣结论:

AUFS引入了显着的开销 ,这并不奇怪,因为I / O经历了多个层次,[...]。 文件系统或磁盘密集型应用程序应使用卷绕过AUFS。 [...]虽然容器本身几乎没有开销,但Docker并非没有性能问题。 Docker卷的性能明显优于 AUFS中存储的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM