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.

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.

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