Como interagir com imagens do Docker Hub

É possível usar imagens de contêiner do Docker Hub (em inglês) para executar tarefas no Cloud Build. Se o build produz imagens, é possível também enviá-las ao Docker Hub. Nesta página, descrevemos como gravar arquivos de configuração de build para enviar e extrair imagens do Docker Hub. Para uma visão geral de todos os campos disponíveis em um arquivo de configuração de build, consulte Visão geral da configuração de build.

Como extrair imagens públicas do Docker Hub

É possível extrair imagens oficiais do Docker, imagens certificadas pelo Docker e imagens personalizadas armazenadas no Docker Hub na etapa de criação ao especificar o nome da imagem no name. Primeiro, o Cloud Build extrairá a imagem especificada do Docker Hub e a usará para executar a etapa de criação.

No exemplo abaixo, o Cloud Build extrai a imagem do Docker de maven para executar o comando mvn especificado em args:

YAML

steps:
- name: "maven"
  args: ["mvn", "--version"]

JSON

{
   "steps": [
      {
         "name": "maven",
         "args": [
            "mvn",
            "--version"
         ]
      }
   ]
}

armazenar credenciais do Docker no Gerenciador de secrets;

Para extrair imagens particulares e enviar imagens públicas e particulares para o Docker Hub, o Cloud Build precisará ser autenticado no Docker com suas credenciais. Para incluir credenciais do Docker nas suas versões, você precisa primeiro armazenar suas credenciais no Gerenciador de secrets e, em seguida, conceder permissão para o Cloud Build acessar o secret do Gerenciador de secrets.

Para armazenar credenciais do Docker no Gerenciador de secrets:

  1. Acesse a página "Gerenciador de secrets" no Console do Cloud:

    Acessar a página "Gerenciador de secrets"

  2. Na página Gerenciador de secrets, clique em Criar secret.

  3. Na página Criar secret, em Nome, digite docker-username.

  4. No campo Valor do secret, digite seu nome de usuário do Docker.

  5. Deixe a seção Regiões inalterada.

  6. Clique no botão Criar secret.

Repita as etapas acima para armazenar sua senha do Docker no Gerenciador de secrets.

Para conceder o papel de IAM de acessador de secrets do Gerenciador de secrets para a chave secreta da conta de serviço do Cloud Build:

  1. Abra a página "Gerenciador de secrets" no Console do Google Cloud:

    Acessar a página "Gerenciador de secrets"

  2. Marque a caixa de seleção do secret correspondente ao seu nome de usuário e senha do Docker.

  3. Se ele ainda não estiver aberto, clique em Mostrar painel de informações para abri-lo.

  4. No painel, em Permissões, clique em Adicionar membro.

  5. Na caixa de texto Novos membros, insira o endereço de e-mail da sua conta de serviço do Cloud Build no formato PROJECT_NUMBER@cloudbuild.gserviceaccount.com, em que PROJECT_NUMBER é o número do projeto do projeto em que você está executando versões. É possível encontrar o número do projeto na página Configurações do projeto.

  6. Na caixa suspensa Selecionar papel, escolha Papel de secret do Secret Manager.

  7. Clique em Save.

Como extrair imagens particulares do Docker Hub

Para extrair imagens particulares do Docker Hub:

  1. Armazenar as credenciais do Docker no Gerenciador de secrets e conceder permissões para que o Cloud Build acesse o secret

  2. No arquivo de configuração de build:

    • Depois de toda a versão steps, adicione um campo availableSecrets especificando a versão do secret e a variável de ambiente para o nome de usuário e a senha do Docker.
    • Na etapa de criação em que você quer especificar o nome de usuário e a senha:
      • Adicione um campo entrypoint apontando para bash para usar a ferramenta bash na etapa de criação. Isso é necessário para consultar a variável de ambiente do secret.
      • Adicione um campo secretEnv especificando a variável de ambiente para nome de usuário e senha.
      • No campo args, adicione uma sinalização -c como o primeiro argumento. Qualquer string que você passa depois de -c é tratada como um comando. Para mais informações sobre como executar comandos bash com -c, consulte a documentação do bash (em inglês).
      • Ao especificar o secret no campo args, especifique-o usando a variável de ambiente com o prefixo $$.

    O arquivo de configuração da versão a seguir mostra como fazer login no Docker usando o nome de usuário e a senha do Docker armazenados no Gerenciador de secrets e executar uma imagem particular.

    YAML

     steps:
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD']
       secretEnv: ['USERNAME', 'PASSWORD']
     - name: "gcr.io/cloud-builders/docker"
       entrypoint: 'bash'
       args: ['-c', 'docker run $$USERNAME/REPOSITORY:TAG']
       secretEnv: ['USERNAME']
     availableSecrets:
       secretManager:
       - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION
         env: 'PASSWORD'
       - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION
         env: 'USERNAME'
    

    JSON

    {
      "steps": [
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker login --username=$$USERNAME --password=$$PASSWORD"
        ],
        "secretEnv": [
          "USERNAME",
          "PASSWORD"
        ]
      },
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker run $$USERNAME/REPOSITORY:TAG"
         ],
         "secretEnv": [
          "USERNAME"
        ]
      }
      ],
      "availableSecrets": {
        "secretManager": [{
          "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION",
          "env": "PASSWORD"
      }, {
        "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION",
        "env": "USERNAME"
         }]
      }
    }
    

    Substitua os valores dos marcadores nos comandos acima pelo seguinte:

    • PROJECT_ID: o ID do projeto do Cloud em que você armazenou as chaves secretas.
    • DOCKER_USERNAME_SECRET_NAME: o nome do secret correspondente ao nome de usuário do Docker.
    • DOCKER_USERNAME_SECRET_VERSION: a versão do secret do seu nome de usuário do Docker.
    • DOCKER_PASSWORD_SECRET_NAME: o nome secreto correspondente à senha do Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: a versão do secret da senha do Docker.
    • REPOSITORY: o nome do repositório do Docker de onde você está puxando a imagem.
    • TAG: o nome da tag da sua imagem.
  3. Use o arquivo de configuração de build para iniciar manualmente um build ou para automatizar builds usando acionadores.

