Como interagir com imagens do Docker Hub

É possível usar imagens de contêiner do Docker Hub 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. Para isso, especifique o nome da imagem no name. O Cloud Build extrairá primeiro 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"
         ]
      }
   ]
}

Como armazenar credenciais do Docker no Gerenciador de secrets

Para extrair imagens privadas e enviar imagens públicas e privadas para o Docker Hub, o Cloud Build precisa ser autenticado no Docker com suas credenciais. Para incluir credenciais do Docker em seus builds, primeiro você precisa armazenar suas credenciais no Gerenciador de secrets e, em seguida, conceder permissão para que o Cloud Build acesse o secret do Secret Manager.

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, insira 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 a senha do Docker no Gerenciador de secrets.

Para conceder o papel de IAM de Acessador de secrets do Gerenciador de secrets ao secret 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 ela ainda não estiver aberta, clique em Mostrar painel de informações para abri-lo.

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

  5. Na caixa de texto Novos principais, 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: onde você está executando os builds. Encontre esse número na página de configurações do projeto.

  6. Na caixa suspensa Selecionar um papel, selecione o papel Acessador de secrets do Gerenciador de secrets.

  7. Clique em Save.

Como extrair imagens particulares do Docker Hub

Para extrair imagens particulares do Docker Hub:

  1. Certifique-se de ter armazenado as credenciais do Docker no Secret Manager e concedido permissões para que o Cloud Build acesse o secret.

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

    • Depois de todo o build steps, adicione um campo availableSecrets especificando a versão secreta e a variável do 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 que aponte para bash para usar a ferramenta bash na etapa de versão. Isso é necessário para fazer referência à 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 primeiro argumento. Qualquer string transmitida após -c é tratada como um comando. Para mais informações sobre como executar comandos bash com -c, consulte a documentação do bash.
      • Ao especificar o secret no campo args, especifique-o usando a variável de ambiente prefixada com $$.

    O seguinte arquivo de configuração da compilação mostra como fazer login no Docker usando o nome de usuário e a senha do Docker armazenados no Secret Manager e como executar uma imagem privada.

    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 os secrets.
    • DOCKER_USERNAME_SECRET_NAME: o nome do secret correspondente ao seu 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 do secret correspondente à sua senha do Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: a versão do secret da sua senha do Docker.
    • REPOSITORY: o nome do repositório do Docker de onde você está extraindo a imagem.
    • TAG: o nome da tag da 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. Certifique-se de ter armazenado as credenciais do Docker no Secret Manager e concedido permissões para que o Cloud Build acesse o secret.

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

    • Depois de todo o build steps, adicione um campo availableSecrets especificando a versão secreta e a variável do 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 que aponte para bash para usar a ferramenta bash na etapa de versão. Isso é necessário para fazer referência à 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 primeiro argumento. Qualquer string transmitida após -c é tratada como um comando. Para mais informações sobre como executar comandos bash com -c, consulte a documentação do bash.
      • Ao especificar o secret no campo args, especifique-o usando a variável de ambiente prefixada com $$.

    No exemplo de arquivo de configuração de build a seguir, mostramos como fazer login no Docker, criar uma imagem com o código-fonte armazenado localmente e enviá-la para o repositório 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 os secrets.
    • DOCKER_USERNAME_SECRET_NAME: o nome do secret correspondente ao seu 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 do secret correspondente à sua senha do Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: a versão do secret da sua 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 imagem.
  3. Use o arquivo de configuração de build para iniciar manualmente um build ou para automatizar builds usando acionadores.

A seguir