Compartilhar via


Modos de isolamento

Aplica-se a: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Os contêineres do Windows oferecem dois modos distintos de isolamento de tempo de execução: isolamento process e isolamento Hyper-V. Os contêineres em execução em ambos os modos de isolamento são criados, gerenciados e funcionam de forma idêntica. Eles ainda produzem e consomem as mesmas imagens de contêiner. A diferença entre os modos de isolamento é o grau de isolamento criado entre o contêiner, o sistema operacional host e todos os outros contêineres em execução nesse host.

Isolamento do processo

Esse é o modo de isolamento "tradicional" para contêineres e é o que é descrito na visão geral dos contêineres do Windows. Com o isolamento do processo, várias instâncias de contêiner são executadas simultaneamente em um determinado host com isolamento fornecido por meio de namespace, controle de recursos e outras tecnologias de isolamento de processo. Ao executar nesse modo, os contêineres compartilham o mesmo kernel com o host, bem como entre si. Isso é aproximadamente o mesmo que como os contêineres do Linux são executados.

Um diagrama mostrando um contêiner cheio de aplicativos sendo isolados do sistema operacional e do hardware.

O que é isolado

Os contêineres do Windows virtualizam o acesso a vários namespaces do sistema operacional. Um namespace fornece acesso a informações, objetos ou recursos por meio de um nome. Por exemplo, o sistema de arquivos provavelmente é o namespace mais conhecido. Há vários namespaces no Windows que são isolados por contêiner:

  • sistema de arquivos
  • registro
  • portas de rede
  • espaço de ID de thread e processo
  • Namespace do Gerenciador de Objetos

Perfurando o limite de isolamento

Há casos em que é útil furar o limite de isolamento. Essas operações devem ser solicitadas deliberadamente pelo usuário e devem ser feitas com cuidado, pois podem comprometer a postura de segurança do contêiner. Os contêineres do Windows dão suporte ao seguinte:

No momento, os contêineres do Windows não dão suporte a:

  • memória compartilhada
  • compartilhando objetos de sincronização (semáforos, mutexes etc)
  • namespaces de processo compartilhado

Isolamento do Hyper-V

Esse modo de isolamento oferece segurança aprimorada e maior compatibilidade entre as versões do host e do contêiner. Com o isolamento Hyper-V, vários contêineres são executados simultaneamente em um host; todavia, cada contêiner é executado dentro de uma máquina virtual altamente otimizada e recebe seu próprio kernel. A presença da máquina virtual fornece isolamento no nível de hardware entre cada contêiner, bem como o host de contêiner.

Um diagrama de um contêiner sendo isolado em um sistema operacional em um computador visual que está sendo executado em um sistema operacional em um computador físico.

Exemplos de isolamento

Criar contêiner

O gerenciamento de contêineres isolados do Hyper-V com o Docker é quase idêntico ao gerenciamento de contêineres isolados por processo. Para criar um contêiner com Hyper-V isolamento usando o Docker, use o --isolation parâmetro para definir --isolation=hyperv.

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

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

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

Os contêineres do Windows em execução no Windows Server são executados por padrão com isolamento de processo. Os contêineres do Windows em execução no Windows 10 Pro e Enterprise têm o padrão de execução com o isolamento do Hyper-V. A partir da atualização de outubro de 2018 do Windows 10, os usuários que executam um host Do Windows 10 Pro ou Enterprise podem executar um contêiner do Windows com isolamento de processo. Os usuários devem solicitar diretamente o isolamento do processo usando o --isolation=process sinalizador.

Aviso

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

Você 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, você também deve garantir que as marcas de versão do host e do contêiner correspondam, caso contrário, o contêiner poderá falhar ao iniciar ou exibir um comportamento indefinido.

Explicação sobre isolamento

Este exemplo demonstra as diferenças nas capacidades de isolamento entre o isolamento de processo e o isolamento Hyper-V.

Aqui, um contêiner isolado por processo está sendo implantado e hospedará um processo de ping de execução prolongada.

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

Usando o docker top comando, o processo de ping é retornado conforme visto dentro do contêiner. O processo neste exemplo tem uma ID de 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

No host do contêiner, o get-process comando pode ser usado para retornar todos os processos de ping em execução do host. Neste exemplo, há um e a ID do processo corresponde à do contêiner. É o mesmo processo visível do contêiner e do 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 contraste, este exemplo inicia um contêiner Hyper-V isolado com um processo de ping também.

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 contêiner.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

No entanto, ao pesquisar o processo no host do contêiner, um processo de ping não é encontrado e um erro é gerado.

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

Por fim, no host, o processo vmwp é visível, que se refere à máquina virtual em execução, responsável por encapsular o contêiner e proteger os processos em execução contra o 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