Docker + Apache, como funciona o uso de memória?

Digamos que eu tenha um host docker configurado com 50 contêineres cada um executando um site servido pelo Apache.

Pelo que entendi, cada contêiner terá uma instância do Apache em execução e, normalmente, cada instância do Apache usa ~250 MB por ram. O Apache então requer alguns mb por processo filho.

Estou correto em assumir que cada contêiner exigirá a memória de uma instância Apache completa? Exemplo. os 50 sites exigiriam 50 x ~300MB?

Ou o Apache é capaz de compartilhar algumas partes da memória entre contêineres para melhorar a eficiência da memória?

O Docker é adequado para hospedagem eficiente em "massa" (por exemplo. um grande número de sites, cada um exigindo poucos recursos) onde cada site é um contêiner? Ou só seria viável ter um contêiner Apache servindo os 50 sites?

o docker fornece isolamento entre instâncias do apache, o que pode ser interessante por vários motivos (por exemplo, se cada site for administrado por um usuário diferente), também permite a fácil realocação de instâncias em outro servidor. Se você não precisa que você provavelmente teria um melhor desempenho com apenas uma instância do Apache.

Isolamento significa que o uso de recursos será bastante semelhante ao uso de Máquinas Virtuais, Exceto que você não paga a sobrecarga de virtualização, a sobrecarga de particionamento de memória e a sobrecarga do sistema operacional. Dito isto, o uso de memória Apache deve depender principalmente da carga do servidor, portanto, você não deve esperar aumentar dez vezes se dividir um servidor grande em muitos pequenos. Além disso, como há apenas um kernel, os caches de disco são compartilhados entre contêineres, portanto, se o padrão de acesso ao disco for semelhante entre duas instâncias, você obterá um pequeno aumento de desempenho.

Se estou entendendo sua pergunta e a preocupação é sobre qual memória é capaz de compartilhar entre instâncias de contêiner, a resposta a essa pergunta para bibliotecas compartilhadas é que ela depende.

Cotacao:

https://groups.google.com/d/msg/docker-user/wCDC_sXzbks/i1gjlgQbxWEJ

O segundo benefício é que o compartilhamento de cópia em gravação e página se aplica a todos os processos no host, independentemente dos contêineres. Por exemplo, 1000 contêineres mapeando o mesmo arquivo para a memória (digamos, uma biblioteca ou arquivo executável) só usarão o espaço de memória uma vez. Se eles escreverem na memória, apenas as páginas para as quais escrevem serão copiadas. A ressalva para este segundo benefício é que o sistema de arquivos precisa estar ciente de que seus contêineres estão mapeando o mesmo arquivo. Atualmente, esse é o caso do driver de armazenamento aufs (que opera na camada do sistema de arquivos), mas não para o driver lvm/devicemapper (que opera no nível do bloco e, portanto, não se beneficia). Os drivers zfs e btrfs em desenvolvimento também se beneficiarão do cache de páginas. Portanto, espero em um cenário em que você execute milhares de contêineres e eles mapeiam grandes arquivos idênticos à memória, atualmente o driver aufs lhe daria uma melhor utilização da memória. Mas não comparamos isso.