docker机内存分配

我们有一个相当复杂的Rails应用程序,即将被部署到一台物理主机上。 主机有8个核心和128GB RAM。

该应用程序dockerised,有4种types的容器

  • Rails公司 networking服务器
  • Postgres DB
  • Redis DB
  • 工人容器(Resque)

预计Rails和Worker容器将通过在docker-machine中引入更多容器来缩放。

在开发环境中,内存分配给整个docker-machine:

docker-machine create -d virtualbox --virtualbox-memory 8192 default 

是否有可能控制单个容器的内存限制为多less?

例如,将16GB分配给Postgres,但将Rails容器限制为4GB。 什么样的最小内存应分配给运行docker-machine的服务器主机,这甚至可能吗?

编辑

相关问题:

如何处理Docker内存pipe理?

Docker + Apache,内存使用情况如何工作?

编辑2

这个答案https://serverfault.com/a/645888/210752表示容器将根据需要分配内存。 这不是我在开发环境中的经验(默认情况下,docker-machine被分配了2GB)。

正如您在第二次编辑中回答这个问题所提到的那样,Containers与虚拟机不同,因为您通常不会像使用虚拟机一样为它们保留内存。 因为它们都运行在同一个操作系统上,所以它可以根据需要将内存分配给不同的进程,就像它们不在容器中运行一样。 也就是说,无论容器如何,内存都集中在所有进程中。

你在上面例子中用docker-machine设置的是'虚拟'主机的总内存池。 在您的生产环境中,它将是整个128 GB(除非您计划使用docker-machine或VM将其分割)。

但是,容器也是使用内核cgroups (控件组)function的好方法,它允许您为整个容器系统configuration资源pipe理。 这并不能让你“将”内存“保留”到容器中,而是可以将所有容器的内存设置为上限,这样就不会消耗掉可以用于其他内存的内存(例如在发生泄漏或缺陷的情况下)。

使用Docker,根据使用的容器后端,可以设置基本的内存限制如下:

  • 运行docker的默认libcontainer时,通过使用-m-memory选项运行容器
  • 在运行传统LXC提供程序时,通过使用LXC选项运行容器lxc.cgroup.cpuset.memory =使用–lxc-conf

你可以在这里find更多关于Docker中的cgroups使用的信息: https : //www.cloudsigma.com/manage-docker-resources-with-cgroups/

该文章还包含对cgroupsfunction介绍的幻灯片。