Mit Docker Hub-Images interagieren

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 und benutzerdefinierte Images abrufen, die in Ihrem Build-Schritt in Docker Hub gespeichert sind. Dazu geben Sie den Namen des Images in der name-Feld. Cloud Build ruft zuerst das angegebene Image von Docker Hub ab und führt dann mit dem Image den Build-Schritt aus.

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 in Secret Manager speichern

Cloud Build muss sich mit Ihren Anmeldedaten bei Docker authentifizieren, um private Images abzurufen und öffentliche und private Images in Docker Hub zu übertragen. Wenn Sie Docker-Anmeldedaten in Ihre Builds aufnehmen möchten, müssen Sie diese zuerst in Secret Manager speichern und dann Cloud Build Zugriff auf das Secret über Secret Manager gewähren.

So speichern Sie Docker-Anmeldedaten in Secret Manager:

  1. Rufen Sie in der Cloud Console die Seite "Secret Manager" auf:

    Zur Seite "Secret Manager"

  2. Klicken Sie auf der Seite Secret Manager auf Secret erstellen.

  3. Geben Sie auf der Seite Secret erstellen unter Name den Wert docker-username ein.

  4. Geben Sie im Feld Secret-Wert Ihren Docker-Nutzernamen ein.

  5. Lassen Sie den Abschnitt Regionen unverändert.

  6. Klicken Sie auf Secret erstellen.

Wiederholen Sie die obigen Schritte, um Ihr Docker-Passwort in Secret Manager zu speichern.

So weisen Sie dem Cloud Build-Dienstkonto die IAM-Rolle Secret Manager Secret Accessor für das Secret zu:

  1. Öffnen Sie die Seite "Secret Manager" in der Google Cloud Console:

    Zur Seite „Secret Manager“

  2. Klicken Sie auf das Kästchen des Secrets, das Ihrem Docker-Nutzernamen und dem Passwort entspricht.

  3. Falls es noch nicht geöffnet ist, klicken Sie auf Infofeld ansehen, um es zu öffnen.

  4. Klicken Sie im Steuerfeld unter Berechtigungen auf Hauptkonto hinzufügen.

  5. Geben Sie im Textfeld Neue Hauptkonten die E-Mail-Adresse Ihres Cloud Build-Dienstkontos im Format PROJECT_NUMBER@cloudbuild.gserviceaccount.com ein, wobei PROJECT_NUMBER die Projektnummer des Projekt, in dem Builds ausgeführt werden. Sie finden die Projektnummer auf der Seite mit den Projekteinstellungen.

  6. Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle Zugriffsfunktion für Secret Manager-Secrets aus.

  7. Klicken Sie auf Speichern.

Private Images aus Docker Hub abrufen

So rufen Sie private Images aus Docker Hub ab:

  1. Prüfen Sie, ob Sie Ihre Docker-Anmeldedaten in Secret Manager gespeichert und Cloud Build Zugriff auf das Secret gewährt haben.

  2. In der Build-Konfigurationsdatei:

    • Fügen Sie nach dem Build-steps ein availableSecrets-Feld hinzu, das die Secret-Version und die Umgebungsvariable für den Docker-Nutzernamen und das Passwort angibt.
    • In dem Build-Schritt, in dem Sie den Nutzernamen und das Passwort angeben möchten:
      • Fügen Sie das Feld entrypoint hinzu, das auf bash 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 ein 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. Alle Strings, die Sie nach -c übergeben, werden als Befehl behandelt. Weitere Informationen zum Ausführen von Bash-Befehlen mit -c finden Sie in der Bash-Dokumentation.
      • Geben Sie das Secret mit der Umgebungsvariable $$ im Feld args an.

    Die folgende Build-Konfigurationsdatei zeigt, wie Sie sich mit dem in Secret Manager gespeicherten Docker-Nutzernamen und dem zugehörigen 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 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 Ihres Docker-Repositorys, von dem Sie das Image abrufen.
    • TAG ist der Tag-Name Ihres Images.
  3. 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:

  1. Prüfen Sie, ob Sie Ihre Docker-Anmeldedaten in Secret Manager gespeichert und Cloud Build Zugriff auf das Secret gewährt haben.

  2. In der Build-Konfigurationsdatei:

    • Fügen Sie nach dem Build-steps ein availableSecrets-Feld hinzu, das die Secret-Version und die Umgebungsvariable für den Docker-Nutzernamen und das Passwort angibt.
    • In dem Build-Schritt, in dem Sie den Nutzernamen und das Passwort angeben möchten:
      • Fügen Sie das Feld entrypoint hinzu, das auf bash 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 ein 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 nach -c übergebene String wird als Befehl behandelt. Weitere Informationen zum Ausführen von Bash-Befehlen mit -c finden Sie in der Bash-Dokumentation.
      • Geben Sie das Secret mit der Umgebungsvariable $$ im Feld args an.

    Die folgende Build-Konfigurationsdatei zeigt, wie Sie sich bei Docker anmelden, ein Image mit lokal gespeichertem Quellcode erstellen und das Image dann per Push in das Docker-Repository übertragen.

    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 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 ist der Name des Docker-Repositorys, in das Sie das Image übertragen.
    • TAG ist der Tag-Name Ihres Images.
  3. Verwenden Sie die Build-Konfigurationsdatei, um einen Build manuell zu starten oder Builds mit Triggern zu automatisieren.

Nächste Schritte