Contêineres no Compute Engine,Contêineres no Compute Engine


Os contêineres de software são uma maneira conveniente de executar seus aplicativos em diversas instâncias isoladas do espaço do usuário. Você pode executar contêineres em imagens de VM públicas do Linux ou do Windows Server ou em uma imagem do Container-Optimized OS . Os contêineres permitem que seus aplicativos sejam executados com menos dependências na máquina virtual (VM) host e sejam executados de forma independente de outros aplicativos em contêineres que você implanta na mesma instância de VM. Essas características tornam os aplicativos em contêineres mais portáteis, mais fáceis de implantar e mais fáceis de manter em escala.

Este documento descreve algumas das tecnologias de contêiner mais comuns que você pode usar para executar contêineres em instâncias do Compute Engine. Você pode usar essas tecnologias na maioria das imagens de VM públicas fornecidas pelo Compute Engine.

Execute contêineres no Compute Engine quando precisar de controle total sobre seu ambiente de contêiner e suas ferramentas de orquestração de contêineres.

Como alternativa, você pode usar o Google Kubernetes Engine (GKE) para simplificar o gerenciamento de cluster e as tarefas de orquestração de contêineres para que não seja necessário gerenciar as instâncias de VM subjacentes. O GKE oferece um ambiente gerenciado para implantar, gerenciar e escalonar aplicativos em contêineres usando a infraestrutura do Google.

O ambiente do GKE consiste em várias máquinas (especificamente, instâncias do Compute Engine ) agrupadas para formar um cluster . Ao executar um cluster do GKE, você obtém os benefícios de recursos avançados de gerenciamento de cluster, como balanceamento de carga, pools de nós, reparo automático de nós, escalonamento e upgrades automáticos, além de registro e monitoramento desses Google Cloud fornece.

Saiba como criar um cluster do GKE com pools de nós que executam o Microsoft Windows Server.

Experimente você mesmo

Se você é novo no Google Cloud, crie uma conta para avaliar o desempenho do Compute Engine em cenários do mundo real. Novos clientes também recebem US$ 300 em créditos gratuitos para executar, testar e implantar cargas de trabalho.

Experimente o Compute Engine gratuitamente

Tecnologias de contêiner executadas no Compute Engine

Em geral, as instâncias do Compute Engine podem executar praticamente qualquer tecnologia ou ferramenta de contêiner. Você pode executar vários tipos diferentes de contêineres em sistemas operacionais Linux modernos. Você também pode executar o Docker no Windows Server 2016 ou posterior. A lista a seguir inclui diversas ferramentas comuns que você pode usar para executar e gerenciar aplicativos em contêineres:

  • Docker e Podman são duas tecnologias de contêiner populares que permitem executar aplicativos em contêineres.
  • Kubernetes é uma plataforma de orquestração de contêineres que você pode usar para gerenciar e dimensionar contêineres em execução em várias instâncias ou em um ambiente de nuvem híbrida.
  • Os contêineres no Compute Engine oferecem uma maneira fácil de implantar contêineres em instâncias de VM do Compute Engine ou em grupos de instâncias gerenciadas .
  • Você pode converter seus sistemas existentes em imagens LXD e executá-los em instâncias de VM do Compute Engine para obter uma solução de migração lift-and-shift. LXD roda em imagens do Ubuntu.

Além disso, você pode usar o Artifact Registry para gerenciar versões de imagens de contêiner. O Artifact Registry serve como um local central para armazenar e gerenciar imagens de contêiner antes de implantá-las no Kubernetes no Compute Engine ou em clusters do Google Kubernetes Engine .

Imagens de VM otimizadas para contêiner

O Compute Engine fornece diversas imagens de VM públicas que você pode usar para criar instâncias e executar cargas de trabalho de contêiner. Algumas dessas imagens de VM públicas têm um sistema operacional minimalista otimizado para contêineres que inclui versões mais recentes do Docker, Podman ou Kubernetes pré-instaladas. As seguintes famílias de imagens públicas foram projetadas especificamente para executar contêineres:

  • SO otimizado para contêiner do Google
    • Inclui: Docker, Kubernetes
    • Projeto de imagem: cos-cloud
    • Família de imagens: cos-stable
  • Fedora Core OS
    • Inclui: Podman, Docker
    • Projeto de imagem: fedora-coreos-cloud
    • Família de imagens: fedora-coreos-stable
  • Ubuntu
    • Inclui: LXD
    • Projeto de imagem: ubuntu-os-cloud
    • Família de imagens: ubuntu-2004-lts

Se você precisar executar ferramentas e tecnologias de contêiner específicas em imagens que não as incluem por padrão, instale essas tecnologias manualmente.

Instalando tecnologias de contêiner em suas instâncias

Para executar um único contêiner em uma instância, você pode especificar uma imagem de contêiner ao criar uma instância . O Compute Engine fornece automaticamente uma imagem atualizada do Container-Optimized OS com o Docker instalado e inicia seu contêiner quando a VM é inicializada. Para obter mais informações, consulte Implantando contêineres em VMs .

Como alternativa, você pode executar cargas de trabalho de contêiner no Compute Engine usando quaisquer tecnologias de contêiner e ferramentas de orquestração necessárias. Você pode criar uma instância a partir de uma imagem de VM pública e, em seguida, instalar as tecnologias de contêiner desejadas. Por exemplo:

Em algumas situações, você pode precisar de versões específicas dessas tecnologias para garantir que elas funcionem juntas corretamente. Por exemplo, o Kubernetes geralmente funciona melhor com versões específicas do Docker. Normalmente, você pode instalar as versões mais recentes dessas tecnologias para obter melhores resultados.

Instalando o Docker em imagens do Windows Server

O Windows Server 2016 e versões posteriores incluem suporte a contêiner. Se você planeja executar contêineres do Docker em uma instância do Windows Server, poderá instalar o Docker em uma imagem base do Windows Server ou usar imagens do Marketplace do Mirantis .

Se você deseja instalar o Docker CE na imagem base do Windows Server, siga as etapas descritas abaixo.

Comece criando uma instância do Windows Server usando uma imagem pública do Windows Server 2019 ou posterior. Para obter o melhor suporte a contêineres, recomendamos usar a versão LTSC mais recente do Windows Server . Para obter mais informações sobre LTSC, consulte Canais de serviço do Windows Server .

Instale o Docker

Instale o Docker no Windows. Para obter mais informações, consulte Preparar o Windows para contêineres . Reinicie a instância após a conclusão da instalação.

Etapas adicionais de configuração

Neste ponto você pode usar o Docker para executar contêineres na instância. Por exemplo, o comando a seguir baixa a imagem do contêiner nanoserver do Windows e executa um prompt de comando dentro de um contêiner nanoserver :

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

O MTU de rede padrão do Docker é de 1.500 bytes. Se você também configurou a MTU da rede VPC para 1.500 bytes, ignore o restante desta seção. No entanto, se você estiver usando o VPC MTU padrão de 1.460 bytes em sua rede, será necessário fazer algumas configurações adicionais em cada instância.

Defina o MTU para todas as interfaces de rede (Ethernet e vEthernet) como 1460 executando os seguintes comandos em um terminal do PowerShell em cada instância:

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1     306804     668688  Ethernet
  1460                1          0       1282  vEthernet (nat)

Mesmo depois de alterar o MTU da instância, a conectividade dos contêineres com a Internet pode ficar instável porque, por padrão, a interface de rede do contêiner também usa um MTU de 1500 . Para obter comandos para definir o MTU corretamente para cada contêiner, consulte a seção MTU do contêiner .

Talvez seja necessário reexecutar periodicamente esses comandos MTU ao configurar a rede do Docker. Para obter detalhes completos, consulte a seção de problemas conhecidos .

