Puoi utilizzare le immagini container di Docker Hub per eseguire le tue attività in Cloud Build. Inoltre, se la tua build produce puoi eseguirne il push in Docker Hub. In questa pagina viene descritto come scrivere di creazione dei file di configurazione per eseguire il push e il pull delle immagini Docker Hub. Per una panoramica di tutti Per i campi disponibili in un file di configurazione di compilazione, consulta Panoramica della configurazione della build.
Pull delle immagini pubbliche da Docker Hub
Nella tua build puoi eseguire il pull di immagini Docker ufficiali, immagini certificate Docker e immagini personalizzate archiviate in Docker Hub
specificando il nome dell'immagine nel campo name
. Cloud Build
eseguire il pull dell'immagine specificata da Docker Hub, quindi utilizzare l'immagine per eseguire
il passaggio di build.
Nell'esempio seguente, Cloud Build estrae l'immagine Docker per
maven
per eseguire il comando mvn
specificato in args
:
YAML
steps:
- name: "maven"
args: ["mvn", "--version"]
JSON
{
"steps": [
{
"name": "maven",
"args": [
"mvn",
"--version"
]
}
]
}
Archiviazione delle credenziali Docker in Secret Manager
Per eseguire il pull di immagini private ed eseguire il push di immagini pubbliche e private in Docker Hub: Cloud Build dovrà eseguire l'autenticazione in Docker con le tue credenziali. Per includere le credenziali Docker nelle tue build, devi prima archiviarle in Secret Manager, quindi concedi l'autorizzazione per consentire a Cloud Build di accedere al secret da Secret Manager.
Per archiviare le credenziali Docker in Secret Manager:
Vai alla pagina Secret Manager nella console Google Cloud:
Nella pagina Secret Manager, fai clic su Crea secret.
Nella pagina Crea secret, in Nome, inserisci
docker-username
.Nel campo Valore secret, inserisci il tuo nome utente Docker.
Non modificare la sezione Regioni.
Fai clic sul pulsante Crea secret.
Ripeti i passaggi precedenti per archiviare la password Docker in Secret Manager.
Concedere la funzione di accesso ai secret di Secret Manager. Ruolo IAM per il secret per l'account di servizio che stai utilizzando la build:
Apri la pagina Secret Manager nella console Google Cloud:
Seleziona la casella di controllo del secret corrispondente al nome utente e alla password Docker.
Se non è già aperto, fai clic su Mostra riquadro informazioni per aprirlo.
Nel riquadro, in Autorizzazioni, fai clic su Aggiungi entità.
Nel campo Nuove entità, inserisci l'indirizzo email l'account di servizio.
Nella casella a discesa Seleziona un ruolo, seleziona Funzione di accesso ai secret di Secret Manager ruolo.
Fai clic su Salva.
Pull di immagini private da Docker Hub
Per eseguire il pull di immagini private da Docker Hub:
Assicurati di aver archiviato le tue credenziali Docker in Secret Manager e le autorizzazioni concesse per consentire a Cloud Build di accedere al secret.
Nel file di configurazione della build:
- Dopo aver completato tutti i passaggi della build
steps
, aggiungi un campoavailableSecrets
che specifichi e la variabile env per il nome utente e la password Docker. - Nel passaggio di build in cui vuoi specificare il nome utente e la password:
- Aggiungi un campo
entrypoint
che rimandi abash
per usare lo strumento bash nella il passaggio di build. Questa operazione è necessaria per fare riferimento alla variabile di ambiente per il secret. - Aggiungi un campo
secretEnv
specificando la variabile di ambiente per il nome utente e password. - Nel campo
args
, aggiungi un flag-c
come primo argomento. Qualsiasi stringa che passi dopo che -c è considerato un comando. Per ulteriori informazioni sulla corsa per i comandi bash con -c, consulta la documentazione di bash. - Quando specifichi il secret nel campo
args
, specificalo utilizzando il metodo variabile di ambiente con prefisso$$
.
- Aggiungi 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.
- Dopo aver completato tutti i passaggi della build
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" }] } }
Sostituisci i valori segnaposto nei comandi precedenti con i seguenti:
PROJECT_ID
: l'ID del progetto Google Cloud in cui hai archiviato i tuoi secret.DOCKER_USERNAME_SECRET_NAME
: il nome del secret corrispondente al tuo nome utente Docker.DOCKER_USERNAME_SECRET_VERSION
: la versione del secret del tuo nome utente Docker.DOCKER_PASSWORD_SECRET_NAME
: il nome del secret corrispondente alla tua password Docker.DOCKER_PASSWORD_SECRET_VERSION
: la versione del secret della tua password Docker.REPOSITORY
: il nome del repository Docker in cui di cui stai eseguendo il push dell'immagine.TAG
: il nome tag dell'immagine.
Utilizza il file di configurazione di compilazione per avviare manualmente una build o automatizzare le build utilizzando i trigger.
Utilizzo delle versioni del client Docker
Il Docker Builder supportato per Cloud Build,
gcr.io/cloud-builders/docker
usa Docker 20.10.14. Con questa versione, se non specifichi un tag quando eseguendo il push di un'immagine in Docker, Docker ne esegue solo il push solo con il taglatest
. Se il taglatest
non esiste, il push non riesce.Per eseguire il push di un'immagine con un tag specifico in Docker, specifica il tag nel
docker push
il passaggio di build. L'esempio seguente esegue il push di un'immagine con tagprod
: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" ], } ... }
Per eseguire il push di tutti i tag di un'immagine in Docker, aggiungi il flag
-a
all'elenco di argomenti nelladocker push
passaggio di build: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" ], } ... }
Puoi usare il client Docker 19.03.9 taggando la versione nel builder 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" ], } ... }
Passaggi successivi
- Scopri come scrivere un file di configurazione della build di base.
- Scopri come eseguire build manualmente o automatizzare mediante build attivatori.
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-07-22 UTC.
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"Problema di traduzione" },{ "type": "thumb-down", "id": "otherDown", "label":"Altra" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Facile da capire" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Il problema è stato risolto" },{ "type": "thumb-up", "id": "otherUp", "label":"Altra" }]- After all the build