Containers: Windows VS Linux

Olá, neste post veremos detalhes de diferenças fundamentais no funcionamento de containers no Windows e no Linux, boa leitura!

Tanto no Linux quanto no Windows, temos o mesmo amigo Docker, com os mesmos comandos, compose, swarm e etc., porém, existem diferenças em camadas inferiores dos sistemas que são interessantes de serem estudadas para um aprofundamento e entendimento maior sobre containers.

Observe na figura acima, complementando o comentário que fiz anteriormente, na primeira camada de baixo para cima, podemos observar que os dois sistemas tratam de formas diferentes o suporte a containers, por questões lógicas dada a diferença de arquitetura de ambos. Vamos observar com mais detalhes as principais diferenças na sequência deste post.

Processos de sistema

O Linux expõe suas funcionalidades de kernel via Syscalls às camadas superiores, já a Microsoft controla suas funcionalidades de saída do modo kernel via DLL’s. Embora esta maneira de abstrair as Syscalls tenha alguns benefícios, leva a um SO altamente integrado com muitas inter-dependências entre diferentes DLL’s. Como resultado, nos conteiners do Windows você verá vários processos do sistema em execução enquanto os containers Linux precisam executar apenas os processos de aplicativo do Docker. Para garantir que os processos do sistema e os serviços necessários estejam em execução no container Windows, em cada container é iniciado o chamado processo “smss”, com o objetivo de iniciar os processos e serviços do sistema necessários.

Arquitetura do Sistema Operacional

Além das diferenças em nível de processos do sistema, existem diferenças em nível arquitetural entre os dois sistemas, na forma com que estes oferecem suporte a containers para o Docker. Se observarmos a atual implementação do containers no Windows Server 2016, uma camada de abstração chamada “Compute Services” é implementada para abstrair os recursos de containers. O motivo disso é que a Microsoft pode alterar as API’s de container de baixo nível sem precisar alterar as API’s públicas que são chamadas pelo Docker Engine ou por outras ferramentas do cliente de container. Já no Linux, todo o tratamento dado aos containers é nativo (cgroups, Namespaces, Capabilities…). Observe as diferenças de forma gráfica na imagem abaixo:

File System

Uma terceira diferença importante entre as implementações de containers entre o Linux e o Windows é a maneira como os dois sistemas operacionais lidam com o “copy-on-write” do Docker. Como muitos aplicativos do Windows esperam uma semântica NTFS, foi difícil para a Microsoft criar uma implementação completa do sistema de arquivos para trabalhar com o Docker. A atual implementação de containers do Windows Server 2016 não contém um verdadeiro sistema de arquivos nativo para containers, na verdade a implementação atual cria um novo disco NTFS virtual para cada container. Para manter esses discos virtuais pequenos, as diferentes entradas do sistema de arquivos dentro desses discos NTFS virtuais são links simbólicos para arquivos reais no filesytem do host dos containers. Depois de alterar os arquivos em um container, esses arquivos são mantidos em um dispositivo de bloco virtual e no momento em que você deseja confirmar as alterações, ele remove essas alterações do dispositivo de bloco virtual e as transfere para um local persistente no no sistema de arquivos do host dos containers.

 

Por hoje era isto, abraço e até a próxima.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

%d blogueiros gostam disto: