Sie können Container-Images aus Docker Hub verwenden um Ihre Aufgaben in Cloud Build auszuführen. Wenn Ihr Build Images erzeugt, können Sie diese auch an Docker Hub übertragen. Auf dieser Seite wird beschrieben, wie Sie Build-Konfigurationsdateien zum Übertragen und Abrufen von Docker Hub-Images schreiben. Eine Übersicht über alle in einer Build-Konfigurationsdatei verfügbaren Felder finden Sie in der Übersicht über die Build-Konfiguration.
Öffentliche Images aus Docker Hub abrufen
Sie können offizielle Docker-Images, Docker-zertifizierte Images sowie benutzerdefinierte Images abrufen, die in Ihrem Build-Schritt in Docker Hub gespeichert wurden. Geben Sie hierfür im Feld name
den Namen des Images an. Cloud Build ruft zuerst das angegebene Image aus Docker Hub ab und verwendet dann das Image, um den Build-Schritt auszuführen.
Im folgenden Beispiel ruft Cloud Build das Docker-Image für
maven
um den in args
angegebenen mvn
-Befehl auszuführen:
YAML
steps:
- name: "maven"
args: ["mvn", "--version"]
JSON
{
"steps": [
{
"name": "maven",
"args": [
"mvn",
"--version"
]
}
]
}
Docker-Anmeldedaten im Secret Manager speichern
Wenn Sie private Images abrufen sowie öffentliche und private Images in Docker Hub hochladen möchten, muss sich Cloud Build mit Ihren Anmeldedaten bei Docker authentifizieren. Wenn Sie Docker-Anmeldedaten in Ihre Builds aufnehmen möchten, müssen Sie zuerst Ihre Anmeldedaten im Secret Manager speichern und dann Cloud Build die Berechtigung für den Zugriff auf das Secret vom Secret Manager erteilen.
So speichern Sie Docker-Anmeldedaten im Secret Manager:
Rufen Sie in der Google Cloud Console die Seite "Secret Manager" auf:
Klicken Sie auf der Seite Secret Manager auf Secret erstellen.
Geben Sie auf der Seite Secret erstellen unter Name den Wert
docker-username
ein.Geben Sie im Feld Secret-Wert Ihren Docker-Nutzernamen ein.
Lassen Sie den Abschnitt Regionen unverändert.
Klicken Sie auf Secret erstellen.
Wiederholen Sie die obigen Schritte, um Ihr Docker-Passwort im Secret Manager zu speichern.
Zugriffsfunktion für Secret Manager-Secrets gewähren IAM-Rolle für das Secret für das Dienstkonto, das Sie für den Build:
Öffnen Sie in der Google Cloud Console die Seite „Secret Manager“:
Klicken Sie auf das Kästchen des Secrets, das Ihrem Docker-Nutzernamen und dem Passwort entspricht.
Falls das Fenster noch nicht geöffnet ist, klicken Sie auf Infofeld ansehen, um es zu öffnen.
Klicken Sie im Steuerfeld unter Berechtigungen auf Hauptkonto hinzufügen.
Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse Ihres Dienstkontos ein.
Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle Zugriffsperson für Secret Manager-Secret aus.
Klicken Sie auf Speichern.
Private Images aus Docker Hub abrufen
So rufen Sie private Images aus Docker Hub ab:
Achten Sie darauf, dass Sie Ihre Docker-Anmeldedaten im Secret Manager gespeichert und Cloud Build Zugriff auf das Secret gewährt haben.
In der Build-Konfigurationsdatei:
- Fügen Sie nach allen Build-
steps
ein FeldavailableSecrets
hinzu, das die Secret-Version und die Umgebungsvariable für den Docker-Nutzernamen und das Passwort angibt. - Geben Sie im Build-Schritt, in dem Sie den Nutzernamen und das Passwort angeben möchten, Folgendes ein:
- Fügen Sie das Feld
entrypoint
hinzu, das aufbash
verweist, um das Bash-Tool im Build-Schritt zu verwenden. Dies ist erforderlich, um auf die Umgebungsvariable für das Secret zu verweisen. - Fügen Sie das Feld
secretEnv
hinzu, das die Umgebungsvariable für Nutzername und Passwort angibt. - Fügen Sie im Feld
args
das Flag-c
als erstes Argument hinzu. Jeder String, den Sie nach -c übergeben, wird als Befehl behandelt. Weitere Informationen zum Ausführen von Bash-Befehlen mit -c finden Sie in der Bash-Dokumentation. - Wenn Sie das Secret im Feld
args
angeben, geben Sie es mithilfe der Methode Umgebungsvariable mit dem Präfix$$
.
- Fügen Sie das Feld
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.
- Fügen Sie nach allen 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" }] } }
Ersetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:
PROJECT_ID
: die ID des Google Cloud-Projekts wo Sie Ihre Geheimnisse gespeichert haben.DOCKER_USERNAME_SECRET_NAME
: Der Secret-Name, der Ihrem Docker-Nutzernamen entspricht.DOCKER_USERNAME_SECRET_VERSION
: Die Secret-Version Ihres Docker-Nutzernamens.DOCKER_PASSWORD_SECRET_NAME
: Der Secret-Name, der Ihrem Docker-Passwort entspricht.DOCKER_PASSWORD_SECRET_VERSION
: Die Secret-Version Ihres Docker-Passworts.REPOSITORY
: Der Name des Docker-Repositories, in das das Image übertragen wird.TAG
: Der Tag-Name Ihres Images.
Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.
Mit Docker-Clientversionen arbeiten
Der unterstützte Docker-Builder für Cloud Build,
gcr.io/cloud-builders/docker
verwendet Docker 20.10.14. Wenn Sie bei dieser Version beim Pushen eines Images zu Docker kein Tag angeben, sendet Docker nur das Image mit dem Taglatest
. Wenn daslatest
-Tag nicht vorhanden ist, schlägt der Push-Vorgang fehl.Wenn Sie ein Image mit einem bestimmten Tag in Docker pushen möchten, geben Sie das Tag im Buildschritt
docker push
an. Im folgenden Beispiel wird ein Bild mit dem Tagprod
gepusht: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" ], } ... }
Wenn Sie alle Tags eines Images an Docker pushen möchten, fügen Sie der Liste der Argumente im Buildschritt
docker push
das Flag-a
hinzu: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" ], } ... }
Sie können den Docker-Client 19.03.9 verwenden, indem Sie die Version im Docker-Builder taggen:
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" ], } ... }
Nächste Schritte
- Einfache Build-Konfigurationsdatei schreiben
- Builds manuell starten und Builds mit Build-Triggern automatisieren
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-10-17 (UTC).
- After all the build