Images per Push und Pull übertragen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Auf dieser Seite wird gezeigt, wie Sie Container-Images hoch- und herunterladen.

Unter Images verwalten finden Sie Anleitungen zum Auflisten, Taggen und Löschen von Images.

Hinweis

  1. Wenn das Ziel-Repository nicht vorhanden ist, erstellen Sie ein neues Repository.
  2. Sie müssen auf das Repository mindestens Zugriff als Artifact Registry-Autor haben.
  3. Installieren Sie Docker, falls es noch nicht installiert ist.

Bei einem Repository authentifizieren

Sie müssen sich bei Repositories jedes Mal authentifizieren, wenn Sie Docker oder einen anderen Drittanbieterclient mit einem Docker-Repository verwenden. In diesem Abschnitt erhalten Sie eine kurze Übersicht darüber, was Sie erfolgreich authentifizieren müssen. Eine ausführliche Anleitung finden Sie unter Authentifizierung für Docker einrichten.

Credential Helper verwenden

Für gcloud Credential Helper oder standalone Credential Helper müssen sich die verwendeten Artifact Registry-Hosts in der Docker-Konfigurationsdatei befinden.

Artifact Registry fügt der Docker-Konfigurationsdatei nicht automatisch alle Registry-Hosts hinzu. Die Docker-Antwortzeit ist bei einer großen Anzahl von konfigurierten Registrys erheblich langsamer. Um die Anzahl der Registries in der Konfigurationsdatei zu minimieren, fügen Sie der Datei die erforderlichen Hosts hinzu.

Führen Sie den folgenden Befehl aus, um zu prüfen, welche Hosts konfiguriert sind, um den Inhalt der Konfigurationsdatei aufzurufen:

  • Linux: cat ~/.docker/config.json
  • Windows: cat %USERPROFILE%\.docker\config.json

Im Abschnitt credHelpers werden die konfigurierten Artifact Registry-Docker-Hosts aufgelistet. Hostnamen enden auf -docker.pkg.dev. Das folgende Beispiel zeigt einige Hosts, die für den gcloud Credential Helper konfiguriert sind.

"credHelpers": {
  "asia.gcr.io": "gcloud",
  "eu.gcr.io": "gcloud",
  "gcr.io": "gcloud",
  "marketplace.gcr.io": "gcloud",
  "northamerica-northeast1-docker.pkg.dev": "gcloud",
  "us-central1-docker.pkg.dev": "gcloud",
  "us-east1-docker.pkg.dev": "gcloud",
  "us.gcr.io": "gcloud"
}

Wenn ein Host, den Sie verwenden möchten, nicht in der Liste enthalten ist, führen Sie den Credential Helper noch einmal aus, um den Host hinzuzufügen. Mit dem folgenden Befehl wird beispielsweise us-east1-docker.pkg.dev hinzugefügt.

  • gcloud Credential Helper:

    gcloud auth configure-docker us-east1-docker.pkg.dev
    
  • Eigenständiger Credential Helper

    docker-credential-gcr configure-docker us-east1-docker.pkg.dev
    

Zugriffstoken

Für die Zugriffstokenauthentifizierung generieren Sie ein Token und verwenden es als Passwort mit dem Befehl docker login. Tokens sind 60 Minuten gültig. Daher sollten Sie sich kurz vor dem Taggen, Übertragen oder Abrufen von Images authentifizieren.

Im folgenden Beispiel wird ein Zugriffstoken mit dem Dienstkonto Identitätswechsel generiert und dann bei Artifact Registry authentifiziert. Sie benötigen entsprechende Berechtigungen in der Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator), um auf diese Weise ein Token zu generieren.

Linux

gcloud auth print-access-token \
  --impersonate-service-account  ACCOUNT | docker login \
  -u oauth2accesstoken \
  --password-stdin https://LOCATION-docker.pkg.dev

Windows

gcloud auth print-access-token
--impersonate-service-account  ACCOUNT

ya29.8QEQIfY_...

docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
https://LOCATION-docker.pkg.dev

Wenn Sie nicht berechtigt sind, die Identität eines Dienstkontos zu übernehmen, können Sie das Dienstkonto in Ihrer gcloud-Sitzung aktivieren und dann ein Token abrufen. Weitere Informationen finden Sie in der Anleitung zum Einrichten der Zugriffstokenauthentifizierung.

