Um elemento chave necessário para a conteinerização é o isolamento da rede e de outros serviços, mas não apenas o isolamento, mas também a virtualização . O FreeBSD Jails, os "contêineres" do Linux (ou, mais corretamente, os "namespaces") e as zonas Solaris / illumos oferecem algum grau de "virtualização" desses serviços do sistema operacional.
Por virtualização, isso significa que esses servidores estão disponíveis (ou potencialmente disponíveis ) para itens dentro do "contêiner", mas de uma maneira que proteja os outros itens no mesmo host fora do contêiner. (Por exemplo, um contêiner pode ter sua própria pilha TCP / IP, com seu próprio endereço IP, cache ARP, etc.)
A virtualização de SO (sistema operacional) é como geralmente nos referimos a esse tipo de virtualização "leve", em que os processos pensam que veem um kernel virtual, mas todos compartilham o mesmo kernel real; esse kernel atua como uma espécie de hypervisor para garantir que os limites de contêiner / virtualização não sejam ultrapassados. (Dito de outra forma, os serviços do SO são virtualizados.) Compare isso à virtualização de hardware, onde o virtualizado é o hardware - por exemplo, os dispositivos são emulados no software e apresentados a um sistema operacional em execução no contêiner. Isso é muito poderoso, mas consome muitos recursos - cada máquina virtual deve ter sua própria cópia do sistema operacional.
O macOS recente possui suporte nativo ao hipervisor via Hypervisor.framework, que permite software como "XHyve" [uma porta do BHyve do FreeBSD] (a docker do macOS usa isso), mas não possui os serviços necessários para virtualizar totalmente os serviços do sistema operacional.
Na verdade, muito do que é necessário provavelmente já está presente, pois o trabalho para fornecer caixas de proteção significa que já existem pontos lógicos em que as chamadas do sistema são interceptadas e manipuladas de maneira diferente para diferentes aplicativos. No entanto, isso está longe de ser a história completa - implementar uma verdadeira rede separada, IPC e outros namespaces é bastante trabalhoso.
O melhor motivo pelo qual a Apple não fez isso é provavelmente o mesmo motivo pelo qual a Apple não lança uma plataforma adequada para executar o macOS no data center há muitos anos - falta de demanda do mercado ou falta de demanda percebida pela liderança da Apple. O foco em computadores e dispositivos móveis, onde eles concentraram sua atenção, simplesmente não precisa tanto de instâncias virtuais do macOS. (Isso é triste, porque eu adoraria ter suporte virtual ao macOS - por exemplo, executar o macOS em VMs no Travis CI é realmente demorado em comparação aos contêineres do Linux).
Você ficaria surpreso - os contêineres são realmente suportados - o Sandbox do OS X (e iOS) evoluiu para usá-los. Eles foram introduzidos no 10.7 e agora são de fato padrão no 10.10 e no iOS 8. No último, são mais rigorosamente aplicados (principalmente devido ao motivo da segurança do aplicativo), ao ponto em que um aplicativo só pode se ver e anterior Os métodos de enumeração de processos ou recursos agora retornam resultados baseados em contêiner - semelhantes ao namespace Linux ipc - mas mais poderosos.
fonte
Eu imaginaria a resposta a ser que ninguém realmente quer. Parece ser factível. Essas coisas são feitas principalmente para uma finalidade, preservando o desempenho dos fornecedores de VPS. E, na verdade, ninguém quer que uma instância do VPS seja baseada no OS X.
fonte
Enquanto ele usa o "bom e velho chroot (8)", iniciei um projeto que costuma imitar o comportamento do docker no OS X e no NetBSD. É Free-in-speech e está disponível no GitHub . Como o README diz, este projeto não trata de segurança nem produção, mas ajudará a testar pilhas completas nativamente em sua estação de trabalho.
fonte
O docker (como eu o entendo) está apenas "virtualizando" (em camadas) o sistema de arquivos e a rede (cpu / mem são limitados apenas), portanto, todos os mesmos recursos devem estar lá, mas não comercializados da mesma maneira.
fonte