Bilder hoch- und herunterladen

Auf dieser Seite wird beschrieben, wie Sie Container-Images mit Docker hoch- und herunterladen. Außerdem finden Sie Informationen zum Abrufen von Images mit dem crictl-Tool, wenn Sie Fehlerbehebung in Google Kubernetes Engine.

Informationen zur Bereitstellung in Google Cloud-Laufzeitumgebungen finden Sie unter In Google Cloud bereitstellen

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

Hinweise

  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.

Erforderliche Rollen

Um die erforderlichen Berechtigungen zum Übertragen und Abrufen von Images zu erhalten, bitten Sie Ihren Administrator, Ihnen folgende IAM-Rollen für das Repository:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Bei einem Repository authentifizieren

Sie müssen sich bei Repositories authentifizieren, wenn Sie Docker verwenden oder einen Drittanbieter-Client mit einem Docker-Repository. Dieser Abschnitt enthält eine kurze Zusammenfassung dessen, was Sie für die erfolgreiche Authentifizierung benötigen. Ausführliche Informationen finden Sie unter Authentifizierung für Docker einrichten.

Credential Helper verwenden

Für gcloud CLI Credential Helper oder eigenständigen Credential Helper, der Die von Ihnen verwendeten Artifact Registry-Hosts müssen sich in Ihrer Docker-Konfigurationsdatei befinden.

Artifact Registry fügt nicht automatisch alle Registry-Hosts zu Docker-Konfigurationsdatei. Die Docker-Antwortzeit ist deutlich langsamer, Es gibt viele konfigurierte Registrys. Um die Anzahl der Registries in der Konfigurationsdatei an, fügen Sie die benötigten Hosts zur -Datei.

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

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

Im Abschnitt credHelpers werden konfigurierte Docker-Hosts für Artifact Registry aufgeführt. Hostnamen enden auf -docker.pkg.dev. Das folgende Beispiel zeigt einige Hosts Credential Helper für die gcloud CLI konfiguriert.

"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 aufgeführt ist, führen Sie Credential Helper noch einmal aus um den Host hinzuzufügen. Der folgende Befehl fügt beispielsweise us-west1-docker.pkg.dev

  • Credential Helper für die gcloud CLI:

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

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

Zugriffstoken verwenden

Für die Zugriffstoken-Authentifizierung generieren Sie ein Token und verwenden es als Passwort mit dem Befehl docker login. Tokens sind 60 Minuten lang gültig. Sie müssen also sollte sich kurz vor dem Taggen, Übertragen oder Abrufen von Images authentifizieren.

Im folgenden Beispiel wird ein Zugriffstoken mit einem Dienstkonto generiert Identitätsdiebstahl und dann authentifiziert sich bei Artifact Registry. Sie benötigen haben Berechtigungen in der Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator), um ein Token auf diese Weise 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 Aktivieren Sie das Dienstkonto in der gcloud CLI-Sitzung und rufen Sie dann ein Token ab. Weitere Informationen finden Sie in der Anleitung zum Einrichten eines Zugriffstokens. Authentifizierung.

Dienstkontoschlüssel verwenden

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

Im folgenden Befehl wird beispielsweise der base64-codierte Dienstkontoschlüssel verwendet. in der Datei key.json, um sich bei us-west1-docker.pkg.dev zu authentifizieren.

Linux

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

Windows

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

Weitere Informationen finden Sie in der Anleitung zum Einrichten der Authentifizierung für den Dienstkontoschlüssel.

Image hochladen

Repository-Modi: Standard

Um ein lokales Image in ein Standard-Docker-Repository zu übertragen, taggen Sie es mit dem Repository-Namen und laden Sie das Image hoch.

Wenn für Ihr Artifact Registry-Docker-Repository die Tag-Unveränderlichkeit aktiviert ist, muss ein Tag immer auf denselben Image-Digest im Repository verweisen. Sie können nicht das Tag in einer anderen Version des Images verwenden, das Sie per Push-Funktion zu erstellen. Weitere Informationen zu Image-Digests, -Tags und -Tags Unveränderlichkeit finden Sie unter Container-Image-Versionen.

Für große Bilder gelten die folgenden Beschränkungen:

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

Lokales Image taggen

  1. Achten Sie darauf, dass Sie beim 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/die/das regional oder multiregional Speicherort des Repositorys, in dem sich das Image befindet gespeichert ist.

    • PROJECT-ID ist Ihre Google Cloud Console Projekt-ID. 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-west1
    • Repository-Name: my-repo
    • Projekt-ID: my-project
    • Name des lokalen Images: my-image
    • Name des Ziel-Images: test-image

    Der Image-Name in diesem Beispiel lautet dann:

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

    Weitere Informationen zum Format von Image-Namen darunter die Verwaltung domainspezifischer Projekte, Siehe 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:TAG
    

    Ersetzen Sie SOURCE-IMAGE durch den Namen oder die Image-ID des lokalen Images und TAG durch das Tag. Wenn Sie kein Tag angeben, wendet Docker Standard-latest-Tag.

    Wenn die Einstellung für unveränderliche Image-Tags aktiviert ist, müssen Tags für jede Image-Version, einschließlich des latest-Tags. Sie können kein Image per Push an Das Repository, wenn das Tag bereits von einer anderen Version derselben Image im Repository gespeichert. Um zu prüfen, ob die Einstellung für die Repository, führen Sie den folgenden Befehl aus:

    gcloud artifacts repositories describe REPOSITORY \
        --project=PROJECT-ID \
        --location=LOCATION
    

    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-west1-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-west1-docker.pkg.dev/my-project/my-repo/test-image:staging
    

Getaggtes Image in Artifact Registry hochladen

  1. Achten Sie darauf, dass Sie beim Repository authentifiziert sind.

    Wenn Sie gcloud auth configure-docker oder docker-credential-gcr configure-docker, um Ihren Docker-Client zu konfigurieren, Prüfen Sie, ob sich der Zielhostname 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 die Bild.

  • 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-west1-docker.pkg.dev/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:45  2019-04-10T15:08:45
      us-west1-docker.pkg.dev/my-project/my-repo/my-image  sha256:238...  2019-04-10T17:23:53  2019-04-10T17:23:53
      us-west1-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

Repository-Modi: Standard, Remote, Virtual

  1. Achten Sie darauf, dass Sie beim Repository authentifiziert sind.

    Wenn Sie gcloud auth configure-docker oder docker-credential-gcr configure-docker, um Ihren Docker-Client zu konfigurieren, Prüfen Sie, ob sich der Zielhostname 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/die/das regional oder multiregional Speicherort des Repositorys, in dem sich das Image befindet gespeichert ist.
    • PROJECT ist Ihre Google Cloud Console Projekt-ID. 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 eindeutigen Image-Digest. In der Google Cloud Console auf das Bild klicken, um dessen Metadaten zu sehen. Der Digest wird unter Image-Digest aufgeführt.

    Angenommen, Sie haben ein Image mit folgenden Merkmalen:

    • Speicherort des Repositorys: us-west1
    • 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-west1-docker.pkg.dev/my-project/my-repo/test-image:staging
    

Docker lädt das angegebene Image herunter.

Wenn Sie ein Image von einem Remote-Repository anfordern, das Bild aus der Upstream-Quelle herunterlädt und im Cache speichert, wenn eine Cache-Kopie existieren.

Wenn Sie ein Image von einem virtuellen Repository anfordern, sucht in Upstream-Repositories nach dem angeforderten Image. Wenn Sie eine die in mehr als einem Upstream-Repository verfügbar ist, Artifact Registry wählt anhand des zu verwendenden Upstream-Repositorys Prioritätseinstellungen, die für das virtuelle Repository konfiguriert wurden.

Betrachten Sie beispielsweise ein virtuelles Repository mit den folgenden Prioritätseinstellungen. für Upstream-Repositories:

  • main-repo: Priorität auf 100 festgelegt
  • secondary-repo1: Priorität auf 80 festgelegt.
  • secondary-repo2: Priorität auf 80 festgelegt.
  • test-repo: Priorität auf 20 festgelegt.

main-repo hat den höchsten Prioritätswert, sodass das virtuelle Repository und sucht immer zuerst danach.

Sowohl secondary-repo1 als auch secondary-repo2 haben die Priorität 80. Wenn ein Das angeforderte Image ist in main-repo, Artifact Registry nicht verfügbar diese Repositories als Nächstes durchsucht. Da beide den gleichen Prioritätswert haben, Artifact Registry kann ein Image aus beiden Repositorys bereitstellen wenn die Version in beiden verfügbar ist.

test-repo hat den niedrigsten Prioritätswert und stellt ein gespeichertes Artefakt bereit, wenn keines der anderen vorgelagerten Repositories.

Bilder mit crictl werden abgerufen

crictl ist ein nützliches Befehlszeilentool für CRI-Laufzeitentwickler zur Fehlerbehebung. ohne Kubernetes-Komponenten einrichten zu müssen. Wenn Ihr Google Kubernetes Engine-Knoten verwenden eine containerd-Laufzeit, aus der Sie Images abrufen können Artifact Registry mit crictl verwenden.

Da crictl in erster Linie ein Tool zur Fehlerbehebung ist, können einige Docker-Befehle wie dass Bilder nicht übertragen oder mit Tags versehen werden können.

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. SSH-Verbindung mit den Knoten, für den Sie eine Fehlerbehebung durchführen.

  3. Rufen Sie ein Zugriffstoken für die Authentifizierung beim Repository ab.

    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

Nächste Schritte