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.
Optimierung der Leistung für Amazon ECR
Sie können die folgenden Empfehlungen zu Einstellungen und Strategien verwenden, um die Leistung bei der Verwendung von Amazon ECR zu optimieren.
- Verwenden von Docker 1.10 (und neueren Versionen) für simultanes Hochladen der Layer
-
Docker-Images bestehen aus Ebenen, d. h. aus Zwischenschritten bei der Erstellung des Images. Jede Zeile in einer Docker-Datei führt zur Erstellung eines neuen Layers. Wenn Sie Docker 1.10 und höher verwenden, überträgt Docker standardmäßig so viele Schichten wie möglich gleichzeitig auf Amazon ECR, was zu schnelleren Hochladezeiten führt.
- Verwenden eines kleineren Basis-Image
-
In den von Docker Hub bereitgestellten Standard-Images sind möglicherweise Abhängigkeiten vorhanden, die für Ihre Anwendung nicht benötigt werden. Ziehen Sie in Betracht, ein kleineres Image zu verwenden, das über die Docker-Community bereitgestellt wird. Alternativ können Sie das Scratch-Image von Docker als Basis nutzen und ein eigenes Image erstellen. Weitere Informationen finden Sie unter Ein Basis-Image erstellen
in der Docker-Dokumentation. - Platzieren der Abhängigkeiten mit den wenigsten Änderungen an vorderer Stelle in der Docker-Datei
-
Docker legt die Layer im Zwischenspeicher ab, um die Erstellungszeiten zu verkürzen. Hat sich der Layer seit der letzten Erstellung nicht geändert, verwendet Docker die zwischengespeicherte Version (anstatt den Layer neu zu erstellen). Jedoch basiert jeder Layer auf den vorherigen Layern. Wenn ein Layer geändert wurde, erstellt Docker nicht nur diesen Layer neu, sondern auch alle nachfolgenden Layer.
Um die Zeit zu minimieren, die für die Neuerstellung eines Dockerfiles und das erneute hochladen von Ebenen benötigt wird, sollten Sie die Abhängigkeiten, die sich am wenigsten häufig ändern, am Anfang Ihres Dockerfiles platzieren. Abhängigkeiten mit häufigen Änderungen (z. B. der Quellcode der Anwendung) platzieren Sie hingegen an späterer Position im Stack.
- Verketten von Befehlen zur Vermeidung unnötiger Dateispeicherung
-
Die auf einem Layer erstellten Zwischendateien bleiben ein Bestandteil des Layers, auch wenn sie in einem nachfolgenden Layer gelöscht werden. Betrachten Sie das folgende Beispiel:
WORKDIR /tmp RUN wget http://example.com/software.tar.gz RUN wget tar -xvf software.tar.gz RUN mv software/binary /opt/bin/myapp RUN rm software.tar.gz
In diesem Beispiel enthalten die mit dem ersten und dem zweiten RUN-Befehl erstellten Layer die ursprüngliche .tar.gz-Datei und den vollständigen unkomprimierten Inhalt. Dies trifft zu, obwohl die .tar.gz-Datei mit dem vierten RUN-Befehl gelöscht wird. Diese Befehle können zu einer einzigen RUN-Anweisung verkettet werden, damit diese unnötigen Dateien nicht mehr im letztendlichen Docker-Image enthalten sind:
WORKDIR /tmp RUN wget http://example.com/software.tar.gz &&\ wget tar -xvf software.tar.gz &&\ mv software/binary /opt/bin/myapp &&\ rm software.tar.gz
- Verwenden des nächstgelegenen regionalen Endpunkts
-
Sie können die Latenz beim Abrufen von Images aus Amazon ECR verringern, indem Sie sicherstellen, dass Sie den regionalen Endpunkt verwenden, der dem Ort, an dem Ihre Anwendung ausgeführt wird, am nächsten ist. Wenn Ihre Anwendung auf einer EC2 Amazon-Instance ausgeführt wird, können Sie den folgenden Shell-Code verwenden, um die Region aus der Availability Zone der Instance abzurufen:
REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone |\ sed -n 's/\(\d*\)[a-zA-Z]*$/\1/p')
Die Region kann mithilfe des --region Parameters an AWS CLI Befehle übergeben oder mithilfe des aws configure Befehls als Standardregion für ein Profil festgelegt werden. Sie können die Region auch festlegen, wenn Sie mit dem AWS SDK Anrufe tätigen. Weitere Informationen finden Sie in der SDK-Dokumentation für Ihre Programmiersprache.