代码之家  ›  专栏  ›  技术社区  ›  kellanburket

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

  •  9
  • kellanburket  · 技术社区  · 7 年前

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

    2 回复  |  直到 7 年前
        1
  •  6
  •   VonC    7 年前

    Page cache 由所有容器使用的内核管理。

    更多信息,请访问 moby/moby issue 21759

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

    这个 official documentation 列表 devicemapper ( direct-lvm )作为生产就绪的存储驱动程序,但它的内存使用效率不高。官方文件也没有其他说明。多个相同的容器将增加页面缓存的内存使用。

    为了更好地实现这一点并获得更好的性能,以下内容应该会有所帮助,与Docker和containers之外的帮助方式类似:

    • 为长期运行的服务缩小容器;应用程序(例如,较小的二进制文件、较小的图像、优化内存使用等)
    • 非常重要:使用卷和绑定装载,而不是将数据存储在容器中
    • 非常重要:确保使用维护的内核、最新的Docker和devicemapper库运行系统(例如,完全更新的CentOS 7/RHEL 7/Ubuntu 14.04/Ubuntu 16.04)
        2
  •  3
  •   morechilli    5 年前

    当前的行为(2020年1月)是,默认情况下,同一主机上的容器共享相同的页面缓存。

    当前docker文档说明:

    OverlayFS是一种现代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:原始的overlay2和更新且更稳定的overlay2。

    Docker Engine-Community和Docker EE 17.06.02-ee5及更高版本支持overlay2驱动程序,是推荐的存储驱动程序。

    页面缓存。OverlayFS支持页面缓存共享。访问同一文件的多个容器共享该文件的单个页面缓存项。这使得overlay和overlay2驱动程序具有高效的内存,是高密度用例(如PaaS)的良好选择

    https://docs.docker.com/storage/storagedriver/overlayfs-driver/