Configurando opções para executar seu contêiner


Antes de começar

  • Se você não estiver familiarizado com contêineres, leia Contêineres no Compute Engine .
  • Se você não estiver familiarizado com o Docker, leia a documentação do Docker .
  • Leia sobre como implantar contêineres no Compute Engine .
  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

Ao criar uma instância ou um modelo de instância para usar na implantação de contêineres em VMs e MIGs , especifique a configuração do contêiner usando o console do Google Cloud ou a CLI do Google Cloud.

As seções a seguir descrevem como configurar opções para instâncias de VM, mas você também pode configurar as opções a seguir ao criar um modelo de instância. Use o console do Google Cloud ou a CLI do Google Cloud para configurar opções para instâncias de VM em um modelo de instância.

Console

  1. Acesse a página Criar um modelo de instância .

    Vá para Criar um modelo de instância .

  2. Na seção Contêiner , marque a caixa de seleção Implantar uma imagem de contêiner nesta instância de VM e expanda Opções avançadas de contêiner .

gcloud

  1. Na CLI do Google Cloud, use o comando gcloud compute instance-templates create-with-container conforme mostrado nos exemplos a seguir.

Especificando uma política de reinicialização

Você pode definir uma política de reinicialização para especificar se um contêiner deve ser reiniciado ao sair. A política padrão é sempre reiniciar. Você também pode definir a política para reiniciar em caso de falha ou para nunca reiniciar.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Na seção Política de reinicialização , selecione a política de reinicialização do contêiner.
    3. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-restart-policy para especificar uma política de reinicialização do contêiner:

  • always (padrão)
  • on-failure
  • never

O exemplo a seguir inicia um contêiner com política de reinicialização on-failure , o que significa que a reinicialização só acontece quando o código de saída do contêiner é diferente de zero:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-restart-policy on-failure

Use o comando gcloud compute instances update-container com a sinalização --container-restart-policy para a política de reinicialização em um contêiner em execução em uma VM.

Executando um contêiner em modo privilegiado

Você pode executar um contêiner em modo privilegiado para permitir acesso a todos os dispositivos no host. Os contêineres são executados como "sem privilégios" por padrão e não têm permissão para acessar nenhum dispositivo.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Selecione Executar como privilegiado .
    3. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-privileged para executar um contêiner com privilégio de tempo de execução. O exemplo a seguir inicia um contêiner busybox em modo privilegiado:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-privileged

Use o comando gcloud compute instances update-container com a sinalização --container-privileged para atualizar um contêiner em uma VM. Use o sinalizador --no-container-privileged para desativar o modo privilegiado.

Alocando um buffer para STDIN no tempo de execução do contêiner

Você pode alocar um buffer para STDIN no tempo de execução do contêiner para manter o fluxo STDIN aberto em um contêiner. Se não estiver definido, as leituras de STDIN no contêiner sempre resultam em EOF .

Junto com a alocação de um pseudo-TTY , é necessário manter o fluxo STDIN aberto para estabelecer um shell interativo no contêiner e para que o contêiner receba sua entrada padrão de um canal.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Selecione Alocar um buffer para STDIN .
    3. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-stdin para alocar um buffer para STDIN no tempo de execução do contêiner. O exemplo a seguir inicia um contêiner e mantém seu STDIN aberto:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-stdin

Use o comando gcloud compute instances update-container com a sinalização --container-stdin para atualizar um contêiner em uma VM. Use o sinalizador --no-container-stdin para desativar a alocação de um buffer para STDIN .

Alocando um pseudo-TTY

A alocação de um pseudo-TTY para um contêiner é necessária para estabelecer um shell interativo no contêiner (junto com a alocação de um buffer para STDIN ).

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Selecione Alocar um pseudo-TTY .
    3. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-tty para alocar um pseudo-TTY. O exemplo a seguir inicia um contêiner e aloca um pseudo-TTY:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-stdin \
  --container-tty

Use o comando gcloud compute instances update-container com a sinalização --container-tty para atualizar um contêiner em uma VM. Use o sinalizador --no-container-tty para não alocar um pseudo-TTY.