Como enviar imagens ao Docker Hub

Para enviar imagens públicas e particulares ao Docker Hub:

  1. Armazenar as credenciais do Docker no Gerenciador de secrets e conceder permissões para que o Cloud Build acesse o secret

  2. No arquivo de configuração de build:

    • Depois de toda a versão steps, adicione um campo availableSecrets especificando a versão do secret e a variável de ambiente para o nome de usuário e a senha do Docker.
    • Na etapa de criação em que você quer especificar o nome de usuário e a senha:
      • Adicione um campo entrypoint apontando para bash para usar a ferramenta bash na etapa de criação. Isso é necessário para consultar a variável de ambiente do secret.
      • Adicione um campo secretEnv especificando a variável de ambiente para nome de usuário e senha.
      • No campo args, adicione uma sinalização -c como o primeiro argumento. Qualquer string que você passa depois de -c é tratada como um comando. Para mais informações sobre como executar comandos bash com -c, consulte a documentação do bash (em inglês).
      • Ao especificar o secret no campo args, especifique-o usando a variável de ambiente com o prefixo $$.

    O exemplo de arquivo de configuração de versão a seguir mostra como fazer login no Docker, criar uma imagem com código-fonte armazenado localmente e enviá-la ao repositório do Docker.

    YAML

     steps:
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD']
       secretEnv: ['USERNAME', 'PASSWORD']
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker build -t $$USERNAME/REPOSITORY:TAG .']
       secretEnv: ['USERNAME']
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker push $$USERNAME/REPOSITORY:TAG']
       secretEnv: ['USERNAME']
     availableSecrets:
       secretManager:
       - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION
         env: 'PASSWORD'
       - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION
         env: 'USERNAME'
    

    JSON

    {
      "steps": [
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker login --username=$$USERNAME --password=$$PASSWORD"
        ],
        "secretEnv": [
          "USERNAME",
          "PASSWORD"
        ]
      },
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker build -t $$USERNAME/REPOSITORY:TAG ."
         ],
         "secretEnv": [
          "USERNAME"
        ]
      },
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker push $$USERNAME/REPOSITORY:TAG"
         ],
         "secretEnv": [
          "USERNAME"
        ]
      }
      ],
      "availableSecrets": {
        "secretManager": [{
          "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION",
          "env": "PASSWORD"
      }, {
        "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION",
        "env": "USERNAME"
         }]
      }
    }
    

    Substitua os valores dos marcadores nos comandos acima pelo seguinte:

    • PROJECT_ID: o ID do projeto do Cloud em que você armazenou as chaves secretas.
    • DOCKER_USERNAME_SECRET_NAME: o nome do secret correspondente ao nome de usuário do Docker.
    • DOCKER_USERNAME_SECRET_VERSION: a versão do secret do seu nome de usuário do Docker.
    • DOCKER_PASSWORD_SECRET_NAME: o nome secreto correspondente à senha do Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: a versão do secret da senha do Docker.
    • REPOSITORY: o nome do repositório do Docker para o qual você está enviando a imagem.
    • TAG: o nome da tag da sua imagem.
  3. Use o arquivo de configuração de build para iniciar manualmente um build ou para automatizar builds usando acionadores.

A seguir