Puedes usar imágenes de contenedor desde 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
Si especificas el nombre de la imagen en el campo name
, puedes extraer imágenes oficiales de Docker, imágenes certificadas por Docker y, también, imágenes personalizadas almacenadas en Docker Hub en tu paso de compilación. 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
maven
para ejecutar el comando mvn
especificado 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 deberá autenticarse en Docker con tus credenciales. Si deseas incluir credenciales de Docker en tus compilaciones, primero debes almacenarlas en Administrador de secretos y, luego, otorgar permiso para que Cloud Build acceda al secreto desde Secret Manager.
Para almacenar credenciales de Docker en Secret Manager, haz lo siguiente:
Ve a la página de Secret Manager en la consola de Google Cloud:
En la página de Secret Manager, haz clic en Crear secreto.
En la página Crear secreto, en Nombre, ingresa
docker-username
.En el campo Valor del secreto, ingresa tu nombre de usuario de Docker.
Deja la sección Regiones sin modificar.
Haz clic en el botón Crear secreto.
Repite los pasos anteriores para almacenar tu contraseña de Docker en Secret Manager.
Para otorgar el rol de IAM de Administrador y descriptor de acceso a secretos para el secreto a la cuenta de servicio que usas para la compilación, sigue estos pasos:
Abre la página de Secret Manager en la consola de Google Cloud:
Selecciona la casilla de verificación del secreto que corresponde a tu nombre de usuario y contraseña de Docker.
Si aún no está abierto, haz clic en Mostrar panel de información para abrir el panel.
En el panel, en Permisos, haz clic en Agregar principal.
En el campo Principales nuevas, ingresa la dirección de correo electrónico de tu cuenta de servicio.
En el cuadro desplegable Selecciona una función, selecciona la función Administrador y descriptor de acceso a secretos.
Haz clic en Guardar.
Extrae imágenes privadas de Docker Hub
Para obtener imágenes privadas de Docker Hub, sigue estos pasos:
Asegúrate de haber almacenado tus credenciales de Docker en Secret Manager y de haber otorgado permisos para que Cloud Build acceda al secreto.
En el archivo de configuración de compilación:
- Después de toda la
steps
de compilación, agrega un campoavailableSecrets
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 abash
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. Si deseas obtener más información para ejecutar comandos bash con -c, consulta la documentación de bash. - Cuando especifiques el secreto en el campo
args
, especifícalo con el variable de entorno con el prefijo$$
.
- Agrega un campo
The following build config file shows how to login to Docker using the Docker username and password stored in Secret Manager, and run a private image.
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" }] } }
Replace the placeholder values in the above commands with the following:
PROJECT_ID
: The ID of the Google Cloud project where you've stored your secrets.DOCKER_USERNAME_SECRET_NAME
: The secret name corresponding to your Docker username.DOCKER_USERNAME_SECRET_VERSION
: The secret version of your Docker username.DOCKER_PASSWORD_SECRET_NAME
: The secret name corresponding to your Docker password.DOCKER_PASSWORD_SECRET_VERSION
: The secret version of your Docker password.REPOSITORY
: The name of your Docker repository from where you're pulling the image.TAG
: The tag name of your image.
- Después de toda la
Use the build config file to manually start a build or to automate builds using triggers.
Pushing images to Docker Hub
To push public and private images to Docker Hub:
Make sure you've stored your Docker credentials in Secret Manager and granted permissions for Cloud Build to access the secret.
In the build config file:
- After all the build
steps
, add anavailableSecrets
field specifying the secret version and the env variable for the Docker username and password. - In the build step where you want to specify the username and password:
- Add an
entrypoint
field pointing tobash
to use the bash tool in the build step. This is required to refer to the environment variable for the secret. - Add a
secretEnv
field specifying the environment variable for username and password. - In the
args
field, add a-c
flag as the first argument. Any string you pass after-c
is treated as a command. For more information on running bash commands with -c, see the bash documentation. - When specifying the secret in the
args
field, specify it using the environment variable prefixed with$$
.
- Add an
The following example build config file shows how to login to Docker, build an image with source code stored locally, and then push the image to Docker repository.
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 Google Cloud en el que almacenaste tus secretos.DOCKER_USERNAME_SECRET_NAME
: Es el nombre secreto correspondiente a tu nombre de usuario de Docker.DOCKER_USERNAME_SECRET_VERSION
: Es la versión del secreto de tu nombre de usuario de Docker.DOCKER_PASSWORD_SECRET_NAME
: Es el nombre del secreto correspondiente a tu contraseña de Docker.DOCKER_PASSWORD_SECRET_VERSION
: Es la versión del secreto de tu contraseña de Docker.REPOSITORY
: Es el nombre de tu repositorio de Docker al que envías la imagen.TAG
: Es el nombre de la etiqueta de la imagen.
Usa el archivo de configuración de compilación para iniciar una compilación de forma manual o automatizar compilaciones mediante activadores.
Cómo trabajar con versiones de clientes de Docker
El compilador de Docker compatible con Cloud Build,
gcr.io/cloud-builders/docker
, usa Docker 20.10.14. Con esta versión, si no especificas una etiqueta cuando Cuando envías una imagen a Docker, Docker envía solo la imagen con la etiquetalatest
. Si la etiquetalatest
no existe, el envío fallará.Para enviar una imagen con una etiqueta específica a Docker, especifica la etiqueta en el archivo
docker push
. paso de compilación. En el siguiente ejemplo, se envía una imagen etiquetadaprod
:YAML
steps: ... - name: 'gcr.io/cloud-builders/docker' args: ['docker', 'push', '$$USERNAME/myrepo:prod'] ...
JSON
{ ... { "name": "gcr.io/cloud-builders/docker", "args": [ "docker", "push", "$$USERNAME/myrepo:prod" ], } ... }
Para enviar todas las etiquetas de una imagen a Docker, agrega la marca
-a
a la lista de argumentos en Paso de compilación dedocker push
:YAML
steps: ... - name: 'gcr.io/cloud-builders/docker' args: ['docker', 'push', '-a', '$$USERNAME/myrepo'] ...
JSON
{ ... { "name": "gcr.io/cloud-builders/docker", "args": [ "docker", "push", "-a", "$$USERNAME/myrepo" ], } ... }
Para usar el cliente de Docker 19.03.9, etiqueta la versión en el compilador de Docker:
YAML
steps: ... - name: 'gcr.io/cloud-builders/docker:19.03.9' args: ['docker', 'push', '$$USERNAME/myrepo:prod'] ...
JSON
{ ... { "name": "gcr.io/cloud-builders/docker:19.03.9", "args": [ "docker", "push", "$$USERNAME/myrepo:prod" ], } ... }
¿Qué sigue?
- Obtén más información sobre cómo escribir un archivo de configuración de compilación básico.
- Obtén más información sobre cómo ejecutar las compilaciones de forma manual o automatizar las compilaciones mediante activadores de compilación.
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2024-10-09 (UTC)
- After all the build