Linux 为什么我要在Dockerfile中使用卷?

Linux 为什么我要在Dockerfile中使用卷?,linux,docker,Linux,Docker,对我来说,Dockerfile中的卷并不意味着在做任何事情,命令行上的-v实际上使容器中的目录可用 当我阅读Docker手册时,我并不十分清楚为什么我要将其写入Docker文件,而不仅仅是命令行?默认情况下,在Docker文件中定义卷不会将卷公开给主机。相反,它设置链接的卷以允许其他容器链接到其他Docker容器中的卷。这通常用于“数据容器”配置,其中启动容器的唯一目的是持久化数据。下面是一个简单的例子: docker run -d --name docker_data docker/imag

对我来说,Dockerfile中的
并不意味着在做任何事情,命令行上的
-v
实际上使容器中的目录可用


当我阅读Docker手册时,我并不十分清楚为什么我要将其写入Docker文件,而不仅仅是命令行?

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

 docker run -d --name docker_data docker/image1
 docker run -d --volumes-from docker_data --name new_container docker/image2
请注意
--volumes from
标志


有关更详细的解释,请参阅。

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

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

为了进一步阅读,有一篇关于这个主题的文章,其中包含一些关于使用Docker卷对性能影响的有趣结论(重点是我的):

AUFS引入了大量开销 这并不奇怪,因为I/O要经过几层,[…]。 文件系统或磁盘密集型应用程序应绕过AUF 通过使用卷。[...] 虽然集装箱本身几乎没有开销, Docker并非没有性能问题Docker卷 性能明显优于AUFS中存储的文件