Substituindo o comando padrão para executar na inicialização do contêiner

O ENTRYPOINT de uma imagem de contêiner especifica qual executável será executado quando o contêiner for iniciado e permite executar o contêiner como se fosse aquele binário.

Você pode substituir o comando ENTRYPOINT da imagem do contêiner.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. No campo Comando , insira um único comando executável sem parâmetros — por exemplo, uptime .
    3. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-command para substituir a imagem do contêiner ENTRYPOINT . O exemplo a seguir executa o comando uptime em um contêiner busybox para exibir o tempo desde a última inicialização:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-command "uptime"

Use o comando gcloud compute instances update-container com a sinalização --container-command para atualizar um comando para um contêiner em uma VM.

Use o sinalizador --clear-container-command com o comando update-container para limpar o comando padrão do contêiner atualizado.

Passando argumentos para o comando ENTRYPOINT do contêiner

Você pode passar (acrescentar) argumentos ao comando ENTRYPOINT do contêiner ou substituir o comando CMD do contêiner padrão.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Na seção Argumentos , clique em Adicionar argumento .
    3. Insira um argumento de comando para cada caixa.
    4. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-arg para passar argumentos para um comando ENTRYPOINT de imagem de contêiner. Use um sinalizador separado para cada argumento.

O exemplo a seguir executa o comando /bin/ash com os argumentos -c 'ls -l' em um contêiner que foi configurado para executar automaticamente o busybox:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-command "/bin/ash" \
  --container-arg="-c" \
  --container-arg="ls -l"

Use o comando gcloud compute instances update-container com as sinalizações --container-arg para atualizar argumentos de comando para um contêiner em execução em uma VM. A atualização substitui toda a lista de argumentos pela nova lista.

Use o sinalizador --clear-container-args com o comando update-container para remover todos os argumentos da declaração do contêiner.

Configurando opções do driver de log

Se precisar configurar as opções do driver de log, você poderá criar um script de inicialização da VM para atualizar o arquivo de configuração do Docker com as opções de log necessárias. Essas opções se aplicam a todos os contêineres executados na VM e que não especificam opções de driver de log.

Por exemplo, o script de inicialização a seguir define várias opções – incluindo uma opção para limitar o tamanho do log do contêiner – e reinicia o Docker na VM:

cat <<EOF > /etc/docker/daemon.json
{
  "live-restore": true,
  "storage-driver": "overlay2",
  "log-opts": {
    "max-size": "10m"
  }
}
EOF
systemctl restart docker

Configurando variáveis ​​de ambiente

Você pode definir variáveis ​​de ambiente em um contêiner. Somente o último valor de KEY é obtido quando a KEY é repetida mais de uma vez.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Na seção Variáveis ​​de ambiente , clique em Adicionar variável .
    3. Adicione ou remova variáveis ​​de ambiente conforme necessário, uma para cada linha.
    4. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-env para definir variáveis ​​de ambiente em um contêiner. O exemplo a seguir define três variáveis ​​de ambiente: HOME , MODE e OWNER :

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-env HOME=/home,MODE=test,OWNER=admin

Use o sinalizador --container-env-file para definir variáveis ​​de ambiente de um arquivo local. O exemplo a seguir define as duas variáveis ​​de ambiente do arquivo env.txt :

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-env-file ./env.txt

O conteúdo do arquivo env.txt é:

# this is a comment
HOME=/home
MODE=test
OWNER=admin

Use o comando gcloud compute instances update-container com a sinalização --container-env ou --container-env-file para atualizar variáveis ​​de ambiente para um contêiner em uma VM. Isso atualiza quaisquer variáveis ​​presentes na declaração do contêiner da instância de VM. Variáveis ​​que não estão na declaração do contêiner são adicionadas.

Use a sinalização --remove-container-env para remover variáveis ​​de ambiente ao atualizar um contêiner em uma VM. O exemplo a seguir remove as variáveis ​​de ambiente chamadas MODE e OWNER :

gcloud compute instances update-container busybox-vm \
  --remove-container-env MODE,OWNER

Se uma variável de ambiente especificada não existir, ela será ignorada silenciosamente.

Montando um diretório host como um volume de dados

Você pode montar um diretório de uma VM host em um contêiner.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Na seção Montagens de volume , clique em Adicionar volume .
    3. Na lista Tipo de volume , selecione Diretório e faça o seguinte:

      • No campo Caminho de montagem , especifique um caminho de montagem em uma estrutura de diretório de contêiner na qual montar um diretório host.
      • No campo Caminho do host , especifique um caminho de host para o diretório de host a ser montado.
      • Na lista Modo , especifique se deseja montar o diretório no modo leitura/gravação ou somente leitura.
    4. Para confirmar os detalhes do contêiner, clique em Selecionar .

  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-mount-host-path para montar um diretório de VM host em um contêiner. O exemplo a seguir monta o diretório host /tmp no contêiner em /logs no modo leitura/gravação:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-mount-host-path mount-path=/logs,host-path=/tmp,mode=rw

Especifique mode=ro para montar um diretório host em modo somente leitura.

Use o comando gcloud compute instances update-container com a sinalização --container-mount-host-path para atualizar montagens de diretório de host em um contêiner. Use o sinalizador --remove-container-mounts para remover montagens de volume com os caminhos de montagem especificados. O exemplo a seguir remove uma montagem de caminho de host com mount-path=/logs :

gcloud compute instances update-container busybox-vm \
  --remove-container-mounts /logs

Se o caminho de montagem especificado não existir, ele será ignorado silenciosamente.

Montando o sistema de arquivos tmpfs como um volume de dados

Você pode montar um sistema de arquivos tmpfs vazio em um contêiner.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Na seção Montagens de volume , clique em Adicionar volume .
    3. Na lista Tipo de volume , selecione TmpFS .
    4. No campo Caminho de montagem , especifique um caminho de montagem em uma estrutura de diretório de contêiner onde você gostaria de montar um volume TmpFS.
    5. Na lista Modo , especifique se deseja montar o volume TmpFS no modo leitura/gravação ou somente leitura.
    6. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o sinalizador --container-mount-tmpfs para montar um sistema de arquivos tmpfs vazio em um contêiner. O exemplo a seguir monta um sistema de arquivos tmpfs no contêiner em /cache no modo leitura/gravação:

gcloud compute instances create-with-container busybox-vm \
  --container-image docker.io/busybox:1.27 \
  --container-mount-tmpfs mount-path=/cache
 

Use o comando gcloud compute instances update-container com a sinalização --container-mount-tmpfs para atualizar montagens tmpfs em um contêiner. Use o sinalizador --remove-container-mounts para remover uma montagem tmpfs com o caminho de montagem especificado durante a atualização. O exemplo a seguir remove a montagem tmpfs com mount-path=/cache :

gcloud compute instances update-container busybox-vm \
  --remove-container-mounts /cache

Se o caminho de montagem especificado não existir, ele será ignorado silenciosamente.

Montar um disco permanente como volume de dados

Com o Container-Optimized OS 69 ou posterior, você pode montar discos permanentes de uma VM host em um contêiner.

Pré-requisitos

  • O disco deve ter um sistema de arquivos ext4 ou não ter nenhum sistema de arquivos. Sem sistema de arquivos inicial, o agente de inicialização do contêiner formata o disco para ext4 e somente leitura/gravação e montagem são suportadas.
  • O disco deve estar anexado à VM.
  • São suportados dispositivos sem partições e partições. Para montagens de partição, o disco não pode ficar em branco; ele deve conter uma tabela de partição existente.

Console

  1. Vá para a página Criar uma instância .

    Vá para Criar uma instância

  2. Na seção Contêiner , clique em Implantar contêiner .

  3. Na página Configurar contêiner , faça o seguinte:

    1. Especifique um nome de imagem de contêiner.
    2. Na seção Montagens de volume , clique em Adicionar volume .
    3. Na lista Tipo de volume , selecione Disco .
    4. No campo Caminho de montagem , especifique um caminho na estrutura de diretórios do contêiner onde você gostaria de montar o disco permanente.
    5. Na lista Nome do disco , selecione um disco existente para montar.
    6. No campo Partição , especifique o número da partição a ser montada se o disco tiver uma tabela de partições. Se o disco não possuir partições, deixe este campo em branco.
    7. Na lista Modo , especifique se deseja montar o diretório no modo leitura/gravação ou somente leitura.
    8. Para confirmar os detalhes do contêiner, clique em Selecionar .
  4. Continue com o processo de criação da VM.

gcloud

Use o comando gcloud compute instances create-with-container ou o comando gcloud compute instances update-container com a sinalização --container-mount-disk para montar um disco permanente em um contêiner.

O exemplo a seguir monta dois discos, my-data-disk e my-scratch-disk , no contêiner nos caminhos de montagem /disks/data-disk e /disks/scratch-disk .

gcloud compute instances create-with-container busybox-vm \
  --disk name=my-data-disk \
  --create-disk name=my-scratch-disk,auto-delete=yes,image=ubuntu-1710-artful-v20180315,image-project=ubuntu-os-cloud \
  --container-image docker.io/busybox:1.27 \
  --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=ro \
  --container-mount-disk mount-path="/disks/scratch-disk",name=my-scratch-disk

Observe que o sinalizador --disk anexa my-data-disk , o sinalizador --create-disk cria e anexa my-scatch-disk e o sinalizador --container-mount-disk monta os discos anexados ao contêiner. Como um mode não é especificado para my-scratch-disk , esse disco é montado no contêiner no modo leitura/gravação por padrão.

Use o comando gcloud compute instances update-container com a sinalização --container-mount-disk para montar discos anexados adicionais ou para modificar montagens de disco existentes.

Use o sinalizador --remove-container-mounts para remover uma montagem de volume de disco com o caminho de montagem especificado. O exemplo a seguir altera o modo de montagem de my-data-disk para leitura/gravação e remove a montagem do disco com mount-path="/disks/scratch-disk" .

gcloud compute instances update-container busybox-vm \
  --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=rw \
  --remove-container-mounts "/disks/scratch-disk"

Se o caminho de montagem que você passa para o sinalizador --remove-container-mounts não existir, ele será ignorado silenciosamente.

Publicação de portas de contêiner

VMs com contêineres usam o modo de rede do host , onde um contêiner compartilha a pilha de rede do host e todas as interfaces do host ficam disponíveis para o contêiner.

As portas de contêiner têm um mapeamento individual para as portas da VM host. Por exemplo, uma porta 80 de contêiner é mapeada para a porta 80 da VM do host. O Compute Engine não oferece suporte à sinalização de publicação de porta ( -p ), e você não precisa especificá-la para que o mapeamento funcione.

Para publicar as portas de um contêiner, configure regras de firewall para permitir o acesso às portas da instância de VM host. As portas correspondentes do container são acessíveis automaticamente, de acordo com as regras do firewall.

Exemplo: Publicando a porta 80 para um contêiner NGINX

O exemplo a seguir mostra como criar uma instância de VM com um contêiner NGINX e permitir o tráfego para a porta 80 do contêiner.

  1. Crie uma instância de VM com um contêiner NGINX:

    gcloud compute instances create-with-container nginx-vm \
     --container-image gcr.io/cloud-marketplace/google/nginx1:1.15 \
     --tags http-server
    

    O contêiner compartilha a pilha de rede da VM host e a porta 80 do contêiner é publicada na porta 80 da VM host. A tag http-server é usada como uma tag de destino para a regra de firewall, criada na próxima etapa.

  2. Crie uma regra de firewall para ativar conexões com a porta 80 da instância de VM. A regra de firewall a seguir permite conexões HTTP a instâncias de VM com a tag http-server .

    gcloud compute firewall-rules create allow-http \
     --allow tcp:80 --target-tags http-server
    

    O contêiner começa automaticamente a receber tráfego na porta 80. Não é necessário realizar nenhuma configuração adicional.

    Você pode criar regras de firewall para combinações de protocolo:porta da VM do host em que o protocolo é tcp ou udp . Estas regras regem efetivamente o acesso de fora da VM às portas de contentores correspondentes.

O que vem a seguir