Docker – 数据卷和数据容器的区别

我不明白数据量和数据容器之间有什么区别…例如,这两个docker构成configuration具有相同的结果,但第一个使用数据容器

惠普数据容器

datacontainer: image: httpd:2.4-alpine volumes: - ../src:/usr/local/apache2/htdocs apache: image: httpd:2.4-alpine ports: - 80:80 volumes_from: - datacontainer 

没有数据容器

 apache: image: httpd:2.4-alpine ports: - 80:80 volumes: - ../src:/usr/local/apache2/htdocs 

使用数据容器的优点和缺点是什么?

这些例子都不是真正的数据卷或数据容器。 他们都绑定到主机,一个间接比另一个。 我倾向于将这些作为主机卷。

数据容器已弃用到指定的卷。 他们看起来像:

 datacontainer: image: httpd:2.4-alpine command: tail -f /dev/null volumes: - /data apache: image: httpd:2.4-alpine ports: - 80:80 volumes_from: - datacontainer 

然后,您可以重新创buildapache容器,或升级它,而无需升级datacontainer,并仍然可以获得您的数据。 这有很多缺点,如果用图片中定义的体积来实现,我发布了一个关于我有多less不喜欢的博客 。 但是最大的问题是,你将数据作为一个容器来pipe理,所以任何容器清理例程都会同样清理你的数据,如果你反对数据丢失或者容器扩展,那么不是很好。

一个命名卷比数据容器更容易,具有所有相同的function,但将数据pipe理与容器pipe理分开,允许容器被清除而不用担心,数据将从一个地方备份。 他们看着像是:

 apache: image: httpd:2.4-alpine ports: - 80:80 volumes: - data:/data 

在撰写的第2版中注意到,你会更具体的体积定义。

数据容器模式是围绕数据持久性devise的,尽pipe它在Docker 1.9中已经被命名的卷大部分废弃了。 卷和数据容器模式的主要优点是绑定在主机上的挂载是依赖于主机的,这意味着你不能在docker文件中使用它。 通过卷,您可以灵活地在构build图像时定义卷。

另外,数据卷旨在保持数据,与容器的生命周期无关。 因此,Docker不会在删除容器时自动删除卷,也不会“垃圾收集”不再由容器引用的卷。