Warum sollten Sie ein Docker-Image herunterladen und nicht nur aus der Docker-Datei für lokale Entwickler erstellen?

Ursprünglich veröffentlicht auf coreycleary.me . Dies ist ein Cross-Post aus meinem Content-Blog. Ich veröffentliche alle ein bis zwei Wochen neue Inhalte, und Sie können sich für meinen Newsletter anmelden, wenn Sie meine Artikel direkt in Ihren Posteingang erhalten möchten! Ich versende auch regelmäßig Cheatsheets und andere Freebies.

Wenn Sie mit Docker arbeiten, haben Sie normalerweise eine Art Bildbibliothek/-registrierung wie Docker Hub, in die erstellte Bilder hochgeladen werden.

Wenn Sie dann dieses Image verwenden müssen (sagen wir, Sie müssen eine REST-API für die von Ihnen entwickelte Benutzeroberfläche einrichten), laden Sie dieses Image aus dem Repository herunter und erstellen/starten den Container.

Normalerweise dauert das Herunterladen dieser Bilder nicht allzu lange, aber je nach Ihrer Verbindungsgeschwindigkeit und der Größe des Bildes könnte es passieren dauert eine Weile, um es herunterzuladen.

In jedem Fall fragen Sie sich vielleicht, warum Sie es herunterladen sollten, wenn Sie das Image einfach lokal mit docker build erstellen könnten mit der Dockerdatei?

Da Docker immer mehr zu einer gefragten technischen Fähigkeit wird, ist es gut, die Vor- und Nachteile verschiedener Ansätze zu kennen. Auch wenn Sie die "Best Practices" befolgen, ist es gut zu verstehen, warum diese Praktiken existieren.

Werfen wir also einen Blick auf einige der Gründe dafür, mit erstellten Images zu arbeiten, anstatt das Image selbst zu erstellen.

Unterschiede zwischen einem Dockerfile und einem Docker-Image

Der einfachste Weg, um über das Dockerfile im Vergleich zum Docker-Image nachzudenken, ist:

  • Dockerfile:Rezept zum Backen eines Kuchens
  • Docker-Bild:der Kuchen selbst

Stellen wir uns vor, wir arbeiten mit Node:the Dockerfile enthält die Anweisungen zum Installieren von Node/Erstellen eines Node-Containers, Installieren von Node-Modulen, Kopieren des Quellcodes und alle anderen Schritte, die zum Einrichten der Node-App erforderlich sind.

Aber es ist nur die Anleitung.

Das Docker-Image wäre diese Node-App selbst. Es ist aus gebaut die Dockerdatei.

Und meistens wird dieser Build in Ihrer CI/CD-Pipeline ausgeführt und dann als Teil derselben Pipeline in Ihre Registrierung hochgeladen.

Warum Bilder heruntergeladen und nicht lokal erstellt werden

Du musst sowieso Sachen herunterladen
Obwohl die Geschwindigkeit des Herunterladens/Pullens eines Images von der Geschwindigkeit der Netzwerkverbindung und der Größe des Images abhängt, müssten Sie, wenn Sie stattdessen manuell aus der Dockerfile erstellen würden, dennoch alle Abhängigkeiten herunterladen, die als Teil der Dockerfile-Anweisungen enthalten sind.

Beispielsweise müssten Sie bei einem Node Dockerfile ohnehin alle diese Node-Module herunterladen, da das Dockerfile normalerweise einen npm install enthält Schritt.

In gewisser Weise ist es wie die Installation von Node-Modulen mit npm install vs. den Quellcode für dieses Modul herunterladen und von dort aus erstellen. So wie das Erstellen eines Node-Moduls möglicherweise nicht einfach ist, ist es manchmal nicht so einfach, ein Docker-Image zu erstellen, wie einfach docker build . auszuführen Beispielsweise könnten Sie --build-args haben oder einige andere Befehlszeilen-Flags/Konfigurationen, die Sie angeben müssen.

Indem Sie also das Image herunterladen, anstatt es zu erstellen, sparen Sie sich einen Schritt (oder mehrere Schritte).

Mehrstufige Dockerfile-Builds brauchen länger zum Erstellen
Dockerfiles können mehrstufige Builds verwenden. Bei diesen Builds müssen mehr Schritte / Abhängigkeiten heruntergeladen werden, aber das endgültige Image wird (oder sollte zumindest nicht) alle diese Abhängigkeiten enthalten. Es enthält nur die, die es braucht.

Ein Beispiel dafür könnte sein, dass Sie einige Linux-Pakete herunterladen mussten, um einige Dinge in Ihrem Image zu installieren, aber diese Pakete sind für die Laufzeit nicht erforderlich, also werden sie nach der Installation nicht benötigt.

Wenn Sie ein mehrstufiges Dockerfile manuell erstellen würden, müssten Sie all diese zusätzlichen Dinge herunterladen. Wenn Sie das Bild einfach ziehen würden, wäre es viel weniger herunterzuladen, da das Bild kleiner wäre.

Versionierung für Bilder
Wenn Sie Images in einer Registrierung aufbewahren, haben sie den Vorteil, dass sie versioniert werden können.

Angenommen, Sie beheben ein Problem und müssen eine frühere Version des Bildes herunterladen ... Sie können das tun! Sie können Fehler lokal beheben und versuchen herauszufinden, warum es in der Produktion nicht funktioniert.

Und es ist erwähnenswert, dass dies nicht nur ist ein Vorteil für lokale Entwickler, es ist sehr hilfreich für die Produktion.

Abschluss

Jede Entwicklung bis hin zu Produktionsumgebungen ist anders, und es kann Anwendungsfälle geben, in denen Sie tatsächlich aus der Docker-Datei erstellen müssen, anstatt das Image aus einer Registrierung zu ziehen.

Aber die oben genannten Gründe sollten Ihnen helfen zu verstehen, warum in den meisten Anwendungsfällen das Abrufen bestehender, erstellter Docker-Images, wenn Sie etwas benötigen, gegen das lokal entwickelt werden muss, statt das Image manuell selbst lokal zu erstellen.

Und wenn Sie diesen Beitrag hilfreich fanden, hier ist noch einmal der Link, um meinen Newsletter zu abonnieren!