Dienstkontoschlüssel verwenden

Für einen Dienstkontoschlüssel verwenden Sie den Schlüssel als Passwort mit dem Befehl docker login.

Im folgenden Befehl wird beispielsweise der base64-codierte Dienstkontoschlüssel in der Datei key.json zur Authentifizierung bei us-east1-docker.pkg.dev verwendet.

Linux

cat key.json | docker login -u _json_key_base64 --password-stdin \
https://us-east1-docker.pkg.dev

Windows

docker login -u _json_key_base64 --password-stdin https://us-east1-docker.pkg.dev < key.json

Weitere Informationen finden Sie in der Anleitung zum Einrichten der Dienstkontoschlüsselauthentifizierung.

Image hochladen

Um ein lokales Image in ein Artifact Registry-Repository per Push zu übertragen, taggen Sie es mit dem Repository-Namen und laden es dann hoch.

Für das Hochladen großer Bilder gelten die folgenden Beschränkungen:

Upload-Zeitpunkt
Wenn Sie sich mit einem Zugriffstoken bei Artifact Registry authentifizieren, ist das Token nur 60 Minuten lang gültig. Wenn die Uploadzeit voraussichtlich mehr als 60 Minuten beträgt, verwenden Sie eine andere Authentifizierungsmethode.
Bildgröße
Die maximale Artefaktgröße beträgt 5 TB.
Artifact Registry unterstützt keine in Docker unterteilten Uploads. Einige Tools unterstützen das Hochladen großer Bilder mit aufgeteilten Uploads oder einem einzelnen monolithischen Upload. Sie müssen monolithische Uploads verwenden, um Images per Push an Artifact Registry zu übertragen.

Lokales Image taggen

  1. Achten Sie darauf, dass Sie für das Repository authentifiziert sind.

  2. Legen Sie den Namen des Images fest. Der vollständige Image-Name hat folgendes Format:

    LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
    

    Ersetzen Sie die folgenden Werte:

    • LOCATION ist der regionale oder multiregionale Speicherort des Repositorys, in dem das Image gespeichert ist, z. B. us-east1 oder us.

    • PROJECT ist die Projekt-ID der Google Cloud Console. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.

    • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.

    • IMAGE ist der Image-Name. Dieser kann vom lokalen Image-Namen abweichen.

    Angenommen, Sie haben ein Image mit folgenden Merkmalen:

    • Speicherort des Repositorys: us-east1
    • Repository-Name: my-repo
    • Projekt-ID: my-project
    • Name des lokalen Images: my-image
    • Name des Zielbilds: test-image

    Der Image-Name in diesem Beispiel lautet dann:

    us-east1-docker.pkg.dev/my-project/my-repo/test-image
    

    Weitere Informationen zum Format des Image-Namens sowie zur Handhabung von auf Domains beschränkten Projekten finden Sie unter Repository- und Image-Namen.

  3. Taggen Sie das lokale Image mit dem Repository-Namen:

    docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
    

    Dabei ist SOURCE-IMAGE der Name des lokalen Images bzw. die Image-ID.

    Dieser Befehl gibt dem Image den Repository-Namen und wendet das Tag latest an.

    Für das Beispiel-Image aus dem vorherigen Schritt verwenden Sie den folgenden Befehl, wenn sich das lokale Image my-image im aktuellen Verzeichnis befindet:

    docker tag my-image us-east1-docker.pkg.dev/my-project/my-repo/test-image
    

    Wenn Sie ein bestimmtes Tag anwenden möchten, geben Sie folgenden Befehl ein:

    docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Um das Tag staging für das Beispiel-Image zu verwenden, fügen Sie zum Befehl :staging hinzu:

    docker tag my-image us-east1-docker.pkg.dev/my-project/my-repo/test-image:staging
    

Getaggtes Image in Artifact Registry hochladen

  1. Achten Sie darauf, dass Sie für das Repository authentifiziert sind.

    Wenn Sie Ihren Docker-Client mit gcloud auth configure-docker oder docker-credential-gcr configure-docker konfiguriert haben, prüfen Sie, ob sich der Ziel-Hostname in Ihrer Docker-Konfigurationsdatei befindet.

  2. Laden Sie das getaggte Image mit dem folgenden Befehl hoch:

    docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
    

    Mit diesem Befehl wird das Image mit dem Tag latest hochgeladen. Wenn Sie ein Image mit einem anderen Tag hochladen möchten, verwenden Sie folgenden Befehl:

    docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

Wenn Sie ein Image hochladen, wird es in dem angegebenen Repository gespeichert.

Nach dem Hochladen des Images haben Sie folgende Möglichkeiten:

  • Rufen Sie die Google Cloud Console auf, um das Image anzusehen.

  • Führen Sie den Befehl gcloud aus, um die Tags und den automatisch generierten Digest des Images anzeigen zu lassen:

    gcloud artifacts docker images list \
    LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE [--include-tags]
    

    Die folgende Beispielausgabe enthält abgeschnittene Image-Digests. Der Befehl gibt aber immer den vollständigen Image-Digest zurück.

     IMAGE                                                 DIGEST         CREATE_TIME          UPDATE_TIME
      us-east1-docker.pkg.dev/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:45  2019-04-10T15:08:45
      us-east1-docker.pkg.dev/my-project/my-repo/my-image  sha256:238...  2019-04-10T17:23:53  2019-04-10T17:23:53
      us-east1-docker.pkg.dev/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:46  2019-04-10T15:08:46
    

Images mit Docker abrufen

  1. Achten Sie darauf, dass Sie für das Repository authentifiziert sind.

    Wenn Sie Ihren Docker-Client mit gcloud auth configure-docker oder docker-credential-gcr configure-docker konfiguriert haben, prüfen Sie, ob sich der Ziel-Hostname in Ihrer Docker-Konfigurationsdatei befindet.

  2. Zum Herunterladen von Daten aus einem Repository verwenden Sie folgenden Befehl:

    docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    oder

    docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
    

    Ersetzen Sie die folgenden Werte:

    • LOCATION ist der regionale oder multiregionale Speicherort des Repositorys, in dem das Image gespeichert ist, z. B. us-east1 oder us.
    • PROJECT ist die Projekt-ID der Google Cloud Console. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.
    • REPOSITORY ist der Name des Repositorys, in dem das Image gespeichert ist.
    • IMAGE ist der Name des Images im Repository.
    • TAG ist das Tag für die Image-Version, die Sie herunterladen möchten.
    • IMAGE-DIGEST ist der sha256-Hash-Wert des Image-Inhalts. Jede Version eines Images hat einen eigenen Image-Digest. Klicken Sie in der Google Cloud Console auf das jeweilige Image, um dessen Metadaten aufzurufen. Der Digest wird unter Image-Digest aufgeführt.

    Angenommen, Sie haben ein Image mit folgenden Merkmalen:

    • Speicherort des Repositorys: us-east1
    • Repository-Name: my-repo
    • Projekt-ID: my-project
    • Image-Name: test-image
    • Tag: staging

    Der Befehl zum Herunterladen dieses Images lautet dann:

    docker pull us-east1-docker.pkg.dev/my-project/my-repo/test-image:staging
    

Images werden mit crictl abgerufen

crictl ist ein nützliches Befehlszeilentool für CRI-Laufzeitentwickler, mit denen sie Fehler in ihrer Laufzeit beheben können, ohne Kubernetes-Komponenten einrichten zu müssen. Wenn Ihre Google Kubernetes Engine-Knoten eine containerd-Laufzeit verwenden, können Sie Images mit crictl aus Artifact Registry abrufen.

Da crictl in erster Linie ein Tool zur Fehlerbehebung ist, sind einige Docker-Befehle wie das Pushen oder Taggen von Images nicht verfügbar.

So rufen Sie ein Image aus Artifact Registry ab:

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Stellen Sie eine SSH-Verbindung zu dem Knoten her, für den Sie eine Fehlerbehebung durchführen.

  3. Zugriffstoken für die Authentifizierung mit dem Repository abrufen.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
  4. Rufen Sie das Image mit crictl pull --creds und dem Wert access_token ab

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG

    oder

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST

    Die Ausgabe sieht so aus:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

Weitere Informationen