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.
Optimieren Sie AWS App2Container-generierte Docker-Images
Erstellt von Varun Sharma () AWS
Umgebung: PoC oder Pilotprojekt | Technologien: Container und Mikroservices; Modernisierung; DevOps | AWSdienstleistungen: Amazon ECS |
Übersicht
AWSApp2Container ist ein Befehlszeilentool, das dabei hilft, bestehende Anwendungen, die vor Ort oder auf virtuellen Maschinen ausgeführt werden, in Container umzuwandeln, ohne dass Codeänderungen erforderlich sind.
Basierend auf dem Anwendungstyp verfolgt App2Container einen konservativen Ansatz zur Identifizierung von Abhängigkeiten. Im Prozessmodus sind alle Dateien auf dem Anwendungsserver im Container-Image enthalten. In solchen Fällen kann ein ziemlich großes Bild generiert werden.
Dieses Muster bietet einen Ansatz zur Optimierung der von App2Container generierten Container-Images. Es gilt für alle Java-Anwendungen, die von App2Container im Prozessmodus entdeckt wurden. Der im Muster definierte Workflow ist für die Ausführung auf dem Anwendungsserver konzipiert.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS Konto
Eine Java-Anwendung, die auf einem Anwendungsserver auf einem Linux-Server läuft
Architektur
Quelltechnologie-Stack
Eine Java-Anwendung, die auf einem Linux-Server läuft
Zieltechnologie-Stack
Ein von App2Container generiertes Docker-Image
Ablauf der Zielarchitektur
Ermitteln Sie die Anwendungen, die auf dem Anwendungsserver ausgeführt werden, und analysieren Sie die Anwendungen.
Containerisieren Sie die Anwendungen.
Bewerten Sie die Größe des Docker-Images. Wenn das Bild zu groß ist, fahren Sie mit Schritt 4 fort.
Verwenden Sie das Shell-Skript (im Anhang), um große Dateien zu identifizieren.
Aktualisieren Sie die
appSpecificFiles
ListenappExcludedFiles
und in deranalysis.json
Datei.
Tools
Tools
AWSApp2Container — AWS App2Container (A2C) ist ein Befehlszeilentool, mit dem Sie Anwendungen, die in Ihrem lokalen Rechenzentrum oder auf virtuellen Maschinen ausgeführt werden, verschieben können, sodass sie in Containern ausgeführt werden, die von Amazon Elastic Container Service (AmazonECS) oder Amazon Elastic Kubernetes Service (Amazon) verwaltet werden. EKS
Code
Das optimizeImage.sh
Shell-Skript und eine Beispieldatei sind angehängt. analysis.json
Die optimizeImage.sh
Datei ist ein Utility-Skript zur Überprüfung des Inhalts der von App2Container generierten Datei,. ContainerFiles.tar
Bei der Überprüfung werden Dateien oder Unterverzeichnisse identifiziert, die groß sind und ausgeschlossen werden können. Das Skript ist ein Wrapper für den folgenden Tar-Befehl.
tar -Ptvf <path>|tr -s ' '|cut -d ' ' -f3,6| awk '$2 ~/<filetype>$/'| awk '$2 ~/^<toplevel>/'| cut -f1-<depth> -d'/'|awk '{ if ($1>= <size>) arr[$2]+=$1 } END { for (key in arr) { if(<verbose>) printf("%-50s\t%-50s\n", key, arr[key]) else printf("%s,\n", key) } } '|sort -k2 -nr
Im Befehl tar verwendet das Skript die folgenden Werte:
| Der Pfad zu |
| Der passende Dateityp |
| Das Verzeichnis auf oberster Ebene, das dem entsprechen soll |
| Die Tiefe des absoluten Pfads |
| Die Größe für jede Datei |
Das -Skript führt folgende Aktionen aus:
Es wird verwendet
tar -Ptvf
, um die Dateien aufzulisten, ohne sie zu extrahieren.Es filtert die Dateien nach Dateityp, beginnend mit dem Verzeichnis der obersten Ebene.
Basierend auf der Tiefe generiert es den absoluten Pfad als Index.
Basierend auf dem Index und den Speichern gibt es die Gesamtgröße des Unterverzeichnisses an.
Es gibt die Größe des Unterverzeichnisses aus.
Sie können die Werte auch manuell im Befehl tar ersetzen.
Epen
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Entdecken Sie die lokalen Java-Anwendungen. | Führen Sie den folgenden Befehl aus, um alle Anwendungen zu ermitteln, die auf dem Anwendungsserver ausgeführt werden.
| AWS DevOps |
Analysieren Sie die erkannten Anwendungen. | Führen Sie den folgenden Befehl aus
| AWS DevOps |
Containerisieren Sie die analysierten Anwendungen. | Führen Sie den folgenden Befehl aus, um eine Anwendung zu containerisieren.
Der Befehl generiert das Docker-Image zusammen mit einem Tar-Bundle am Workspace-Speicherort. Wenn das Docker-Image zu groß ist, fahren Sie mit dem nächsten Schritt fort. | AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Identifizieren Sie die Größe der Tar-Datei für Artefakte. | Identifizieren Sie die
Dies ist die Gesamtgröße der TAR-Datei nach der Optimierung. | AWS DevOps |
Listet die Unterverzeichnisse unter dem Verzeichnis/und ihre Größen auf. | Führen Sie den folgenden Befehl aus, um die Größe der wichtigsten Unterverzeichnisse unter dem Verzeichnis der
| AWS DevOps |
Identifizieren Sie große Unterverzeichnisse unter dem Verzeichnis/. | Identifizieren Sie für jedes Hauptunterverzeichnis, das im vorherigen Befehl aufgeführt ist, die Größe seiner Unterverzeichnisse. Wird verwendet Verwenden Sie es beispielsweise
Wiederholen Sie diesen Vorgang für jedes Unterverzeichnis, das im vorherigen Schritt aufgeführt wurde (z. B., | AWS DevOps |
Analysieren Sie den großen Ordner in jedem Unterverzeichnis unter dem Verzeichnis/. | Identifizieren Sie für jedes Unterverzeichnis, das im vorherigen Schritt aufgeführt wurde, alle Ordner, die zum Ausführen der Anwendung erforderlich sind. Verwenden Sie beispielsweise die Unterverzeichnisse aus dem vorherigen Schritt und listen Sie alle Unterverzeichnisse im
Um Unterverzeichnisse auszuschließen, die von der Anwendung nicht benötigt werden, fügen Sie diese Unterverzeichnisse in der Eine | AWS DevOps |
Identifizieren Sie die benötigten Dateien aus der appExcludes Liste. | Identifizieren Sie für jedes Unterverzeichnis, das appExcludes der Liste hinzugefügt wird, alle Dateien in diesem Unterverzeichnis, die von der Anwendung benötigt werden. Fügen Sie in der Datei analysis.json die spezifischen Dateien oder Unterverzeichnisse im Abschnitt darunter hinzu. Wenn das | AWS DevOps |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Containerisieren Sie die analysierte Anwendung. | Führen Sie den folgenden Befehl aus, um die Anwendung zu containerisieren.
Der Befehl generiert das Docker-Image zusammen mit einem Tar-Bundle am Workspace-Speicherort. | AWS DevOps |
Identifizieren Sie die Größe der Tar-Datei für Artefakte. | Identifizieren Sie die
Dies ist die Gesamtgröße der TAR-Datei nach der Optimierung. | AWS DevOps |
Führen Sie das Docker-Image aus. | Um zu überprüfen, ob das Image ohne Fehler gestartet wird, führen Sie das Docker-Image lokal mit den folgenden Befehlen aus. Um den des Um den Container auszuführen, verwenden Sie | AWS DevOps |
Zugehörige Ressourcen
AWSApp2Container — Ein neues Containerisierungstool für Java und. NET
Anwendungen (Blogbeitrag)