Interactúa con imágenes de Docker Hub

Puedes usar imágenes de contenedor de Docker Hub para ejecutar tus tareas en Cloud Build. Además, si la compilación genera imágenes, puedes enviarlas a Docker Hub. En esta página, se describe cómo escribir archivos de configuración de compilación para enviar y extraer imágenes de Docker Hub. Para obtener una descripción general de todos los campos disponibles en un archivo de configuración de compilación, consulta Descripción general de la configuración de compilación.

Extrae imágenes públicas de Docker Hub

En el paso de compilación, puedes extraer imágenes oficiales de Docker, imágenes certificadas por Docker y, también, imágenes personalizadas almacenadas en Docker Hub. Para ello, especifica el nombre de la imagen en la name. Cloud Build primero extraerá la imagen especificada de Docker Hub y, luego, la usará para ejecutar el paso de compilación.

En el siguiente ejemplo, Cloud Build extrae la imagen de Docker para que maven ejecute el comando mvn, que se especifica en args:

YAML

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

JSON

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

Almacena credenciales de Docker en Secret Manager

Para extraer imágenes privadas y enviar imágenes públicas y privadas a Docker Hub, Cloud Build tendrá que autenticarse en Docker con tus credenciales. Si deseas incluir credenciales de Docker en tus compilaciones, primero debes almacenarlas en Secret Manager y, luego, otorgar permiso a Cloud Build para que acceda al secreto desde Secret Manager.

Para almacenar credenciales de Docker en Secret Manager, haz lo siguiente:

  1. Ve a la página de Secret Manager en Cloud Console:

    Ir a la página de Secret Manager

  2. En la página de Secret Manager, haz clic en Crear secreto.

  3. En la página Crear secreto, en Nombre, ingresa docker-username.

  4. En el campo Valor del secreto, ingresa tu nombre de usuario de Docker.

  5. Deja la sección Regiones sin modificar.

  6. Haz clic en el botón Crear secreto.

Repite los pasos anteriores para almacenar tu contraseña de Docker en Secret Manager.

A fin de otorgar la función de IAM de Administrador y descriptor de acceso a secretos para el secreto a la cuenta de servicio de Cloud Build, sigue estos pasos:

  1. Abre la página Administrador de secretos en Google Cloud Console:

    Ir a la página Secret Manager

  2. Selecciona la casilla de verificación del secreto correspondiente a tu nombre de usuario y contraseña de Docker.

  3. Si no está abierto, haz clic en Mostrar panel de información para abrir el panel.

  4. En el panel, en Permisos, haz clic en Agregar principal.

  5. En el cuadro de texto Nuevos principales, ingresa la dirección de correo electrónico de la cuenta de servicio de Cloud Build con el formato PROJECT_NUMBER@cloudbuild.gserviceaccount.com, en el que PROJECT_NUMBER es el número de proyecto del proyecto en el que ejecutas compilaciones. Puedes encontrar el número de proyecto en la página de configuración del proyecto.

  6. En el cuadro desplegable Selecciona una función, selecciona la función Descriptor de acceso a Secret Manager.

  7. Haz clic en Guardar.

Extrae imágenes privadas de Docker Hub

