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
ab, um den Befehl mvn
auszuführen, der in args
angegeben ist:
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.
So weisen Sie dem Cloud Build-Dienstkonto die IAM-Rolle Zugriffsperson für Secret Manager-Secret für das Secret zu:
Ö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 in das Textfeld Neue Hauptkonten die E-Mail-Adresse Ihres Cloud Build-Dienstkontos in der Form
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
ein, wobeiPROJECT_NUMBER
die Projektnummer des Projekts ist, in dem Sie Builds ausführen. Sie finden die Projektnummer auf der Seite mit den Projekteinstellungen.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 mit der Umgebungsvariable$$
an.
- Fügen Sie das Feld
Die folgende Build-Konfigurationsdatei zeigt, wie Sie sich mit dem im Secret Manager gespeicherten Docker-Nutzernamen und -Passwort bei Docker anmelden und ein privates Image ausführen.
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" }] } }
Ersetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:
PROJECT_ID
: Die ID des Google Cloud-Projekts, in dem Sie Ihre Secrets 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, aus dem Sie das Image abrufen.TAG
: Der Tag-Name Ihres Images.
- Fügen Sie nach allen Build-
Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.
Images an Docker Hub übertragen
So übertragen Sie öffentliche und private Images an Docker Hub:
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 mit der Umgebungsvariable$$
an.
- Fügen Sie das Feld
Das folgende Beispiel für eine Build-Konfigurationsdatei zeigt, wie man sich bei Docker anmeldet, ein Image mit lokal gespeichertem Quellcode erstellt und dann das Image in das Docker-Repository überträgt.
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, in dem Sie Ihre Secrets 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.
- Fügen Sie nach allen Build-
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 Hochladen eines Images an Docker kein Tag angeben, überträgt Docker nur das Image mit dem Tag latest
per Push.
Wenn das Tag latest
nicht vorhanden ist, schlägt der Push fehl.
Wenn Sie ein Image mit einem bestimmten Tag an Docker hochladen möchten, geben Sie das Tag im Build-Schritt docker push
an. Im folgenden Beispiel wird ein Image mit dem Tag prod
übertragen:
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 übertragen möchten, fügen Sie der Liste der Argumente im Build-Schritt 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