View a markdown version of this page

Migrieren Sie Container-Images aus einer Drittanbieter-Registry - Amazon ECR

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:

  1. Identifizieren Sie externe Image-Referenzen in Ihren Build- und Deployment-Dateien.

  2. Planen Sie Ihre Amazon ECR-Repository-Struktur.

  3. Kopieren Sie Bilder nach Amazon ECR.

  4. Überprüfen Sie die Bildintegrität.

  5. Aktualisieren Sie Ihre Bereitstellungskonfigurationen.

  6. Überwachen und validieren.

Voraussetzungen

Bevor Sie beginnen, prüfen Sie Folgendes:

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 in der Docker-Dokumentation.

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.com 111122223333Ersetzen 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 --region us-east-1 | \ docker login --username AWS --password-stdin 111122223333.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 --region us-east-1 | \ skopeo login 111122223333.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

  1. Erstellen Sie das Ziel-Repository (überspringen Sie diesen Schritt, wenn das Repository bereits existiert):

    aws ecr create-repository \ --repository-name base-images/nginx \ --region us-east-1 \ --image-tag-mutability IMMUTABLE \ --encryption-configuration encryptionType=AES256
  2. 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
  3. Taggen Sie das Bild für Ihr Amazon ECR-Repository:

    docker tag nginx:1.25 111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25
  4. Pushen Sie das Bild auf Amazon ECR:

    docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/base-images/nginx:1.25
  5. Um den Repository-URI nach der Erstellung abzurufen, führen Sie folgenden Befehl aus:

    aws ecr describe-repositories --repository-names base-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.

  1. 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
  2. Erstellen Sie das Ziel-Repository:

    aws ecr create-repository \ --repository-name base-images/nginx \ --region us-east-1
  3. 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
  4. Um ein Multiarchitektur-Image mit allen Plattformen zu kopieren, fügen Sie das --all Flag 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.

  1. Holen Sie sich die Zusammenfassung des Bildes in Amazon ECR:

    aws ecr describe-images \ --repository-name base-images/nginx \ --image-ids imageTag=1.25 \ --query 'imageDetails[0].imageDigest' \ --output text
    Anmerkung

    Vergleichen Sie bei Bildern, die nur eine Plattform verwenden, die Digests direkt. Bei Images mit mehreren Architekturen, die mit kopiert wurden--all, steht das imageDigest in Amazon ECR für die Manifestliste. Verwenden Sie skopeo inspect --raw stattdessen (siehe unten), um den Inhalt der Manifestliste zu vergleichen.

  2. 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
  3. 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

  4. 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
  5. (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:

FROM 111122223333.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 RepositoryPullCount Metrik bestätigt, dass Pulls stattfinden. Weitere Informationen finden Sie unter Amazon-ECR-Repository-Metriken.

  • Prüfen Sie CloudTrail , ob BatchGetImage und welche GetDownloadUrlForLayer Ereignisse 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

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