Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Migrieren Sie Container-Images aus einer Drittanbieter-Registry
Verwenden Sie dieses Handbuch, um eine einmalige Kopie von Container-Images aus einer externen Registrierung in Ihre private Amazon ECR-Registrierung durchzuführen, in der der ECR Pull Through Cache nicht unterstützt wird.
Wenn es sich bei Ihrer Quelle um eine unterstützte Upstream-Registry handelt, müssen Sie keine einmalige Kopie erstellen. Informationen Synchronisieren Sie eine Upstream-Registrierung mit einer privaten Amazon ECR-Registrierung zum Konfigurieren des automatischen Zwischenspeichers finden Sie unter.
Anmerkung
Amazon ECR speichert die Image-Version, die Sie kopiert haben. Neuere Versionen aus der Quellregistrierung werden nicht automatisch abgerufen. Um ein Bild zu aktualisieren, übertragen Sie die neue Version in Ihr Amazon ECR-Repository.
Überblick über die Migration
Die Migration Ihrer Container-Images umfasst die folgenden sechs Schritte:
-
Identifizieren Sie externe Image-Referenzen in Ihren Build- und Deployment-Dateien.
-
Planen Sie Ihre Amazon ECR-Repository-Struktur.
-
Kopieren Sie Bilder nach Amazon ECR.
-
Überprüfen Sie die Bildintegrität.
-
Aktualisieren Sie Ihre Bereitstellungskonfigurationen.
-
Überwachen und validieren.
Voraussetzungen
Bevor Sie beginnen, prüfen Sie Folgendes:
-
Installieren und konfigurieren Sie die AWS CLI Version 2. Weitere Informationen finden Sie unter Die neueste Version der AWS CLI installieren oder aktualisieren.
-
Installieren Sie Docker Engine oder Docker Desktop Version 20.10 oder höher. Weitere Informationen finden Sie unter Docker Engine installieren in der Docker-Dokumentation
. -
(Optional) Install
skopeo, ein Open-Source-Tool zum Kopieren von Container-Images zwischen Registrierungen ohne lokalen Docker-Daemon. Installationsanweisungen finden Sie unter Skopeo.GitHub -
Stellen Sie sicher, dass Ihre IAM-Identität berechtigt ist, sich bei Ihrer Registrierung zu authentifizieren, Repositorys zu erstellen und Images zu übertragen. Ordnen Sie die
AmazonEC2ContainerRegistryFullAccessverwaltete Richtlinie dem IAM-Benutzer oder der IAM-Rolle zu, mit der Sie diese Befehle ausführen. Weitere Informationen finden Sie unter AWS verwaltete Richtlinien für Amazon Elastic Container Registry.
Schritt 1: Identifizieren Sie externe Bildreferenzen
Suchen Sie in den Dateien, die Sie zum Erstellen und Bereitstellen von Container-Images verwenden, nach Verweisen auf Registrierungen von Drittanbietern.
Die folgenden Befehle verwenden die Linux- und macOS-Shell-Syntax. Verwenden Sie unter Windows Windows Subsystem for Linux (WSL) oder Git Bash.
Identifizieren Sie Verweise in Bereitstellungsmanifesten
Suchen Sie in Ihren Amazon ECS-Aufgabendefinitionen oder Amazon EKS-Manifesten nach Bildreferenzen, die nicht aus dem ECR stammen.
Für Kubernetes-Manifeste:
grep -rnH --include="*.yaml" --include="*.yml" "image:" . | grep -iv "dkr.ecr"
Für die Ausführung von Amazon EKS-Workloads:
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{"\n"}{end}{range .spec.initContainers[*]}{.image}{"\n"}{end}{end}' | sort -u | grep -iv "dkr.ecr"
Für Amazon ECS-Aufgabendefinitionen:
aws ecs list-task-definitions --status ACTIVE --query 'taskDefinitionArns' --output text | \ tr '\t' '\n' | \ xargs -I {} aws ecs describe-task-definition --task-definition {} \ --query 'taskDefinition.containerDefinitions[].image' --output text | \ tr '\t' '\n' | sort -u | grep -iv "dkr.ecr"
Identifizieren Sie Verweise in Dockerfiles
So finden Sie FROM Direktiven, die auf externe Registrierungen in Ihren Build-Verzeichnissen verweisen:
grep -rnH --include="Dockerfile*" "FROM" . | grep -iv "dkr.ecr"
Die Ausgabe zeigt Dateien und Zeilennummern, die auf Bilder außerhalb von Amazon ECR verweisen. Beispiel:
./app/Dockerfile:1:FROM python:3.11-slim ./service/Dockerfile:1:FROM nginx:1.25 ./worker/Dockerfile:3:FROM redis:7-alpine
Identifizieren Sie die Pullfrequenz (optional)
Um zu erfahren, wie häufig Ihre Workloads aus Registrys von Drittanbietern abgerufen werden, überprüfen Sie die Nutzungsanalysen Ihrer Upstream-Registry (Docker Hub stellt beispielsweise Pull-Rate-Daten im Konto-Dashboard bereit). Eine hohe Pull-Frequenz erhöht das Risiko, dass Sie an Ratenlimits stoßen. Informationen zu den Docker Hub-Ratenbegrenzungen finden Sie unter Docker Hub-Ratenbegrenzung
Schritt 2: Planen Sie Ihre Repository-Struktur
Bevor Sie Bilder kopieren, entscheiden Sie, wie Sie sie in Amazon ECR organisieren möchten.
Benennung von Repositorys — Amazon ECR unterstützt Namespace-Präfixe mit Schrägstrichen. Verwenden Sie Namespaces, um verwandte Bilder nach Team, Umgebung oder Anwendung zu gruppieren. Namespaces ermöglichen auch bereichsbezogene IAM-Richtlinien pro Präfix. Beispiel:
base-images/python base-images/nginx team-a/web-app team-b/api-service
Tag-Unveränderlichkeit — Aktivieren Sie für Produktions-Images die Tag-Unveränderlichkeit, um zu verhindern, dass Bild-Tags überschrieben werden. Weitere Informationen finden Sie unter Verhindern, dass Bild-Tags in Amazon ECR überschrieben werden.
Verschlüsselung — Wählen Sie Ihre Verschlüsselungskonfiguration, bevor Sie Repositorys erstellen. Sie können die Verschlüsselungskonfiguration nach der Erstellung des Repositorys nicht ändern. Weitere Informationen finden Sie unter Verschlüsselung im Ruhezustand.
Speicherkosten — Amazon ECR dedupliziert Bildebenen in jedem Repository. Wenn mehrere Images dieselben Basisebenen verwenden, werden Ihnen diese Ebenen nur einmal pro Repository in Rechnung gestellt. Berücksichtigen Sie dies bei Ihren Kostenschätzungen, wenn Sie planen, welche Images migriert werden sollen.
Vorlagen für die Repository-Erstellung — Wenn Sie viele Images migrieren, konfigurieren Sie eine Repository-Erstellungsvorlage für Aktionen beim Erstellen per Push mit Ihren bevorzugten Einstellungen (Tag-Unveränderlichkeit, Verschlüsselung, Lebenszyklus-Richtlinien). Amazon ECR wendet die Vorlageneinstellungen an, wenn es beim ersten Push Repositorys in Ihrem Namen erstellt. Weitere Informationen finden Sie unter Vorlagen zur Steuerung von Repositorys, die während einer Pull-Through-Cache-, Push-Erstellung oder Replikationsaktion erstellt wurden.
Verwaltetes Signieren — Wenn Sie Bilder mit verwalteter Signatur signieren möchten, konfigurieren Sie Ihre Signaturregeln, bevor Sie Bilder übertragen. Das Signieren erfolgt nur zur Push-Zeit. Weitere Informationen finden Sie unter Bilder in Amazon ECR signieren.
Cross-Region Replikation — Wenn Ihre Workloads in mehreren AWS Regionen ausgeführt werden, konfigurieren Sie die Replizierungsregeln, bevor Sie Images übertragen. Bei der Replikation werden nur Images kopiert, die nach der Konfiguration der Regel übertragen wurden. Weitere Informationen finden Sie unter Replikation privater Images in Amazon ECR.
Anmerkung
Multi-architecture Images (Manifestlisten) erfordern, dass Sie zusätzlich zur Manifestliste alle plattformspezifischen Manifeste kopieren. Wenn Sie Docker verwenden, behandeln die docker push Befehle docker pull und nur die Plattform, die Ihrer lokalen Architektur entspricht. Wird verwendetskopeo copy --all, um Images mit mehreren Architekturen zu kopieren, wobei alle Plattformen intakt sind.
Schritt 3: Bilder nach Amazon ECR kopieren
Bevor Sie Bilder kopieren, authentifizieren Sie sich bei Ihrer privaten Amazon ECR-Registrierung. Ihre Registrierungs-URL folgt dem Format. account-id.dkr.ecr.region.amazonaws.com111122223333Ersetzen Sie es in den folgenden Beispielen us-east-1 durch Ihre AWS Konto-ID und durch Ihre Region. In der aws-cn Partition lautet .amazonaws.com.cn das Registrierungs-URL-Suffix. In allen anderen Partitionen (aws,aws-us-gov) lautet das Suffix. .amazonaws.com
Um deine Konto-ID zu finden, führe folgenden Befehl aus:
aws sts get-caller-identity --query Account --output text
Weitere Informationen zu Authentifizierungsmethoden finden Sie unterAuthentifizierung mit privater Registrierung in Amazon ECR.
Wenn Sie Docker (Option A) verwenden, authentifizieren Sie sich mit:
aws ecr get-login-password --regionus-east-1| \ docker login --username AWS --password-stdin111122223333.dkr.ecr.us-east-1.amazonaws.com
Wenn Sie Skopeo (Option B) verwenden, authentifizieren Sie sich stattdessen mit. skopeo login Skopeo unterhält einen eigenen Anmeldeinformationsspeicher, der von Docker getrennt ist:
aws ecr get-login-password --regionus-east-1| \ skopeo login111122223333.dkr.ecr.us-east-1.amazonaws.com --username AWS --password-stdin
Wählen Sie eine der folgenden Methoden, um Ihre Bilder zu kopieren.
Option A: Mit Docker CLI kopieren
Verwenden Sie diese Methode für eine sehr kleine Anzahl von Einzelplattform-Images. Eine ausführliche Beschreibung des Push-Workflows finden Sie unter. Ein Bild in Amazon ECR durch seinen Lebenszyklus bewegen
-
Erstellen Sie das Ziel-Repository (überspringen Sie diesen Schritt, wenn das Repository bereits existiert):
aws ecr create-repository \ --repository-namebase-images/nginx\ --regionus-east-1\ --image-tag-mutability IMMUTABLE \ --encryption-configuration encryptionType=AES256 -
Wenn Sie mit einem authentifizierten Konto Daten von Docker Hub abrufen, um Ratenbegrenzungen zu vermeiden, führen docker login docker.io Sie den Vorgang zuerst aus. Rufen Sie das Image aus der Registrierung eines Drittanbieters ab:
docker pull nginx:1.25 -
Taggen Sie das Bild für Ihr Amazon ECR-Repository:
docker tag nginx:1.25111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25 -
Pushen Sie das Bild auf Amazon ECR:
docker push111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25 -
Um den Repository-URI nach der Erstellung abzurufen, führen Sie folgenden Befehl aus:
aws ecr describe-repositories --repository-namesbase-images/nginx--query 'repositories[0].repositoryUri' --output text
Anmerkung
Die Docker-CLI kopiert nur die Plattform, die Ihrem lokalen Computer entspricht. Um Images mit mehreren Architekturen zu kopieren, verwenden Sie Option B mit. skopeo
Option B: Mit Skopeo kopieren (für die Massenmigration empfohlen)
Das skopeo Tool kopiert Bilder direkt zwischen Registern, ohne sie auf Ihren lokalen Computer zu ziehen. Dieser Ansatz ist bei Massenoperationen schneller und unterstützt Images mit mehreren Architekturen. Skopeo verwendet Transportpräfixe, um Bildstandorte zu identifizieren. Wird docker:// für Remote-Registrierungen verwendet.
-
Authentifizieren Sie sich bei Bedarf bei der Quellregistrierung. Zum Beispiel für Docker Hub:
echo YOUR_TOKEN | skopeo login docker.io --username YOUR_USERNAME --password-stdin -
Erstellen Sie das Ziel-Repository:
aws ecr create-repository \ --repository-namebase-images/nginx\ --regionus-east-1 -
Kopieren Sie das Bild (einzelne Plattform):
skopeo copy docker://docker.io/library/nginx:1.25 \ docker://111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25 -
Um ein Multiarchitektur-Image mit allen Plattformen zu kopieren, fügen Sie das
--allFlag hinzu:skopeo copy --all docker://docker.io/library/nginx:1.25 \ docker://111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25
Anmerkung
skopeo copykopiert keine OCI-Referrer-Artefakte (Signaturen, SBOMs, Bescheinigungen), die einem Bild zugeordnet sind. Wenn Ihren Quellbildern Referrer-Artefakte zugeordnet sind, kopieren Sie diese separat oder signieren Sie die Bilder nach der Migration mithilfe der verwalteten Signatur erneut.
Massenkopie mit einem Skript
Um mehrere Bilder zu migrieren, erstellen Sie eine Textdatei, die Quell- und Zielpaare auflistet, und verwenden Sie dann ein Skript, um sie zu kopieren.
Erstellen Sie eine Datei namens images-to-migrate.txt:
docker.io/library/nginx:1.25 base-images/nginx:1.25 docker.io/library/python:3.11-slim base-images/python:3.11-slim docker.io/library/redis:7-alpine base-images/redis:7-alpine ghcr.io/org/custom-app:v2.1.0 team-a/custom-app:v2.1.0
Führen Sie das folgende Skript aus:
#!/usr/bin/env bash set -euo pipefail ACCOUNT_ID="111122223333" REGION="us-east-1" REGISTRY="${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com" aws ecr get-login-password --region ${REGION} | \ skopeo login ${REGISTRY} --username AWS --password-stdin while IFS=' ' read -r SOURCE DEST; do REPO_NAME=$(echo "${DEST}" | cut -d: -f1) # Create repository if it does not exist aws ecr create-repository \ --repository-name "${REPO_NAME}" \ --region "${REGION}" 2>/dev/null || true echo "Copying ${SOURCE} to ${REGISTRY}/${DEST}" skopeo copy --all "docker://${SOURCE}" "docker://${REGISTRY}/${DEST}" done < images-to-migrate.txt
Anmerkung
Amazon ECR setzt API-Ratenbegrenzungen für Push-Operationen durch. Fügen Sie bei umfangreichen Migrationen eine Wiederholungslogik mit exponentiellem Backoff hinzu, falls Sie auf Drosselung stoßen. Autorisierungstoken laufen nach 12 Stunden ab. Wenn Ihre Migration länger dauert, führen Sie den Authentifizierungsbefehl erneut aus, bevor Sie fortfahren.
Schritt 4: Überprüfen Sie die Integrität des Images
Stellen Sie nach dem Kopieren der Bilder sicher, dass die Bildauszüge in Amazon ECR mit der Quelle übereinstimmen.
-
Holen Sie sich die Zusammenfassung des Bildes in Amazon ECR:
aws ecr describe-images \ --repository-namebase-images/nginx\ --image-ids imageTag=1.25\ --query 'imageDetails[0].imageDigest' \ --output textAnmerkung
Vergleichen Sie bei Bildern, die nur eine Plattform verwenden, die Digests direkt. Bei Images mit mehreren Architekturen, die mit kopiert wurden
--all, steht dasimageDigestin Amazon ECR für die Manifestliste. Verwenden Sie skopeo inspect --raw stattdessen (siehe unten), um den Inhalt der Manifestliste zu vergleichen. -
Vergleichen Sie den Digest mit der Quellregistrierung. Verwenden Sieskopeo, um die Quelle zu überprüfen:
skopeo inspect docker://docker.io/library/nginx:1.25 | grep Digest -
Die Digests müssen für Images, mit denen eine Plattform kopiert wurde, übereinstimmen. skopeo Wenn sie nicht übereinstimmen, wurde der Kopiervorgang nicht erfolgreich abgeschlossen. Versuchen Sie den Kopiervorgang erneut. Wenn Sie Docker (Option A) verwendet haben, kann der Digest abweichen, da Docker Ebenen während des Pull-and-Pushs erneut verarbeiten kann. Verwenden Sie für eine exakte Aufbewahrung des Digest. skopeo
-
aws ecr describe-imagesGibt bei Images mit mehreren Architekturen sowohl die Manifestliste als auch einzelne Plattformmanifeste zurück. Um den Digest der Manifestliste direkt zu vergleichen, verwenden Sie skopeo inspect --raw sowohl für Quelle als auch für Ziel:
skopeo inspect --raw docker://111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25 -
(Optional) Führen Sie einen Image-Scan der migrierten Images durch, um Sicherheitslücken zu identifizieren. Weitere Informationen finden Sie unter Bilder auf Software-Sicherheitslücken in Amazon ECR scannen.
Schritt 5: Aktualisieren Sie die Bereitstellungskonfigurationen
Nachdem Sie die Images verifiziert haben, aktualisieren Sie Ihre Bereitstellungskonfigurationen, um sie von Amazon ECR abzurufen, und aktualisieren Sie Ihre CI/CD Build-Pipelines, um neu erstellte Images an ECR zu übertragen. Dadurch wird sichergestellt, dass future Image-Versionen ohne zusätzliche manuelle Kopien verfügbar sind.
Amazon-ECS-Aufgabendefinitionen
Erstellen Sie eine neue Version Ihrer Aufgabendefinition mit dem aktualisierten Image-URI:
{ "containerDefinitions": [ { "name": "web", "image": "111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25" } ] }
Weitere Informationen finden Sie unter Aktualisieren einer Aufgabendefinition im Amazon ECS Developer Guide.
Amazon EKS- oder Kubernetes-Manifeste
Aktualisieren Sie das image Feld in Ihren Pod-Spezifikationen:
spec: containers: - name: web image:111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25
Stellen Sie sicher, dass sich Ihre Knoten bei Amazon ECR authentifizieren können. Amazon EKS-Knoten verwenden standardmäßig den Amazon ECR Credential Helper, wenn die AmazonEC2ContainerRegistryReadOnly verwaltete Richtlinie an die IAM-Rolle des Knotens angehängt ist.
Docker-Dateien
Aktualisieren Sie die FROM Anweisungen in Ihren Dockerfiles:
FROM111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/python:3.11-slim
Schritt 6: Überwachen und validieren
Stellen Sie nach der erneuten Bereitstellung Ihrer Workloads sicher, dass alle Image-Pulls jetzt von Amazon ECR stammen.
-
Überprüfen Sie die CloudWatch Metriken für Ihre Repositorys. Die
RepositoryPullCountMetrik bestätigt, dass Pulls stattfinden. Weitere Informationen finden Sie unter Amazon-ECR-Repository-Metriken. -
Prüfen Sie CloudTrail , ob
BatchGetImageund welcheGetDownloadUrlForLayerEreignisse vorliegen, um sicherzustellen, dass Ihre Workloads aus den erwarteten Repositorys abgerufen werden. -
(Optional) Richten Sie Lebenszyklusrichtlinien ein, um die Bereinigung alter Image-Versionen zu automatisieren. Weitere Informationen finden Sie unter .
Überlegungen
-
Nicht unterstützte Upstream-Registrierungen — Der Pull Through Cache unterstützt einen bestimmten Satz von Upstream-Registrierungen. Verwenden Sie für Registries, die nicht in dieser Liste enthalten sind (wie JFrog Artifactory, Harbor oder Sonatype Nexus), die Docker-CLI oder kopieren Sie Bilder direkt. skopeo
-
Large-scale oder partitionsübergreifende Übertragungen — Informationen zu Migrationen zwischen AWS Partitionen (z. B.
awszuaws-cn) oder Übertragungen mit Tausenden von Bildern finden Sie unter Anleitungen für Data Transfer Hub auf. AWS -
Lambda — Lambda setzt voraus, dass sich Container-Images in Amazon ECR befinden und kann nicht direkt aus Registrys von Drittanbietern abgerufen werden. Verwenden Sie Option A oder Option B, um Bilder in ECR zu kopieren, bevor Sie Ihre Lambda-Funktion konfigurieren.
Verwandte Ansätze
Pull Through Cache — Wenn es sich bei Ihrer Quellregistrierung um eine der unterstützten Upstream-Registries handelt und Sie möchten, dass Amazon ECR Bilder automatisch abruft und zwischenspeichert, anstatt eine einmalige Kopie durchzuführen, finden Sie weitere Informationen unter. Synchronisieren Sie eine Upstream-Registrierung mit einer privaten Amazon ECR-Registrierung