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

时间:2015-12-07 13:45:45

标签: linux docker

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

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

2 个答案:

答案 0 :(得分:7)

默认情况下,在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/

答案 1 :(得分:2)

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

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

为了进一步阅读,本主题有一个interesting paper by IBM,其中包含一些有关使用Docker卷(强调我的)对性能影响的有趣结论:

  

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