Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
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:
- mapeando arquivos ou volumes compartilhados do host para o contêiner
- mapeando um canal nomeado do host para o contêiner
- mapeando uma porta do host para o contêiner
- personalizando e compartilhando o namespace de rede
- compartilhamento da visibilidade do dispositivo host no contêiner
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.
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