Docker ist eine Plattform für Softwareentwickler und Systemadministratoren zum Erstellen, Ausführen und Teilen von Anwendungen mithilfe von Containern. Ein Container ist ein Prozess, der in einer isolierten Umgebung auf seinem eigenen Dateisystem ausgeführt wird, das mit einem Docker-Image erstellt wird. Ein Image enthält alles, was zum Ausführen Ihrer Anwendung erforderlich ist (kompilierter Code, Abhängigkeiten, Bibliotheken usw.). Bilder werden mithilfe von Dockerfile-Dateien definiert. Die Begriffe Dockerisierung oder Containerisierung werden häufig verwendet, um den Prozess der Erstellung eines Docker-Containers zu definieren. Container sind beliebt, weil sie folgende Vorteile bieten:
In diesem Artikel werde ich mich darauf konzentrieren, wie Docker-Images optimiert werden können, um sie leichter zu machen. Beginnen wir mit einem Beispiel, bei dem wir eine React-Anwendung erstellen und in einen Container packen. Nachdem wir den npx-Befehl ausgeführt und die Docker-Datei erstellt haben, erhalten wir die in Abbildung 1 dargestellte Dateistruktur. npx Erstellen-Reagieren-App App --Vorlage Typescript Abbildung 1: Dateistruktur Wenn wir ein einfaches Dockerfile erstellen (siehe unten), erhalten wir ein 1,16 GB großes Image: VON Knoten:10 WORKDIR /appCOPY app /appRUN npm install -g webserver.localRUN npm install && npm run build EXPOSE 3000CMD webserver.local -d ./build Abbildung 2: Die ursprüngliche Größe des Bildes beträgt 1,16 GB Der erste Schritt der Optimierung: Verwenden eines leichten Basis-ImagesIm Docker Hub (einem öffentlichen Docker-Repository) stehen mehrere Images mit jeweils unterschiedlichen Eigenschaften und Größen zum Download bereit. Normalerweise sind Images, die auf Alpine oder BusyBox basieren, im Vergleich zu Images, die auf anderen Linux-Distributionen (wie Ubuntu) basieren, sehr klein. Dies liegt daran, dass Alpine-Images und ähnliche Images so optimiert sind, dass sie nur die unbedingt erforderlichen Pakete enthalten. Im Bild unten sehen Sie einen Größenvergleich zwischen Ubuntu, Alpine, Node und dem auf Alpine basierenden Node-Image. Abbildung 3: Unterschiedliche Größen der Basisbilder Durch Ändern der Docker-Datei und Verwenden von Alpine als Basis-Image ist unser Image letztendlich 330 MB groß: VON Knoten:10-alpine WORKDIR /appCOPY app /appRUN npm install -g webserver.localRUN npm install && npm run build EXPOSE 3000CMD webserver.local -d ./build Abbildung 4: Nach dem ersten Optimierungsschritt beträgt die Bildgröße 330 MB Zweiter Optimierungsschritt: mehrstufiger AufbauBei mehrstufigen Builds können wir mehrere Basisimages in unserem Dockerfile verwenden und kompilierte Produkte, Konfigurationsdateien usw. von einer Stufe in eine andere kopieren, sodass wir verwerfen können, was wir nicht benötigen. In diesem Fall benötigen wir den kompilierten Code, um die React-Anwendung bereitzustellen. Wir benötigen weder die Quelldateien, das Verzeichnis node_modules, die Datei package.json usw. Folgen Sie dem öffentlichen Konto Nifengqibi, antworten Sie als PDF und laden Sie alle Lernmaterialien herunter, die Sie benötigen. Durch Ändern des Docker-Files mit dem folgenden Inhalt erhalten wir schließlich eine Bildgröße von 91,5 MB. Denken Sie daran, dass das Image aus der ersten Phase (Zeilen 1–4) nicht automatisch gelöscht wird. Docker behält es im Cache, wodurch der Image-Aufbau beschleunigt werden kann, wenn wir dieselbe Phase in einem anderen Image-Aufbauprozess ausführen. Sie müssen das Bild der ersten Stufe also manuell löschen. VON Knoten:10-alpine AS buildWORKDIR /appCOPY app /appRUN npm install && npm run build VON Knoten:10-alpineWORKDIR /appRUN npm install -g webserver.localCOPY --from=build /app/build ./buildEXPOSE 3000CMD webserver.local -d ./build Abbildung 5: Die Bildgröße nach dem zweiten Optimierungsschritt beträgt 91,5 MB Jetzt haben wir ein Dockerfile mit zwei Phasen: In der ersten Phase kompilieren wir das Projekt und in der zweiten Phase stellen wir die Anwendung auf dem Webserver bereit. Allerdings sind Node-Container nicht die beste Wahl zum Bereitstellen von Webseiten (HTML-, CSS- und JavaScript-Dateien, Bilder usw.). Die beste Option ist die Verwendung eines Dienstes wie Nginx oder Apache. In diesem Beispiel verwende ich Nginx. Durch die folgende Änderung des Dockerfiles wird unser Image 22,4 MB groß. Wenn wir diesen Container ausführen, können wir sehen, dass die Webseite ohne Probleme funktioniert (Abbildung 7). VON Knoten:10-alpine AS buildWORKDIR /appCOPY app /appRUN npm install && npm run build VON nginx:stable-alpineCOPY --from=build /app/build /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "Daemon aus;"] Abbildung 6: Die Bildgröße nach dem dritten Optimierungsschritt beträgt 22,4 MB Abbildung 7: Endgültiges Container-Ausführungsergebnis Dies ist das Ende dieses Artikels zur Docker-Image-Optimierung (von 1,16 GB auf 22,4 MB). Weitere relevante Inhalte zur Docker-Image-Optimierung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Warum wird die MySQL-Paging-Funktion bei Verwendung von Limits immer langsamer?
Analysieren Sie vier gängige Methoden und Prinzip...
Die Lösung zum Vergessen des ursprünglichen MySQL...
Wichtige Erkenntnisse: 1. Beherrschung der CSS3-3...
Bevor die neue CSS-Eigenschaft „contain“ vorgeste...
Konfiguration Vorwort Projektaufbau: basierend au...
Inhaltsverzeichnis 1. Ressourcen-Download 2. Entp...
Inhaltsverzeichnis 1. Wenn beim Einfügen oder Änd...
Studiennotizen zu HTML-Entwurfsmustern Diese Woch...
Inhaltsverzeichnis I. Definition 2. Anwendungssze...
23. April 2020: Heute können Sie mit Ubuntu 20.04...
Grundlegende Einführung Im vorherigen Artikel hab...
Ein allgemeines Entwicklungsbedürfnis besteht dar...
Notieren Sie die Problempunkte der MySQL-Produkti...
1. Unterschiede zwischen JSON.stringify() und JSO...
CSS 3-Animationsbeispiel - Dynamischer Effekt des...