如果我在同一台主机上运行两个Docker容器,它们每个都有自己的页面缓存,还是使用主机的页面缓存?
答案 0 :(得分:4)
Page cache由内核管理,所有容器都使用它。
了解详情Docker可以轻松生成大量容器并获得更好的密度,但它也可以轻松地在一台计算机上运行太多服务或运行需要太多RAM的服务。
official documentation列出
devicemapper
(direct-lvm
)作为生产就绪存储驱动程序,但它没有非常有效的内存使用量。官方文件也没有说明。多个相同的容器将增加页面缓存的内存使用量。为了使这更好并获得更好的性能,以下内容应该有所帮助,类似于它在Docker和容器之外的帮助:
- 使容器更小,以便长期运行服务&应用程序(例如较小的二进制文件,较小的图像,优化内存使用等)
- 非常重要:使用卷并绑定挂载,而不是将数据存储在容器中
- 非常重要:确保运行具有维护内核,最新Docker和devicemapper库的系统(例如完全更新的CentOS 7 / RHEL 7 / Ubuntu 14.04 / Ubuntu 16.04)
答案 1 :(得分:3)
当前行为(2020年1月)是默认情况下,同一主机上的容器共享相同的页面缓存。
当前docker文档说明:
OverlayFS是一种现代的联合文件系统,与AUFS类似,但是速度更快且实现更简单。 Docker为OverlayFS提供了两个存储驱动程序:原始叠加层和更新且更稳定的overlay2。
在Docker Engine-Community和Docker EE 17.06.02-ee5及更高版本上支持overlay2驱动程序,并且是推荐的存储驱动程序。
页面缓存。 OverlayFS支持页面缓存共享。访问同一文件的多个容器共享该文件的单个页面缓存条目。这使得overlay和overlay2驱动程序可以有效地利用内存,并且是PaaS等高密度用例的不错选择
https://docs.docker.com/storage/storagedriver/overlayfs-driver/