Como configurar opções para executar o contêiner

Quando você cria uma instância ou um modelo de instância para usar na execução de contêineres no Compute Engine, especifique a configuração do contêiner por meio do Console do Google Cloud Platform ou da ferramenta de linha de comando gcloud.

Antes de começar

Como especificar a política de reinicialização

Você pode definir a política de reinicialização para especificar se quer reiniciar um contêiner na saída. A política padrão é sempre reiniciar. Também é possível definir a política para reiniciar em caso de falha ou para nunca fazer isso.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, especifique a política de reinicialização desejada.

gcloud

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

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

O exemplo a seguir inicia um contêiner com uma política de reinicialização on-failure, o que significa que a reinicialização acontece apenas 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 reiniciar a política de um contêiner que está sendo executado em uma VM.

Como executar um contêiner em modo privilegiado

Você pode executar um contêiner em modo privilegiado para permitir acesso a todos os dispositivos no host. Por padrão, os contêineres são executados como "não privilegiados" e não têm permissão para acessar qualquer dispositivo.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Marque Executar como usuário com privilégios.

gcloud

Use a sinalização --container-privileged para executar um contêiner com privilégio de ambiente de execução. O exemplo a seguir inicia o contêiner busybox no 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 a sinalização --no-container-privileged para desativar o modo privilegiado.

Como alocar um buffer para STDIN no ambiente de execução do contêiner

Você pode alocar um buffer para a STDIN no ambiente de execução do contêiner para manter o fluxo na STDIN aberto em um contêiner. Se isso não for definido, as leituras da STDIN no contêiner sempre resultarão em EOF.

Além de alocar um pseudo-TTY, é necessário manter o fluxo na STDIN aberto para estabelecer um shell interativo no contêiner e para que esse contêiner seja capaz de receber a respectiva entrada padrão de um pipeline.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Marque Alocar um buffer para a STDIN.

gcloud

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

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 a sinalização --no-container-stdin para desativar a alocação de um buffer para a STDIN.

Como alocar um pseudo-TTY

É necessário alocar um pseudo-TTY a um contêiner para estabelecer um shell interativo, além de alocar um buffer para a STDIN.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Marque Alocar um pseudo-TTD.

gcloud

Use a sinalização --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 a sinalização --no-container-tty para não alocar um pseudo-TTY.

Como modificar o comando padrão para executar durante a inicialização do contêiner

O ENTRYPOINT de uma imagem de contêiner especifica o executável a ser usado quando o contêiner é iniciado e permite executar o contêiner como se fosse o binário.

É possível modificar o comando ENTRYPOINT da imagem do contêiner.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Na caixa Comando, insira um único comando executável sem parâmetros. Por exemplo, uptime.

gcloud

Use a sinalização --container-command para modificar o ENTRYPOINT da imagem do contêiner. O exemplo a seguir executa o comando uptime no 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 de um contêiner em uma VM.

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

Como transmitir argumentos para o comando ENTRYPOINT do contêiner

É possível transmitir ou anexar argumentos ao comando ENTRYPOINT do contêiner ou substituir o comando CMD do contêiner padrão.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Em Argumentos do comando, clique em Adicionar argumento.
  6. Insira um argumento de comando por caixa.

gcloud

Use a sinalização --container-arg para passar argumentos para o comando ENTRYPOINT da imagem de contêiner. Use uma sinalização separada para cada argumento.

No exemplo a seguir, o comando /bin/ash é executado com os argumentos -c ‘ls -l’ em um contêiner que foi configurado para executar o busybox automaticamente:

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 os argumentos de comando de um contêiner executado em uma VM. A atualização substitui a lista de argumentos inteira por uma nova lista.

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

Como definir variáveis de ambiente

Você pode definir variáveis de ambiente em um contêiner. Apenas o último valor de [KEY] é usado quando [KEY] é repetido mais de uma vez.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Em Variáveis de ambiente, clique em Adicionar variável.
  6. Adicione ou remova as variáveis de ambiente conforme necessário, uma por linha.

gcloud

Use a sinalização --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 a sinalização --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 as sinalizações --container-env ou --container-env-file para atualizar variáveis de ambiente de um contêiner em uma VM. Isso atualizará as variáveis presentes na declaração de contêiner da instância de VM. As 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 denominadas 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 discretamente.

Como montar um diretório de host como um volume de dados

É possível ativar um diretório de uma VM de host em um contêiner.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Em Montagens do diretório do host, clique em Adicionar volume.
  6. Especifique:

    • um caminho de montagem: caminho em uma estrutura de diretório de contêiner onde você gostaria de montar um diretório de host;
    • um caminho do host: caminho para o diretório de host que você gostaria de montar;
    • se você quer montar o diretório no modo de leitura e gravação ou somente leitura.

gcloud

Use a sinalização --container-mount-host-path para montar um diretório de VM de host em um contêiner. O exemplo a seguir monta o diretório de host /tmp no contêiner em /logs no modo de leitura e 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 de host no modo somente leitura.

Use o comando gcloud compute instances update-container com a sinalização --container-mount-host-path para atualizar as montagens de diretórios de host em um contêiner. Use a sinalização --remove-container-mounts para remover as montagens de volumes com os caminhos de montagem especificados durante a atualização. 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á discretamente ignorado.

Como montar o sistema de arquivos tmpfs como um volume de dados

É possível ativar um sistema de arquivos tmpfs vazio em um contêiner.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Em Montagens de tmpfs, clique em Adicionar volume.
  6. Especifique um caminho de montagem: caminho em uma estrutura de diretório de contêiner onde você gostaria de montar um volume tmpfs. O volume tmpfs será montado no modo de leitura e gravação.

gcloud

Use a sinalização --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 de leitura e 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 as montagens de tmpfs em um contêiner. Use a sinalização --remove-container-mounts para remover uma montagem de tmpfs com o caminho de montagem especificado durante a atualização. O exemplo a seguir remove a montagem de 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á discretamente ignorado.

Como montar um disco permanente como um volume de dados

Com o Container-Optimized OS 69 ou mais recente, é possível ativar discos permanentes de uma VM de host em um contêiner.

Pré-requisitos

  • O disco precisa ter um sistema de arquivos ext4 ou não ter sistema de arquivos. Sem um sistema de arquivos inicial, o agente de inicialização do contêiner formata o disco como ext4 e somente o anexo de leitura/gravação e a montagem são compatíveis.
  • O disco precisa estar conectado à VM.
  • Ambos os dispositivos e partições sem partição são compatíveis. Para montagens de partições, o disco não pode estar em branco. Ele precisa conter uma tabela de partição existente.

Console

  1. Acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique no botão Criar instância para criar uma nova instância.
  3. Na seção Contêiner, marque Implantar imagem do contêiner.
  4. Clique em Opções avançadas de contêiner.
  5. Em Montagens de volumes, clique em Adicionar volume.
  6. Em Tipo de volume, selecione Disk.
  7. Especifique um Caminho de montagem, um caminho na estrutura do diretório de contêiner onde você gostaria de montar o disco permanente.
  8. Em Nome do disco, selecione um disco existente para montar ou Anexar novo disco.
  9. Se o disco tiver uma tabela de partição, especifique o número da partição a ser montado. Deixe este campo em branco se o disco não tiver partições.
  10. Especifique se você quer ativar o diretório no modo de leitura e gravação ou somente leitura.

gcloud

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

No exemplo a seguir, são ativados dois discos, my-data-disk e my-scratch-disk, no contêiner nos caminhos de ativação /disks/data-disk e /disks/scratch-disk.

gcloud beta 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 a sinalização --disk anexa my-data-disk, a sinalização --create-disk cria e anexa my-scatch-disk e as sinalizações --container-mount-disk montam os discos anexados no contêiner. Como um mode não está especificado para my-scratch-disk, esse disco é montado no contêiner no modo de leitura/gravação por padrão.

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

Use a sinalização --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 de disco com mount-path="/disks/scratch-disk".

gcloud beta 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 a sinalização --remove-container-mounts não existir, ele será silenciosamente ignorado.

Como publicar portas de contêineres

As VMs com contêineres usam o modo de rede do host em que um contêiner compartilha a pilha de rede do host, e todas as interfaces desse host estão disponíveis para o contêiner.

As portas do contêiner são mapeadas de uma para uma com relação às portas da VM do host. Por exemplo, a porta 80 do contêiner está associada à porta 80 da VM. Você não precisa especificar a sinalização de publicação da porta (-p) 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 da VM do host. As portas correspondentes do contêiner ficarão acessíveis automaticamente, de acordo com as regras do firewall.

Exemplo: publicação da porta 80 de um contêiner NGINX

A seguir, você verá um exemplo de 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.12 \
        --tags http-server
    

    O contêiner compartilha a pilha de rede da VM do host e a porta 80 do contêiner é publicada para a porta 80 da VM do 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 permitir conexões com a porta 80 da instância da VM. A regra de firewall a seguir permite fazer conexões HTTP com as 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çará a receber o tráfego automaticamente na porta 80. Você não precisará fazer qualquer configuração adicional.

    Você também pode criar regras de firewall para combinações de protocolo/porta de VM do host cujo protocolo é tcp ou udp. Essas regras controlarão efetivamente o acesso de fora da VM às portas correspondentes do contêiner.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine