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

Ao criar uma instância ou um modelo de instância para executar contêineres no Compute Engine, especifique a configuração do contêiner. Para isso, use o Console do Google Cloud Platform ou a ferramenta de linha de comando gcloud.

Antes de começar

Como especificar uma política de reinicialização

Defina uma política de reinicialização para especificar se um contêiner será reiniciado na saída. A política padrão é sempre reiniciar. Também é possível definir políticas para reiniciar em caso de falha ou para nunca fazer isso.

Console

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

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

  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 pretendida.

gcloud

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

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

No exemplo a seguir, um contêiner com a política de reinicialização on-failure é iniciado. Ela determina que a reinicialização acontecerá apenas quando o código de saída do contêiner for 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 definir a política de reinicialização em um contêiner executado em uma VM.

Como executar um contêiner no modo privilegiado

Execute um contêiner no modo privilegiado para permitir o 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 nenhum dispositivo.

Console

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

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

  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. No exemplo a seguir, um contêiner busybox em modo privilegiado é iniciado:

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 do STDIN no ambiente de execução do contêiner

É possível alocar um buffer do STDIN no ambiente de execução do contêiner para que o fluxo no fique aberto em um contêiner. Se essa configuração não for definida, as leituras do STDIN no contêiner sempre terão EOF como resultado.

Além de alocar um pseudo-TTY, é necessário manter o fluxo do STDIN aberto para estabelecer um shell interativo no contêiner e para que o contêiner receba a entrada padrão de um pipe.

Console

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

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

  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 o STDIN.

gcloud

Use a sinalização --container-stdin para alocar um buffer do STDIN no ambiente de execução do contêiner. No exemplo a seguir, um contêiner é iniciado, e o STDIN dele é 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 a sinalização --no-container-stdin para desativar a alocação de buffer no STDIN.

Como alocar um pseudo-TTY

Além da alocação de um buffer do STDIN, também é necessário alocar um pseudo-TTY em um contêiner para estabelecer um shell interativo no contêiner.

Console

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

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

  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-TTY.

gcloud

Use a sinalização --container-tty para alocar um pseudo-TTY. No exemplo a seguir, um contêiner é iniciado, e um pseudo-TTY é alocado:

 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. Se não quiser alocar um pseudo-TTY, use a sinalização --no-container-tty.

Como modificar o comando padrão a ser executado na inicialização do contêiner

Com o ENTRYPOINT de uma imagem de contêiner, você especifica o executável a ser usado quando o contêiner é iniciado. Além disso, você executa o contêiner como se ele fosse o binário.

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

Console

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

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

  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. No exemplo a seguir, o comando uptime é executado em um contêiner busybox para exibir o tempo decorrido 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 ao comando ENTRYPOINT do contêiner

É possível transmitir ou anexar argumentos ao comando ENTRYPOINT do contêiner ou modificar o comando CMD do contêiner padrão (páginas em inglês).

Console

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

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

  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 transmitir 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 argumentos em um contêiner executado em uma VM. A atualização substitui toda a lista de argumentos pela 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

É possível 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 VM".

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

  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. No exemplo a seguir, três variáveis de ambiente são definidas: 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 a partir de um arquivo local. No exemplo a seguir, as duas variáveis de ambiente do arquivo env.txt são definidas:

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 as variáveis de ambiente de um contêiner em uma VM. Isso atualiza todas as variáveis na declaração do contêiner da instância de VM. As variáveis que não estiverem na declaração do contêiner serão adicionadas.

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

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.

Como ativar 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 VM".

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

  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 o seguinte:

    • Um caminho de ativação, que está em uma estrutura de diretórios de contêiner em que um diretório de host será ativado.
    • Um caminho de host para o diretório de host a ser ativado.
    • Se você quer ativar o diretório no modo de leitura e gravação ou somente leitura.

gcloud

Use a sinalização --container-mount-host-path para ativar um diretório da VM de host em um contêiner. No exemplo a seguir, o diretório de host /tmp é ativado 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 ativar 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 ativações do diretório de host em um contêiner. Use a sinalização --remove-container-mounts para remover as ativações de volume com os caminhos de ativação especificados. No exemplo a seguir, uma ativação de caminho de host com mount-path=/logs é removida:

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

Se o caminho de ativação especificado não existir, ele será ignorado.

Como ativar 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 VM".

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

  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 Ativações de tmpfs, clique em Adicionar volume.
  6. Especifique um caminho de ativação, que está em uma estrutura de diretórios de contêiner em que você quer ativar um volume tmpfs. O volume tmpfs é ativado no modo de leitura e gravação.

gcloud

Use a sinalização --container-mount-tmpfs para ativar um sistema de arquivos tmpfs vazio em um contêiner. No exemplo a seguir, um sistema de arquivos tmpfs é ativado 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 ativações tmpfs em um contêiner. Use a sinalização --remove-container-mounts para remover uma ativação tmpfs com o caminho de ativação especificado durante a atualização. No exemplo a seguir, a ativação tmpfs com mount-path=/cache é removida:

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

Se o caminho de ativação especificado não existir, ele será ignorado.

Como ativar um disco permanente como um volume de dados

Com o Container-Optimized OS 69 ou superior, é 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 a ativação e anexo de leitura e gravação são compatíveis.
  • O disco precisa estar anexado à VM.
  • Ambos os dispositivos e partições sem partição são compatíveis. Nas ativações de partição, o disco não pode estar em branco. Ele precisa conter uma tabela de partição atual.

Console

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

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

  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 Ativações de volumes, clique em Adicionar volume.
  6. Em Tipo de volume, selecione Disk.
  7. Especifique um Caminho de ativação, que está na estrutura de diretórios de contêiner em que você quer ativar 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 o comando gcloud compute instances create-with-container ou gcloud compute instances update-container com a sinalização --container-mount-disk para ativar um disco permanente em um contêiner.

No exemplo a seguir, dois discos, my-data-disk e my-scratch-disk, são ativados no contêiner nos caminhos /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

A sinalização --disk anexa my-data-disk, --create-disk cria e anexa my-scatch-disk e --container-mount-disk ativa os discos anexados ao contêiner. Como mode não está especificado em my-scratch-disk, esse disco é ativado no contêiner no modo de leitura e gravação por padrão.

Use o comando gcloud compute instances update-container com a sinalização --container-mount-disk para ativar outros discos anexados ou modificar as ativações de disco atuais.

Use a sinalização --remove-container-mounts para remover uma ativação de volume de disco com o caminho especificado. No exemplo a seguir, o modo de ativação de my-data-disk é alterado para leitura e gravação, e a ativação de disco com mount-path="/disks/scratch-disk" é removida.

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

Como publicar portas de contêineres

As VMs com contêineres usam o modo de rede do host (em inglês). Nele, um contêiner compartilha a pilha de rede do host, e todas as interfaces desse host ficam 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, uma porta de contêiner 80 é mapeada na mesma porta da VM de host. Você não precisa especificar a sinalização de publicação de portas (-p) para que o mapeamento seja realizado.

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

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

Veja no exemplo a seguir como criar uma instância de VM com um contêiner NGINX e permitir 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 de host, e a porta 80 do contêiner é publicada na mesma porta da VM de host. A tag http-server é usada como tag de destino na regra de firewall, que será criada na próxima etapa.

  2. Crie uma regra de firewall para ativar conexões à porta 80 da instância de VM. Com a regra de firewall a seguir, você 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 a receber tráfego automaticamente na porta 80. Você não precisa fazer outras configurações.

    É possível criar regras de firewall em combinações de protocolo:porta da VM de host em que o protocolo seja tcp ou udp. Essas regras controlam o acesso de fora da VM às portas correspondentes do contêiner.

Feedback e dúvidas

Fique à vontade para tirar dúvidas e enviar feedback. Entre em contato com a equipe de contêineres do Compute Engine para tirar dúvidas, relatar problemas e solicitar novos recursos.

A seguir

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

Enviar comentários sobre…

Documentação do Compute Engine