Executando contêineres do Windows

Há muitos recursos disponíveis para começar a usar contêineres do Windows:

  • A Microsoft fornece extensa documentação sobre contêineres do Windows .
  • Docker Hub pode ser usado como repositório para armazenar e extrair contêineres do Windows.

Problemas conhecidos com contêineres do Windows

Suspensão de uso de imagens do Windows Server 2019 para contêineres

O Google ofereceu uma família de imagens do Windows Server com o Mirantis Container Runtime (anteriormente Docker EE) pré-instalado:

  • Windows
    • Inclui: Docker
    • Projeto de imagem: windows-cloud
    • Família de imagens: windows-2019-core-for-containers

No início de 2023, a Microsoft deixou de distribuir e oferecer suporte ao Mirantis Container Runtime para Windows Server. Embora o Google tenha conseguido continuar publicando esta família de imagens até 30 de outubro de 2023, a família de imagens agora está obsoleta e todas as imagens dentro da família foram marcadas como obsoletas.

As máquinas virtuais baseadas nessas imagens criadas antes de 30 de outubro de 2023 continuarão funcionando sem interrupção. No entanto, a criação de novas instâncias com base nessas imagens falhará após essa data.

As imagens personalizadas derivadas dessas imagens anteriores a 30 de outubro de 2023 continuarão funcionando. No entanto, as imagens personalizadas não receberão automaticamente nenhuma atualização do Patch Tuesday do Windows, nem receberão versões atualizadas do Mirantis Container Runtime.

Se você quiser continuar usando imagens com o Mirantis Container Runtime pré-instalado, a Mirantis Inc oferece imagens no Google Cloud Marketplace. O custo dessas imagens VM inclui suporte e licenciamento para Mirantis Container Runtime diretamente da Mirantis. Os clientes interessados ​​em usar o Mirantis Container Runtime independente também podem baixá-lo diretamente do site da Mirantis.

Se você deseja migrar para um tempo de execução de contêiner alternativo como o Docker CE, siga as instruções acima .

Os contêineres são incompatíveis entre as versões do Windows

Os contêineres criados em versões anteriores do Windows não funcionam em instâncias do Compute Engine que executam versões mais recentes do Windows. O Docker extrai a versão do Windows Server 2019 de um contêiner por padrão. Isso significa que executar o seguinte comando em uma instância que executa o Windows Server versão 1709 ou mais recente resulta em erro:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver cmd.exe
docker: Error response from daemon: container
9a1eb8bbcba4e91792be65f3c40b5a1aee062f02fbc60a78444b47d043438069 encountered an
error during CreateContainer: failure in a Windows system call: The operating
system of the container does not match the operating system of the host.
(0xc0370101)

A página de compatibilidade da versão do contêiner do Windows da Microsoft contém mais informações. Para solucionar incompatibilidades de versão do contêiner do Windows, especifique a tag correspondente à sua versão do Windows ao extrair e executar contêineres. Por exemplo, em uma instância do Windows Server versão 20H2, use o seguinte comando para executar um prompt de comando no contêiner nanoserver versão 20H2 em vez do contêiner LTSC (1809) 2019 padrão:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

Incompatibilidades de MTU afetam a conectividade de instâncias e contêineres

Quando você cria uma rede de contêiner em uma instância do Windows usando os comandos docker network create ou New-VMSwitch , o MTU da interface de rede da instância normalmente é forçado para 1500 . A interface de rede padrão dentro de um novo contêiner Docker também normalmente usa um MTU de 1500 . Se sua rede VPC tiver um MTU de 1460 , você poderá enfrentar os seguintes problemas:

  • A sessão RDP pode ser interrompida e talvez você não consiga se reconectar. Sabe-se que isso acontece ao criar uma rede de contêineres transparente .

  • A resolução DNS dentro do contêiner pode falhar.

  • A resolução de DNS foi bem-sucedida, mas o estabelecimento de uma conexão HTTP do contêiner com a Internet pode falhar.

A solução alternativa recomendada para essas limitações requer duas etapas: definir o MTU das interfaces de rede da instância como 1460 e definir o MTU das interfaces de rede do contêiner como 1460 . Como alternativa, você pode definir o MTU da VPC como 1500 , mas isso requer a interrupção ou a migração de todas as suas VMs.

1. Configurando o MTU para as interfaces de rede da instância do Windows

Execute o seguinte comando em um terminal PowerShell na instância do Windows para definir o MTU para todas as interfaces de rede (Ethernet e vEthernet):

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Verifique se os MTUs da interface Ethernet e vEthernet da instância estão definidos como 1460 usando este comando:

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1  628295912    2613170  Ethernet
  1460                1      37793     223909  vEthernet (nat)

Se você não conseguir executar esses comandos porque não consegue mais se conectar a uma instância usando RDP, poderá conectar-se à instância por meio do console serial , iniciar um prompt cmd e executar os comandos netsh para reparar o MTU. Para evitar ter que fazer isso, recomendamos executar qualquer comando docker network ... ou New-VMSwitch como parte de um script que também executa o comando de reparo MTU.

2. Configurando o MTU para as interfaces de rede do contêiner do Windows

A MTU de um contêiner do Windows deve ser definida enquanto o contêiner estiver em execução, seja de dentro do contêiner ou da instância que hospeda o contêiner. Se o PowerShell estiver disponível em seu contêiner, você poderá executar este comando de forma interativa ou a partir de um script no contêiner para definir corretamente o MTU:

PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Ou você pode executar este comando na instância do Windows para definir o MTU para todos os contêineres em execução:

PS C:\> Get-NetIPInterface -IncludeAllCompartments |
  Where-Object InterfaceAlias -like "vEthernet*" |
  Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460

Os contêineres do Hyper-V não conseguem iniciar

No momento, os contêineres Hyper-V não são compatíveis com o Compute Engine.

O que vem a seguir

,

Os contêineres de software são uma maneira conveniente de executar seus aplicativos em diversas instâncias isoladas do espaço do usuário. Você pode executar contêineres em imagens de VM públicas do Linux ou do Windows Server ou em uma imagem do Container-Optimized OS . Os contêineres permitem que seus aplicativos sejam executados com menos dependências na máquina virtual (VM) host e sejam executados de forma independente de outros aplicativos em contêineres que você implanta na mesma instância de VM. Essas características tornam os aplicativos em contêineres mais portáteis, mais fáceis de implantar e mais fáceis de manter em escala.

Este documento descreve algumas das tecnologias de contêiner mais comuns que você pode usar para executar contêineres em instâncias do Compute Engine. Você pode usar essas tecnologias na maioria das imagens de VM públicas fornecidas pelo Compute Engine.

Execute contêineres no Compute Engine quando precisar de controle total sobre seu ambiente de contêiner e suas ferramentas de orquestração de contêineres.

Como alternativa, você pode usar o Google Kubernetes Engine (GKE) para simplificar o gerenciamento de cluster e as tarefas de orquestração de contêineres para que não seja necessário gerenciar as instâncias de VM subjacentes. O GKE oferece um ambiente gerenciado para implantar, gerenciar e escalonar aplicativos em contêineres usando a infraestrutura do Google.

O ambiente do GKE consiste em várias máquinas (especificamente, instâncias do Compute Engine ) agrupadas para formar um cluster . Ao executar um cluster do GKE, você obtém os benefícios de recursos avançados de gerenciamento de cluster, como balanceamento de carga, pools de nós, reparo automático de nós, escalonamento e upgrades automáticos, além de registro e monitoramento desses Google Cloud fornece.

Saiba como criar um cluster do GKE com pools de nós que executam o Microsoft Windows Server.

Experimente você mesmo

Se você é novo no Google Cloud, crie uma conta para avaliar o desempenho do Compute Engine em cenários do mundo real. Novos clientes também recebem US$ 300 em créditos gratuitos para executar, testar e implantar cargas de trabalho.

Experimente o Compute Engine gratuitamente

Tecnologias de contêiner executadas no Compute Engine

Em geral, as instâncias do Compute Engine podem executar praticamente qualquer tecnologia ou ferramenta de contêiner. Você pode executar vários tipos diferentes de contêineres em sistemas operacionais Linux modernos. Você também pode executar o Docker no Windows Server 2016 ou posterior. A lista a seguir inclui diversas ferramentas comuns que você pode usar para executar e gerenciar aplicativos em contêineres:

  • Docker e Podman são duas tecnologias de contêiner populares que permitem executar aplicativos em contêineres.
  • Kubernetes é uma plataforma de orquestração de contêineres que você pode usar para gerenciar e dimensionar contêineres em execução em várias instâncias ou em um ambiente de nuvem híbrida.
  • Os contêineres no Compute Engine oferecem uma maneira fácil de implantar contêineres em instâncias de VM do Compute Engine ou em grupos de instâncias gerenciadas .
  • Você pode converter seus sistemas existentes em imagens LXD e executá-los em instâncias de VM do Compute Engine para obter uma solução de migração lift-and-shift. LXD roda em imagens do Ubuntu.

Além disso, você pode usar o Artifact Registry para gerenciar versões de imagens de contêiner. O Artifact Registry serve como um local central para armazenar e gerenciar imagens de contêiner antes de implantá-las no Kubernetes no Compute Engine ou em clusters do Google Kubernetes Engine .

Imagens de VM otimizadas para contêiner

O Compute Engine fornece diversas imagens de VM públicas que você pode usar para criar instâncias e executar cargas de trabalho de contêiner. Algumas dessas imagens de VM públicas têm um sistema operacional minimalista otimizado para contêineres que inclui versões mais recentes do Docker, Podman ou Kubernetes pré-instaladas. As seguintes famílias de imagens públicas foram projetadas especificamente para executar contêineres:

  • SO otimizado para contêiner do Google
    • Inclui: Docker, Kubernetes
    • Projeto de imagem: cos-cloud
    • Família de imagens: cos-stable
  • Fedora Core OS
    • Inclui: Podman, Docker
    • Projeto de imagem: fedora-coreos-cloud
    • Família de imagens: fedora-coreos-stable
  • Ubuntu
    • Inclui: LXD
    • Projeto de imagem: ubuntu-os-cloud
    • Família de imagens: ubuntu-2004-lts

Se você precisar executar ferramentas e tecnologias de contêiner específicas em imagens que não as incluem por padrão, instale essas tecnologias manualmente.

Instalando tecnologias de contêiner em suas instâncias

Para executar um único contêiner em uma instância, você pode especificar uma imagem de contêiner ao criar uma instância . O Compute Engine fornece automaticamente uma imagem atualizada do Container-Optimized OS com o Docker instalado e inicia seu contêiner quando a VM é inicializada. Para obter mais informações, consulte Implantando contêineres em VMs .

Como alternativa, você pode executar cargas de trabalho de contêiner no Compute Engine usando quaisquer tecnologias de contêiner e ferramentas de orquestração necessárias. Você pode criar uma instância a partir de uma imagem de VM pública e, em seguida, instalar as tecnologias de contêiner desejadas. Por exemplo:

Em algumas situações, você pode precisar de versões específicas dessas tecnologias para garantir que elas funcionem juntas corretamente. Por exemplo, o Kubernetes geralmente funciona melhor com versões específicas do Docker. Normalmente, você pode instalar as versões mais recentes dessas tecnologias para obter melhores resultados.

Instalando o Docker em imagens do Windows Server

O Windows Server 2016 e versões posteriores incluem suporte a contêiner. Se você planeja executar contêineres do Docker em uma instância do Windows Server, poderá instalar o Docker em uma imagem base do Windows Server ou usar imagens do Marketplace do Mirantis .

Se você deseja instalar o Docker CE na imagem base do Windows Server, siga as etapas descritas abaixo.

Comece criando uma instância do Windows Server usando uma imagem pública do Windows Server 2019 ou posterior. Para obter o melhor suporte a contêineres, recomendamos usar a versão LTSC mais recente do Windows Server . Para obter mais informações sobre LTSC, consulte Canais de serviço do Windows Server .

Instale o Docker

Instale o Docker no Windows. Para obter mais informações, consulte Preparar o Windows para contêineres . Reinicie a instância após a conclusão da instalação.

Etapas adicionais de configuração

Neste ponto você pode usar o Docker para executar contêineres na instância. Por exemplo, o comando a seguir baixa a imagem do contêiner nanoserver do Windows e executa um prompt de comando dentro de um contêiner nanoserver :

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

O MTU de rede padrão do Docker é de 1.500 bytes. Se você também configurou a MTU da rede VPC para 1.500 bytes, ignore o restante desta seção. No entanto, se você estiver usando o VPC MTU padrão de 1.460 bytes em sua rede, será necessário fazer algumas configurações adicionais em cada instância.

Defina o MTU para todas as interfaces de rede (Ethernet e vEthernet) como 1460 executando os seguintes comandos em um terminal do PowerShell em cada instância:

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1     306804     668688  Ethernet
  1460                1          0       1282  vEthernet (nat)

Mesmo depois de alterar o MTU da instância, a conectividade dos contêineres com a Internet pode ficar instável porque, por padrão, a interface de rede do contêiner também usa um MTU de 1500 . Para obter comandos para definir o MTU corretamente para cada contêiner, consulte a seção MTU do contêiner .

Talvez seja necessário reexecutar periodicamente esses comandos MTU ao configurar a rede do Docker. Para obter detalhes completos, consulte a seção de problemas conhecidos .

Executando contêineres do Windows

Há muitos recursos disponíveis para começar a usar contêineres do Windows:

  • A Microsoft fornece extensa documentação sobre contêineres do Windows .
  • Docker Hub pode ser usado como repositório para armazenar e extrair contêineres do Windows.

Problemas conhecidos com contêineres do Windows

Suspensão de uso de imagens do Windows Server 2019 para contêineres

O Google ofereceu uma família de imagens do Windows Server com o Mirantis Container Runtime (anteriormente Docker EE) pré-instalado:

  • Windows
    • Inclui: Docker
    • Projeto de imagem: windows-cloud
    • Família de imagens: windows-2019-core-for-containers

No início de 2023, a Microsoft deixou de distribuir e oferecer suporte ao Mirantis Container Runtime para Windows Server. Embora o Google tenha conseguido continuar publicando esta família de imagens até 30 de outubro de 2023, a família de imagens agora está obsoleta e todas as imagens dentro da família foram marcadas como obsoletas.

As máquinas virtuais baseadas nessas imagens criadas antes de 30 de outubro de 2023 continuarão funcionando sem interrupção. No entanto, a criação de novas instâncias com base nessas imagens falhará após essa data.

As imagens personalizadas derivadas dessas imagens anteriores a 30 de outubro de 2023 continuarão funcionando. No entanto, as imagens personalizadas não receberão automaticamente nenhuma atualização do Patch Tuesday do Windows, nem receberão versões atualizadas do Mirantis Container Runtime.

Se você quiser continuar usando imagens com o Mirantis Container Runtime pré-instalado, a Mirantis Inc oferece imagens no Google Cloud Marketplace. O custo dessas imagens VM inclui suporte e licenciamento para Mirantis Container Runtime diretamente da Mirantis. Os clientes interessados ​​em usar o Mirantis Container Runtime independente também podem baixá-lo diretamente do site da Mirantis.

Se você deseja migrar para um tempo de execução de contêiner alternativo como o Docker CE, siga as instruções acima .

Os contêineres são incompatíveis entre as versões do Windows

Os contêineres criados em versões anteriores do Windows não funcionam em instâncias do Compute Engine que executam versões mais recentes do Windows. O Docker extrai a versão do Windows Server 2019 de um contêiner por padrão. Isso significa que executar o seguinte comando em uma instância que executa o Windows Server versão 1709 ou mais recente resulta em erro:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver cmd.exe
docker: Error response from daemon: container
9a1eb8bbcba4e91792be65f3c40b5a1aee062f02fbc60a78444b47d043438069 encountered an
error during CreateContainer: failure in a Windows system call: The operating
system of the container does not match the operating system of the host.
(0xc0370101)

A página de compatibilidade da versão do contêiner do Windows da Microsoft contém mais informações. Para solucionar incompatibilidades de versão do contêiner do Windows, especifique a tag correspondente à sua versão do Windows ao extrair e executar contêineres. Por exemplo, em uma instância do Windows Server versão 20H2, use o seguinte comando para executar um prompt de comando no contêiner nanoserver versão 20H2 em vez do contêiner LTSC (1809) 2019 padrão:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

Incompatibilidades de MTU afetam a conectividade de instâncias e contêineres

Quando você cria uma rede de contêiner em uma instância do Windows usando os comandos docker network create ou New-VMSwitch , o MTU da interface de rede da instância normalmente é forçado para 1500 . A interface de rede padrão dentro de um novo contêiner Docker também normalmente usa um MTU de 1500 . Se sua rede VPC tiver um MTU de 1460 , você poderá enfrentar os seguintes problemas:

  • A sessão RDP pode ser interrompida e talvez você não consiga se reconectar. Sabe-se que isso acontece ao criar uma rede de contêineres transparente .

  • A resolução DNS dentro do contêiner pode falhar.

  • A resolução de DNS foi bem-sucedida, mas o estabelecimento de uma conexão HTTP do contêiner com a Internet pode falhar.

A solução alternativa recomendada para essas limitações requer duas etapas: definir o MTU das interfaces de rede da instância como 1460 e definir o MTU das interfaces de rede do contêiner como 1460 . Como alternativa, você pode definir o MTU da VPC como 1500 , mas isso requer a interrupção ou a migração de todas as suas VMs.

1. Configurando o MTU para as interfaces de rede da instância do Windows

Execute o seguinte comando em um terminal PowerShell na instância do Windows para definir o MTU para todas as interfaces de rede (Ethernet e vEthernet):

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Verifique se os MTUs da interface Ethernet e vEthernet da instância estão definidos como 1460 usando este comando:

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1  628295912    2613170  Ethernet
  1460                1      37793     223909  vEthernet (nat)

Se você não conseguir executar esses comandos porque não consegue mais se conectar a uma instância usando RDP, poderá conectar-se à instância por meio do console serial , iniciar um prompt cmd e executar os comandos netsh para reparar o MTU. Para evitar ter que fazer isso, recomendamos executar qualquer comando docker network ... ou New-VMSwitch como parte de um script que também executa o comando de reparo MTU.

2. Configurando o MTU para as interfaces de rede do contêiner do Windows

A MTU de um contêiner do Windows deve ser definida enquanto o contêiner estiver em execução, seja de dentro do contêiner ou da instância que hospeda o contêiner. Se o PowerShell estiver disponível em seu contêiner, você poderá executar este comando de forma interativa ou a partir de um script no contêiner para definir corretamente o MTU:

PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Ou você pode executar este comando na instância do Windows para definir o MTU para todos os contêineres em execução:

PS C:\> Get-NetIPInterface -IncludeAllCompartments |
  Where-Object InterfaceAlias -like "vEthernet*" |
  Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460

Os contêineres do Hyper-V não conseguem iniciar

No momento, os contêineres Hyper-V não são compatíveis com o Compute Engine.

O que vem a seguir