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 Probleme in Google Kubernetes Engine beheben.
Informationen zur Bereitstellung in Google Cloud Laufzeitumgebungen finden Sie unter In Google Cloudbereitstellen.
Unter Images verwalten finden Sie Anleitungen zum Auflisten, Taggen und Löschen von Images.
Hinweise
- Wenn das Ziel-Repository nicht vorhanden ist, erstellen Sie ein neues Repository.
- Sie müssen auf das Repository mindestens Zugriff als Artifact Registry-Autor haben.
- Installieren Sie Docker, falls es noch nicht installiert ist.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Repository zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Pushen und Pullen von Images benötigen:
-
Images abrufen:
Artifact Registry-Leser (
roles/artifactregistry.reader) -
Images taggen und per Push übertragen:
Artifact Registry-Autor (
roles/artifactregistry.writer)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen 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 oder einen anderen Drittanbieterclient mit einem Docker-Repository verwenden. In diesem Abschnitt finden Sie eine kurze Zusammenfassung der Voraussetzungen für eine erfolgreiche Authentifizierung. Eine ausführliche Anleitung finden Sie unter Authentifizierung für Docker einrichten.
Credential Helper verwenden
Für den gcloud CLI Credential Helper oder den Standalone Credential Helper müssen die von Ihnen verwendeten Artifact Registry-Hosts in Ihrer Docker-Konfigurationsdatei enthalten sein.
Artifact Registry fügt nicht automatisch alle Registry-Hosts der Docker-Konfigurationsdatei hinzu. Die Docker-Reaktionszeit ist deutlich langsamer, wenn eine große Anzahl von Registries konfiguriert ist. Um die Anzahl der Registrierungen in der Konfigurationsdatei zu minimieren, fügen Sie die benötigten Hosts in die Datei ein.
Führen Sie den folgenden Befehl aus, um den Inhalt der Konfigurationsdatei aufzurufen und zu prüfen, welche Hosts konfiguriert sind:
- Linux:
cat ~/.docker/config.json - Windows:
type %USERPROFILE%\.docker\config.json
Im Abschnitt credHelpers werden konfigurierte Artifact Registry-Docker-Hosts aufgeführt.
Hostnamen enden mit -docker.pkg.dev. Im folgenden Beispiel sind einige Hosts zu sehen, die für den Anmeldedaten-Helper der gcloud CLI 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 Anmeldeinformations-Helper noch einmal aus, um den Host hinzuzufügen. Mit dem folgenden Befehl wird beispielsweise us-west1-docker.pkg.dev hinzugefügt.
gcloud CLI Credential Helper:
gcloud auth configure-docker us-west1-docker.pkg.devEigenständiger Credential Helper
docker-credential-gcr configure-docker us-west1-docker.pkg.dev
Zugriffstoken verwenden
Bei der Authentifizierung mit Zugriffstoken generieren Sie ein Token und verwenden es als Passwort mit dem Befehl docker login. Tokens sind 60 Minuten lang gültig. Sie sollten sich also kurz vor dem Taggen, Pushen oder Pullen von Images authentifizieren.
Im folgenden Beispiel wird ein Zugriffstoken mithilfe der Dienstkonto-Identitätsübernahme generiert und dann die Authentifizierung bei Artifact Registry durchgeführt. Sie benötigen 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 keine Berechtigungen haben, die Identität eines Dienstkontos zu übernehmen, können Sie das Dienstkonto in Ihrer gcloud CLI-Sitzung aktivieren und dann ein Token abrufen. Weitere Informationen finden Sie in der Anleitung zum Einrichten der Authentifizierung mit Zugriffstoken.
Dienstkontoschlüssel verwenden
Bei einem Dienstkontoschlüssel verwenden Sie den Schlüssel als Passwort mit dem Befehl docker login.
Mit dem folgenden Befehl wird beispielsweise der base64-codierte Dienstkontoschlüssel in der Datei key.json verwendet, 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 mit einem Dienstkontoschlüssel.
Image hochladen
Repository-Modi:Standard
Um ein lokales Image in ein Standard-Docker-Repository hochzuladen, taggen Sie es mit dem Repository-Namen und laden es dann hoch.
Wenn in Ihrem Artifact Registry-Docker-Repository die Unveränderlichkeit von Tags aktiviert ist, muss ein Tag immer auf denselben Image-Digest im Repository verweisen. Sie können das Tag nicht für eine andere Version desselben Images verwenden, die Sie in das Repository übertragen. Weitere Informationen zu Image-Digests, Tags und Tag-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, ist das Token nur 60 Minuten lang gültig. Wenn Sie einen Upload von mehr als 60 Minuten erwarten, verwenden Sie eine andere Authentifizierungsmethode.
- Bildgröße
- Die maximale Größe eines Artefakts beträgt 5 TB.
- Hinweis: Artifact Registry unterstützt keine von Docker aufgeteilten Uploads. Einige Tools unterstützen das Hochladen großer Bilder mit aufgeteilten Uploads oder mit einem einzelnen monolithischen Upload. Sie müssen monolithische Uploads verwenden, um Images in Artifact Registry zu übertragen.
Lokales Image taggen
Vergewissern Sie sich, dass Sie für das Repository authentifiziert sind.
Legen Sie den Namen des Images fest. Der vollständige Image-Name hat folgendes Format:
LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGEErsetzen Sie die folgenden Werte:
LOCATIONist der regionale oder multiregionale Speicherort des Repositorys, in dem das Image gespeichert ist.PROJECT-IDist Ihre Projekt-ID der Google Cloud Console. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.REPOSITORYist der Name des Repositorys, in dem das Image gespeichert ist.IMAGEist 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-imageWeitere Informationen zum Format des Image-Namens sowie zur Handhabung von auf Domains beschränkten Projekten finden Sie unter Repository- und Image-Namen.
Taggen Sie das lokale Image mit dem Repository-Namen.
docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAGErsetzen Sie SOURCE-IMAGE durch den Namen des lokalen Images bzw. die Image-ID und TAG durch das Tag. Wenn Sie kein Tag angeben, wendet Docker das Standard-Tag
latestan.Wenn die Einstellung für unveränderliche Image-Tags aktiviert ist, müssen Tags für jede Image-Version eindeutig sein, einschließlich des
latest-Tags. Sie können kein Image in das Repository übertragen, wenn das Tag bereits von einer anderen Version desselben Images im Repository verwendet wird. Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Einstellung für das Repository aktiviert ist:gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT-ID \ --location=LOCATIONFür das Beispiel-Image aus dem vorherigen Schritt verwenden Sie den folgenden Befehl, wenn sich das lokale Image
my-imageim aktuellen Verzeichnis befindet:docker tag my-image us-west1-docker.pkg.dev/my-project/my-repo/test-imageWenn Sie ein bestimmtes Tag anwenden möchten, geben Sie folgenden Befehl ein:
docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAGUm das Tag
stagingfür das Beispiel-Image zu verwenden, fügen Sie zum Befehl:staginghinzu:docker tag my-image us-west1-docker.pkg.dev/my-project/my-repo/test-image:staging
Getaggtes Image in Artifact Registry hochladen
Vergewissern Sie sich, dass Sie für das Repository authentifiziert sind.
Wenn Sie
gcloud auth configure-dockeroderdocker-credential-gcr configure-dockerzum Konfigurieren Ihres Docker-Clients verwendet haben, prüfen Sie, ob sich der Zielhostname in Ihrer Docker-Konfigurationsdatei befindet.Laden Sie das getaggte Image mit dem folgenden Befehl hoch:
docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGEMit diesem Befehl wird das Image mit dem Tag
latesthochgeladen. 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 sich das Image anzeigen zu lassen.
Führen Sie den Befehl
gcloudaus, 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, virtualVergewissern Sie sich, dass Sie für das Repository authentifiziert sind.
Wenn Sie
gcloud auth configure-dockeroderdocker-credential-gcr configure-dockerzum Konfigurieren Ihres Docker-Clients verwendet haben, prüfen Sie, ob sich der Zielhostname in Ihrer Docker-Konfigurationsdatei befindet.Zum Herunterladen von Daten aus einem Repository verwenden Sie folgenden Befehl:
docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAGoder
docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGESTErsetzen Sie die folgenden Werte:
LOCATIONist der regionale oder multiregionale Speicherort des Repositorys, in dem das Image gespeichert ist.PROJECTist Ihre Projekt-ID der Google Cloud Console. Wenn die Projekt-ID einen Doppelpunkt (:) enthält, finden Sie weitere Informationen unter Auf Domains beschränkte Projekte.PROJECTist Ihre Projekt-ID der Google Cloud Console.REPOSITORYist der Name des Repositorys, in dem das Image gespeichert ist.IMAGEist der Name des Images im Repository.TAGist das Tag für die Image-Version, die Sie herunterladen möchten.IMAGE-DIGESTist der sha256-Hash-Wert des Image-Inhalts. Jede Version eines Bildes hat einen eindeutigen Bild-Digest. Klicken Sie in der Google Cloud Konsole auf das jeweilige Bild, um dessen Metadaten aufzurufen. 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 aus einem Remote-Repository anfordern, lädt das Remote-Repository das Image von der Upstream-Quelle herunter und speichert es im Cache, sofern keine im Cache gespeicherte Kopie vorhanden ist.
Wenn Sie ein Image aus einem virtuellen Repository anfordern, sucht Artifact Registry in Upstream-Repositories nach dem angeforderten Image. Wenn Sie eine Version anfordern, die in mehreren Upstream-Repositories verfügbar ist, wählt Artifact Registry ein Upstream-Repository basierend auf den für das virtuelle Repository konfigurierten Prioritätseinstellungen aus.
Angenommen, Sie haben ein virtuelles Repository mit den folgenden Prioritätseinstellungen für Upstream-Repositories:
main-repo: Priorität auf100festgelegtsecondary-repo1: Die Priorität ist auf80festgelegt.secondary-repo2: Die Priorität ist auf80festgelegt.test-repo: Die Priorität ist auf20festgelegt.
main-repo hat den höchsten Prioritätswert, daher wird immer zuerst in diesem virtuellen Repository gesucht.
Sowohl für secondary-repo1 als auch für secondary-repo2 ist die Priorität auf 80 festgelegt. Wenn ein angefordertes Image nicht in main-repo verfügbar ist, durchsucht Artifact Registry als Nächstes diese Repositories. Da beide denselben Prioritätswert haben, kann Artifact Registry ein Image aus einem der beiden Repositorys bereitstellen, wenn die Version in beiden verfügbar ist.
test-repo hat den niedrigsten Prioritätswert und es wird ein gespeichertes Artefakt bereitgestellt, wenn es in keinem der anderen Upstream-Repositories vorhanden ist.
Bilder mit crictl abrufen
crictl ist ein nützliches Befehlszeilentool für CRI-Laufzeitentwickler, um ihre Laufzeit zu debuggen, 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 laden Sie ein Image aus Artifact Registry herunter:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Stellen Sie eine SSH-Verbindung zum Knoten her, bei dem Sie die Fehlerbehebung durchführen.
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"
Rufen Sie das Image mit
crictl pull --credsund dem Wertaccess_tokenab.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
- Mehr über das Verwalten von Tags und das Löschen von Images erfahren
- Mehr über Container in Compute Engine erfahren, wenn Sie Container in Compute Engine ausführen möchten
crictlzum Debuggen von Kubernetes-Knoten verwendencrictlzum Abrufen von Images aus privaten Artifact Registry-Repositories verwenden- Weitere Informationen zum Konfigurieren von Bildregistrierungen für
crictl