我们有一个相当复杂的 Rails 应用程序,即将部署到单个物理主机上。主机有 8 个内核和 128GB 内存。
该应用程序是 dockerised,有 4 种类型的容器
预计 Rails 和 Worker 容器将通过在 docker-machine 中引入更多容器来扩展。
在开发环境中,内存分配给整个docker-machine:
docker-machine create -d virtualbox --virtualbox-memory 8192 default
Run Code Online (Sandbox Code Playgroud)
是否可以控制单个容器的内存限制?
例如,为 Postgres 分配 16GB,但将 Rails 容器限制为 4GB。应该为运行 docker-machine 的服务器主机分配什么样的最小内存,这甚至可能吗?
编辑
相关问题:
编辑 2
这个答案https://serverfault.com/a/645888/210752表明容器将根据需要分配内存。这不是我在开发环境中的经验(默认情况下,docker-machine 分配了 2GB)。
小智 4
正如第二次编辑中问题的答案中提到的,容器与虚拟机不同,因为您通常不会像虚拟机那样为它们保留内存。因为它们都运行在同一个操作系统上,所以它可以根据需要将内存分配给不同的进程,就像它们没有在容器中运行一样。也就是说,无论容器如何,所有进程都会共享内存。
在上面的示例中,您使用 docker-machine 设置的是“虚拟”主机的总内存池。在您的生产案例中,它将是整个 128 GB(除非您还计划使用 docker-machine 或 VM 对其进行分段)。
然而,容器也是利用内核cgroups(控制组)功能的好方法,它允许您为整个容器系统配置资源管理。这不会让您为容器“保留”内存,而是可以为所有容器内存设置上限,这样容器就不会耗尽可用于其他容器的内存(例如,在发生泄漏或错误时) )。
使用 Docker,根据所使用的容器后端,您可以设置基本内存限制,如下所示:
您可以在此处找到有关 Docker 中 cgroup 使用的更多信息: https: //www.cloudsigma.com/manage-docker-resources-with-cgroups/
本文还包含介绍 cgroup 功能的幻灯片。
归档时间: |
|
查看次数: |
10849 次 |
最近记录: |