同一台主机上的Docker容器是否共享同一页面缓存?

时间:2017-12-22 02:07:03

标签: docker paging

如果我在同一台主机上运行两个Docker容器,它们每个都有自己的页面缓存,还是使用主机的页面缓存?

2 个答案:

答案 0 :(得分:4)

Page cache由内核管理,所有容器都使用它。

moby/moby issue 21759

了解详情
  

Docker可以轻松生成大量容器并获得更好的密度,但它也可以轻松地在一台计算机上运行太多服务或运行需要太多RAM的服务。

     

official documentation列出devicemapperdirect-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/