【发布时间】:2020-01-14 01:19:42
【问题描述】:
如果我在同一台主机上运行两个 Docker 容器,它们是各自拥有自己的页面缓存还是使用主机的页面缓存?
【问题讨论】:
如果我在同一台主机上运行两个 Docker 容器,它们是各自拥有自己的页面缓存还是使用主机的页面缓存?
【问题讨论】:
Page cache 由内核管理,供所有容器使用。
在moby/moby issue 21759查看更多信息
Docker 可以轻松生成大量容器并获得更好的密度,但它也可以轻松地在一台机器上运行太多服务或运行需要太多 RAM 的服务。
official documentation 将
devicemapper(direct-lvm) 列为生产就绪存储驱动程序,但它的内存使用效率不高。官方文档也没有另外说明。多个相同的容器会增加页面缓存的内存使用量。为了使其更好并获得更好的性能,以下内容应该会有所帮助,其方式类似于它在 Docker 和一般容器之外的帮助方式:
- 为长时间运行的服务和应用程序缩小容器(例如更小的二进制文件、更小的图像、优化内存使用等)
- 非常重要:使用卷和绑定挂载,而不是在容器内存储数据
- 非常重要:确保运行具有维护内核、最新 Docker 和 devicemapper 库的系统(例如完全更新的 CentOS 7 / RHEL 7 / Ubuntu 14.04 / Ubuntu 16.04)
【讨论】:
当前行为(2020 年 1 月)是默认情况下,同一主机上的容器共享相同的页面缓存。
当前 docker 文档说明:
OverlayFS 是一种类似于 AUFS 的现代联合文件系统,但速度更快且实现更简单。 Docker 为 OverlayFS 提供了两个存储驱动:原始的 overlay,以及更新更稳定的 overlay2。
Docker Engine - Community 和 Docker EE 17.06.02-ee5 及更高版本支持 overlay2 驱动程序,是推荐的存储驱动程序。
页面缓存。 OverlayFS 支持页面缓存共享。访问同一文件的多个容器共享该文件的单个页面缓存条目。这使得 overlay 和 overlay2 驱动程序可以高效利用内存,并且是 PaaS 等高密度用例的理想选择
https://docs.docker.com/storage/storagedriver/overlayfs-driver/
【讨论】: