Configurar opções para executar o contentor

Pode executar um único contentor numa VM ou em cada VM num grupo de instâncias geridas (GIG). Para o fazer, especifique uma imagem de contentor e parâmetros de configuração quando criar uma instância de VM ou um modelo de instância.

Este documento descreve as opções de configuração para executar contentores em instâncias do Compute Engine.

Antes de começar

Quando cria uma instância ou um modelo de instância para usar na Implementação de contentores em VMs e MIGs, especifique a configuração do contentor através da Trusted Cloud consola ou da CLI do Google Cloud.

As secções seguintes descrevem como configurar contentores em instâncias de VM, mas também pode configurar as seguintes opções quando cria um modelo de instância. Use a Trusted Cloud consola ou a Google Cloud CLI para configurar opções para instâncias de VM num modelo de instância.

Pode usar os comandos docker run para configurar um contentor numa instância de VM que esteja a executar o SO otimizado para contentores ou especificar o comando docker run num script de arranque para criar e configurar uma VM. Para mais informações, consulte o artigo Use scripts de arranque para implementar contentores em VMs.

Especificar uma política de reinício

Pode definir uma política de reinício para especificar se um contentor deve ser reiniciado ao sair. A política predefinida é reiniciar sempre. Também pode definir a política para reiniciar em caso de falha ou para nunca reiniciar.

docker run

Use a flag --restart do comando docker run. As tentativas repetidas de reiniciar um contentor são determinadas pelo comportamento predefinido do Docker, conforme especificado na referência do Docker --restart.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

    1. Especifique um nome de imagem de contentor.
    2. Na secção Política de reinício, selecione a política de reinício para o contentor.
    3. Para confirmar os detalhes do contentor, 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 reinício do contentor:

  • always (predefinição)
  • on-failure
  • never

O exemplo seguinte inicia um contentor com a política de reinício on-failure, o que significa que o reinício só ocorre quando o código de saída do contentor é 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 flag --container-restart-policy para a política de reinício num contentor em execução numa VM.

Executar um contentor no modo privilegiado

Pode executar um contentor no modo privilegiado para permitir o acesso a todos os dispositivos no anfitrião. Os contentores são executados como "sem privilégios" por predefinição e não têm autorização para aceder a dispositivos.

docker run

Use a flag --privileged do comando docker run. Para mais informações, consulte o artigo Privilégio de tempo de execução e capacidades do Linux.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

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

gcloud

Use a flag --container-privileged para executar um contentor com privilégios de tempo de execução. O exemplo seguinte inicia um contentor 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 flag --container-privileged para atualizar um contentor numa VM. Use a flag --no-container-privileged para desativar o modo privilegiado.

Alocar um buffer para STDIN no tempo de execução do contentor

Pode atribuir um buffer para STDIN no tempo de execução do contentor para manter o fluxo STDIN aberto num contentor. Se esta opção não estiver definida, as leituras de STDIN no contentor resultam sempre em EOF.

Além de atribuir um pseudo-TTY, manter o fluxo STDIN aberto é necessário para estabelecer um shell interativo no contentor e para que o contentor receba a respetiva entrada padrão de um pipe.

docker run

Use a marca --interactive (-i) do comando docker run. Para mais informações, consulte a documentação da flag --interactive.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

    1. Especifique um nome de imagem de contentor.
    2. Selecione Allocate a buffer for STDIN (Alocar uma memória intermédia para STDIN).
    3. Para confirmar os detalhes do contentor, clique em Selecionar.
  4. Continue com o processo de criação da VM.

gcloud

Use a flag --container-stdin para atribuir uma memória intermédia para STDIN no tempo de execução do contentor. O exemplo seguinte inicia um contentor e mantém o respetivo 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 flag --container-stdin para atualizar um contentor numa VM. Use a flag --no-container-stdin para desativar a atribuição de um buffer para STDIN.

Atribuir um pseudo-TTY

A atribuição de um pseudo-TTY a um contentor é necessária para estabelecer uma shell interativa no contentor (juntamente com a atribuição de um buffer para STDIN).

docker run

Use a flag --tty (-t) do comando docker run. Para mais informações, consulte a flag --tty.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

    1. Especifique um nome de imagem de contentor.
    2. Selecione Allocate a pseudo-TTY (Atribuir um pseudo-TTY).
    3. Para confirmar os detalhes do contentor, clique em Selecionar.
  4. Continue com o processo de criação da VM.

gcloud

Use a flag --container-tty para atribuir um pseudo-TTY. O exemplo seguinte inicia um contentor e atribui 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 flag --container-tty para atualizar um contentor numa VM. Use a flag --no-container-tty para não atribuir um pseudo-TTY.

Substituir o comando predefinido a executar no arranque do contentor

O ENTRYPOINT de uma imagem de contentor especifica que ficheiro executável deve ser executado quando o contentor é iniciado e permite-lhe executar o contentor como se fosse esse ficheiro binário.

Pode substituir o comando ENTRYPOINT da imagem do contentor.

docker run

Use a flag --entrypoint (apenas comando, sem argumentos) do comando docker run. Saiba mais sobre o ENTRYPOINT e a sinalização --entrypoint.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

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

gcloud

Use a flag --container-command para substituir a imagem do contentorENTRYPOINT. O exemplo seguinte executa o comando uptime num contentor busybox para apresentar o tempo desde o último arranque:

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 flag --container-command para atualizar um comando para um contentor numa VM.

Use a flag --clear-container-command com o comando update-container para limpar o comando predefinido do contentor atualizado.

Transmitir argumentos para o comando ENTRYPOINT do contentor

Pode transmitir (anexar) argumentos ao comando ENTRYPOINT do contentor ou substituir o comando CMD do contentor predefinido.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

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

gcloud

Use a flag --container-arg para transmitir argumentos a um comando de imagem de contentor ENTRYPOINT. Use uma flag separada para cada argumento.

O exemplo seguinte executa o comando /bin/ash com os argumentos -c 'ls -l' num contentor 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 flags --container-arg para atualizar os argumentos de comando de um contentor em execução numa VM. A atualização substitui toda a lista de argumentos pela nova lista.

Use a flag --clear-container-args com o comando update-container para remover todos os argumentos da declaração do contentor.

Configurar opções do controlador de registo

Se precisar de configurar opções do controlador de registo, pode criar um script de arranque da VM para atualizar o ficheiro de configuração do Docker com as opções de registo de que precisa. Estas opções aplicam-se a todos os contentores executados na VM e que não especificam opções de controlador de registo.

Por exemplo, o seguinte script de arranque define várias opções, incluindo uma opção para limitar o tamanho do registo do contentor e, em seguida, 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

Definir variáveis de ambiente

Pode definir variáveis de ambiente num contentor. Só é considerado o último valor de KEY quando o KEY se repete mais do que uma vez.

docker run

Use a flag --env do comando docker run. Saiba como o motor do Docker permite definir variáveis de ambiente.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

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

gcloud

Use a flag --container-env para definir variáveis de ambiente num contentor. O exemplo seguinte 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 flag --container-env-file para definir variáveis de ambiente a partir de um ficheiro local. O exemplo seguinte define as duas variáveis de ambiente a partir do ficheiro 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 ficheiro env.txt é:

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

Use o comando gcloud compute instances update-container com a flag --container-env ou --container-env-file para atualizar as variáveis de ambiente de um contentor numa VM. Isto atualiza todas as variáveis presentes na declaração do contentor da instância da VM. São adicionadas variáveis que não estão na declaração do contentor.

Use a flag --remove-container-env para remover variáveis de ambiente quando atualizar um contentor numa VM. O exemplo seguinte 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, é ignorada silenciosamente.

Montar um diretório de anfitrião como um volume de dados

Pode montar um diretório de uma VM anfitriã num contentor.

docker run

Use o sinalizador --volume e o sinalizador --mount com a montagem type=bind do comando docker run. Saiba como o motor do Docker monta um diretório de anfitrião como um volume de dados.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

    1. Especifique um nome de imagem de contentor.
    2. Na secção Montagens de volumes, 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 numa estrutura de diretórios do contentor no qual montar um diretório do anfitrião.
      • No campo Caminho do anfitrião, especifique um caminho do anfitrião para o diretório do anfitrião a montar.
      • Na lista Modo, especifique se quer montar o diretório no modo de leitura/escrita ou só de leitura.
    4. Para confirmar os detalhes do contentor, clique em Selecionar.

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

gcloud

Use a flag --container-mount-host-path para montar um diretório de VM de anfitrião num contentor. O exemplo seguinte monta o diretório do anfitrião /tmp no contentor em /logs no modo de leitura/escrita:

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 anfitrião no modo de leitura.

Use o comando gcloud compute instances update-container com a flag --container-mount-host-path para atualizar as montagens de diretórios de anfitriões num contentor. Use a flag --remove-container-mounts para remover as montagens de volume com os caminhos de montagem especificados. O exemplo seguinte remove uma montagem de caminho de anfitrião com mount-path=/logs:

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

Se o caminho de montagem especificado não existir, é ignorado silenciosamente.

Montar o sistema de ficheiros tmpfs como um volume de dados

Pode montar um sistema de ficheiros tmpfs vazio num contentor.

Um sistema de ficheiros tmpfs vazio é semelhante a um volume EmptyDir do Google Kubernetes Engine com medium:Memory. Ao contrário do Docker, em que os dados tmpfs são eliminados quando o contentor é reiniciado, com o tmpfs num contentor do Compute Engine, o volume e os respetivos dados persistem nos reinícios do contentor e só são eliminados quando a VM é reiniciada.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

    1. Especifique um nome de imagem de contentor.
    2. Na secção Montagens de volumes, clique em Adicionar volume.
    3. Na lista Tipo de volume, selecione TmpFS.
    4. No campo Caminho de montagem, especifique um caminho de montagem numa estrutura de diretórios de contentores onde quer montar um volume TmpFS.
    5. Na lista Modo, especifique se deve montar o volume TmpFS no modo de leitura/escrita ou apenas de leitura.
    6. Para confirmar os detalhes do contentor, 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 ficheiros tmpfs vazio num contentor. O exemplo seguinte monta um sistema de ficheiros tmpfs no contentor em /cache no modo de leitura/escrita:

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 flag --container-mount-tmpfs para atualizar as montagens tmpfs num contentor. Use a flag --remove-container-mountspara remover uma montagem tmpfscom o caminho de montagem especificado durante a atualização. O exemplo seguinte 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, é ignorado silenciosamente.

Montar um disco persistente como um volume de dados

Com o SO otimizado para contentores 69 ou posterior, pode montar discos persistentes de uma VM anfitriã num contentor.

Pré-requisitos

  • O disco tem de ter um sistema de ficheiros ext4 ou não ter nenhum sistema de ficheiros. Sem um sistema de ficheiros inicial, o agente de arranque do contentor formata o disco para ext4 e apenas são suportados a montagem e o anexo de leitura/escrita.
  • O disco tem de estar anexado à VM.
  • São suportados dispositivos sem partições e partições. Para montagens de partições, o disco não pode estar em branco. Tem de conter uma tabela de partições existente.

Consola

  1. Aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Na secção Contentor, clique em Implementar contentor.

  3. Na página Configurar contentor, faça o seguinte:

    1. Especifique um nome de imagem de contentor.
    2. Na secção Montagens de volumes, 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 contentor onde quer montar o disco persistente.
    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 montar se o disco tiver uma tabela de partições. Se o disco não tiver partições, deixe este campo em branco.
    7. Na lista Modo, especifique se quer montar o diretório no modo de leitura/escrita ou só de leitura.
    8. Para confirmar os detalhes do contentor, 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 flag --container-mount-disk para montar um disco persistente num contentor.

O exemplo seguinte monta dois discos, my-data-disk e my-scratch-disk, no contentor 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

Tenha em atenção que a flag --disk anexa my-data-disk, a flag --create-disk cria e anexa my-scatch-disk, e a flag --container-mount-disk monta os discos anexados ao contentor. Uma vez que não é especificado um mode para my-scratch-disk, esse disco é montado no contentor no modo de leitura/escrita por predefinição.

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

Use o sinalizador --remove-container-mounts para remover uma montagem de volume de disco com o caminho de montagem especificado. O exemplo seguinte altera o modo de montagem de my-data-disk para leitura/escrita 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 transmite à flag --remove-container-mounts não existir, é ignorado silenciosamente.

Publicar portas de contentores

As VMs com contentores usam o modo de rede do anfitrião, em que um contentor partilha a pilha de rede do anfitrião e todas as interfaces do anfitrião estão disponíveis para o contentor.

As portas do contentor têm um mapeamento individual para as portas da VM anfitriã. Por exemplo, uma porta 80 do contentor é mapeada para a porta 80 da VM do anfitrião. O Compute Engine não suporta a flag de publicação de portas (-p) e não tem de a especificar para que o mapeamento funcione.

Para publicar as portas de um contentor, configure as regras de firewall para permitir o acesso às portas da VM anfitriã. As portas correspondentes do contentor ficam acessíveis automaticamente, de acordo com as regras da firewall.

Exemplo: publicar a porta 80 para um contentor NGINX

docker run

Configure o sinalizador --network="host" quando usar o comando docker run. Saiba mais sobre as definições de rede de contentores e o modo de anfitrião.

gcloud

O exemplo seguinte mostra como criar uma instância de VM com um contentor NGINX e permitir tráfego para a porta 80 do contentor.

  1. Crie uma instância de VM com um contentor NGINX:

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

    O contentor partilha a pilha de rede da VM anfitriã e a porta 80 do contentor é publicada na porta 80 da VM anfitriã. A etiqueta http-server é usada como uma etiqueta de destino para a regra de firewall, criada no passo seguinte.

  2. Crie uma regra de firewall para ativar as ligações à porta 80 da instância de VM. A seguinte regra de firewall permite ligações HTTP a instâncias de VM com a etiqueta http-server.

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

    O contentor começa automaticamente a receber tráfego na porta 80. Não tem de fazer nenhuma configuração adicional.

    Pode criar regras de firewall para combinações de protocolo:porta de VMs de anfitrião em que o protocolo é tcp ou udp. Estas regras regem eficazmente o acesso de fora da VM às portas do contentor correspondentes.

O que se segue?