Docker - 数据量和数据容器的区别

Docker - difference between data volumes and data containers

我不明白数据量和数据容器之间有什么区别... 例如,这两个 docker-compose 配置具有相同的结果,但第一个使用数据容器

白色数据容器

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

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

数据容器模式是围绕数据持久性设计的,尽管它在 Docker 1.9 中大部分被命名卷所废弃。卷和数据容器模式的主要优点是主机上的绑定安装是主机相关的,这意味着您不能在 docker 文件中使用它。卷允许您在构建图像时灵活地定义卷。

此外,数据卷旨在持久保存数据,独立于容器的生命周期。 Docker 因此,当您删除容器时永远不会自动删除卷,也不会“垃圾收集”容器不再引用的卷。

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

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

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

然后您可以重新创建 apache 容器或升级它,而无需升级数据容器,并且您的数据仍然可用。这有很多缺点,如果使用图像中定义的体积实现,我 posted a blog about just how much I dislike that。但最大的问题是您将数据作为容器进行管理,因此任何容器清理例程都会同样清理您的数据,如果您反对数据丢失或容器蔓延,那就不是很好了。

命名卷更简单,并且具有数据容器的所有相同功能,但将数据管理与容器管理分开,允许无忧地清除容器,并从一个地方备份数据。它们看起来像:

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

请注意,在 compose 的第 2 版中,您可以更具体地定义卷。