Como mencionado na resposta à pergunta em sua segunda edição, os contêineres não são como VMs, pois geralmente você não reserva memória para eles, como faria com as máquinas virtuais. Como todos eles são executados no mesmo sistema operacional, ele pode despachar memória conforme necessário para diferentes processos, como se eles não estivessem sendo executados em um contêiner. Isto é, a memória é agrupada para todos os processos, independentemente dos contêineres.
O que você definiu no exemplo acima com docker-machine era o pool de memória total do host 'virtual'. No seu caso de produção, serão todos os 128 GB (a menos que você planeje também usar o docker-machine ou as VMs para segmentá-lo).
No entanto, os contêineres também são uma ótima maneira de usar os recursos cgroups (grupos de controle) do kernel, que permitem configurar o gerenciamento de recursos para todo o sistema de contêineres. Isso não permite que você 'reserve' memória a um contêiner, mas, em vez disso, você pode definir limites superiores para toda a memória do seu contêiner para não consumir memória que possa ser usada por outros (no caso de vazamento ou bug, por exemplo) ).
Com o Docker, dependendo do back-end do contêiner usado, você pode definir os limites básicos de memória da seguinte forma:
- Ao executar o libcontainer padrão do Docker, executando os contêineres com a opção -m ou -memory
- Ao executar o provedor LXC herdado, executando os contêineres com a opção LXC lxc.cgroup.cpuset.memory = amount usando - lxc-conf
Você pode encontrar mais informações sobre o uso de cgroups no Docker aqui: link
O artigo também contém slides de uma introdução às funcionalidades do cgroups.