Para obtener imágenes privadas de Docker Hub, sigue estos pasos:

  1. Asegúrate de haber almacenado tus credenciales de Docker en Secret Manager y haber otorgado permisos para que Cloud Build acceda al secreto.

  2. En el archivo de configuración de compilación:

    • Después de toda la compilación steps, agrega un campo availableSecrets que especifique la versión del secreto y la variable de entorno para el nombre de usuario y la contraseña de Docker.
    • En el paso de compilación, en el que deseas especificar el nombre de usuario y la contraseña, haz lo siguiente:
      • Agrega un campo entrypoint que apunte a bash para usar la herramienta bash en el paso de compilación. Esto es necesario para hacer referencia a la variable de entorno del secreto.
      • Agrega un campo secretEnv que especifique la variable de entorno para el nombre de usuario y la contraseña.
      • En el campo args, agrega una marca -c como primer argumento. Cualquier string que pases después de -c se trata como un comando. Para obtener más información sobre cómo ejecutar comandos bash con -c, consulta la documentación de bash.
      • Cuando especifiques el secreto en el campo args, especifícalo mediante la variable de entorno con el prefijo $$.

    En el siguiente archivo de configuración de compilación, se muestra cómo acceder a Docker mediante el nombre de usuario y la contraseña de Docker almacenados en Secret Manager y ejecutar una imagen 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"
         }]
      }
    }
    

    Reemplaza los valores de marcador de posición en los comandos anteriores por la siguiente información:

    • PROJECT_ID: Es el ID del proyecto de Cloud en el que almacenaste tus secretos.
    • DOCKER_USERNAME_SECRET_NAME: El nombre del secreto correspondiente a tu nombre de usuario de Docker.
    • DOCKER_USERNAME_SECRET_VERSION: La versión secreta del nombre de usuario de Docker.
    • DOCKER_PASSWORD_SECRET_NAME: El nombre del secreto correspondiente a tu contraseña de Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: La versión secreta de tu contraseña de Docker.
    • REPOSITORY: El nombre de tu repositorio de Docker desde el que se extrae la imagen.
    • TAG: Es el nombre de la etiqueta de tu imagen.
  3. Usa el archivo de configuración de compilación para iniciar una compilación de forma manual o automatizar compilaciones mediante activadores.

Envía imágenes a Docker Hub

Para enviar imágenes públicas y privadas a Docker Hub, haz lo siguiente:

  1. Asegúrate de haber almacenado tus credenciales de Docker en Secret Manager y haber otorgado permisos para que Cloud Build acceda al secreto.

  2. En el archivo de configuración de compilación:

    • Después de toda la compilación steps, agrega un campo availableSecrets que especifique la versión del secreto y la variable de entorno para el nombre de usuario y la contraseña de Docker.
    • En el paso de compilación, en el que deseas especificar el nombre de usuario y la contraseña, haz lo siguiente:
      • Agrega un campo entrypoint que apunte a bash para usar la herramienta bash en el paso de compilación. Esto es necesario para hacer referencia a la variable de entorno del secreto.
      • Agrega un campo secretEnv que especifique la variable de entorno para el nombre de usuario y la contraseña.
      • En el campo args, agrega una marca -c como primer argumento. Cualquier string que pases después de -c se trata como un comando. Para obtener más información sobre cómo ejecutar comandos bash con -c, consulta la documentación de bash.
      • Cuando especifiques el secreto en el campo args, especifícalo mediante la variable de entorno con el prefijo $$.

    En el siguiente archivo de configuración de compilación de ejemplo, se muestra cómo acceder a Docker, compilar una imagen con código fuente almacenado de forma local y, luego, enviar la imagen al repositorio de 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"
         }]
      }
    }
    

    Reemplaza los valores de marcador de posición en los comandos anteriores por la siguiente información:

    • PROJECT_ID: Es el ID del proyecto de Cloud en el que almacenaste tus secretos.
    • DOCKER_USERNAME_SECRET_NAME: El nombre del secreto correspondiente a tu nombre de usuario de Docker.
    • DOCKER_USERNAME_SECRET_VERSION: La versión secreta del nombre de usuario de Docker.
    • DOCKER_PASSWORD_SECRET_NAME: El nombre del secreto correspondiente a tu contraseña de Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: La versión secreta de tu contraseña de Docker.
    • REPOSITORY: El nombre del repositorio de Docker al que se enviará la imagen.
    • TAG: Es el nombre de la etiqueta de tu imagen.
  3. Usa el archivo de configuración de compilación para iniciar una compilación de forma manual o automatizar compilaciones mediante activadores.

¿Qué sigue?