Modos de Isolamento

Os contentores Docker do Windows oferecem dois modos distintos de isolamento runtime: process e Hyper-V. Os contentores em execução em ambos os modos de isolamento são criados, geridos e funcionam de forma idêntica. Eles também produzem e consomem as mesmas imagens de contentor. A diferença entre os modos de isolamento é em que um grau de isolamento é criado entre o contentor, o sistema operacional do host e todos os outros contentores em execução nesse host.

Isolamento de Processo

Este é o modo de isolamento “tradicional” para contentores e é descrito na visão geral dos contentores do Windows . Com o isolamento do processo, várias instâncias do contentor são executadas simultaneamente em um determinado host, com isolamento fornecido por meio de namespace, controle de recursos e tecnologias de isolamento de processo. Ao executar neste modo, os contentores compartilham o mesmo kernel com o host e também entre si. Isso é aproximadamente igual ao modo como os contentores do Linux são executados.

Um diagrama que mostra um contêiner cheio de aplicativos sendo isolado do sistema operacional e do hardware.

Isolamento Hyper-V

Este modo de isolamento oferece segurança aprimorada e compatibilidade mais ampla entre as versões de host e contentor. Com o isolamento do Hyper-V, várias instâncias de contentor são executadas simultaneamente em um host; no entanto, cada contentor é executado em uma máquina virtual altamente otimizada e obtém efetivamente seu próprio kernel. A presença da máquina virtual fornece isolamento em nível de hardware entre cada contentor, bem como o host do contentor.

Um diagrama de um contêiner sendo isolado em um sistema operacional em uma máquina visual que está sendo executada em um sistema operacional em uma máquina física.

Exemplos de isolamento

Criar um contentor

A gestão de contentores isolados do Hyper-V com Docker é quase idêntico à gestão de contentores isolados do processo. Para criar um contentor com isolamento Hyper-V usando Docker, use o parâmetro --isolation para definir --isolation=hyperv.

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Para criar um contentor com isolamento de processo por meio do Docker, use o parâmetro --isolation para definir --isolation=process.

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Os contentores do Windows em execução no Windows Server são executados por padrão com isolamento de processo. Os contentores do Windows em execução no Windows 10 Pro e Enterprise usam como padrão o isolamento do Hyper-V. A partir da atualização do Windows 10 de outubro de 2018, os usuários que executam um host Windows 10 Pro ou Enterprise podem executar um contentor do Windows com isolamento de processo. Os usuários devem solicitar diretamente o isolamento do processo usando o parâmetro --isolation=process.

Aviso

A execução com isolamento de processo no Windows 10 Pro e Enterprise destina-se ao desenvolvimento / teste. Seu host deve estar executando o Windows 10 build 17763+ e deve ter uma versão Docker com Engine 18.09 ou mais recente.

Deve continuar a usar o Windows Server como host para implantações de produção. Ao usar esse recurso no Windows 10 Pro e Enterprise, também deve garantir que as tags de versão do host e do contentor correspondam, caso contrário, o contentor pode falhar ao iniciar ou exibir um comportamento indefinido.

Explicação de isolamento

Este exemplo demonstra as diferenças nos recursos de isolamento entre o processo e o isolamento do Hyper-V.

Aqui, um contentor de processo isolado está sendo implantado e hospedará um processo de ping de longa execução. cmd

docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Usando o comando docker top, o processo de ping é retornado conforme visto dentro do contentor. O processo neste exemplo tem um ID de 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

No host do contentor, o comando get-process pode ser usado para retornar qualquer processo de ping em execução do host. Neste exemplo, há um, e o id do processo corresponde ao do contentor. É o mesmo processo visível no contentor e no host.

get-process -Name ping

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
     67       5      820       3836 ...71     0.03   3964   3 PING

Para contrastar, este exemplo também inicia um contentor isolado pelo Hyper-V com um processo de ping.

docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Da mesma forma, docker top pode ser usado para retornar os processos em execução do contentor.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

No entanto, ao pesquisar o processo no host do contentor, um processo de ping não é encontrado e um erro é produzido.

get-process -Name ping

get-process : Cannot find a process with the name "ping". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process -Name ping
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (ping:String) [Get-Process], ProcessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Finalmente, no host, o processo vmwp é visível, que é a máquina virtual em execução que encapsula o contentor em execução e protege os processos em execução do sistema operacional do host.

get-process -Name vmwp

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
   1737      15    39452      19620 ...61     5.55   2376   0 vmwp

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *