Wie man dauerhafte Änderungen an Docker-Images sofort vornimmt

Index
  1. Warum Docker-Images sich nicht ändern
  2. Erstellt ein neues Image aus einem laufenden Container
  3. Sehen Sie, wie docker commit funktioniert
  4. Führen Sie Ihr neues Image aus, um gespeicherte Änderungen zu testen
  5. docker commit vs Dockerfile: Wann welches verwenden

Docker-Images sind unveränderlich, gewährleisten Konsistenz und Stabilität. Der Befehl `docker commit` erlaubt es, Änderungen eines laufenden Containers zu speichern und ein neues Image zu erstellen.

Docker-Images sind unveränderlich. Einmal erstellt, verändern sie sich nicht. Dies gewährleistet Konsistenz, Vorhersehbarkeit und Stabilität. Jeder Container, der aus demselben Image erstellt wird, verhält sich identisch, und das Versionieren wird sicher und einfach. Aber was ist, wenn Sie etwas innerhalb eines laufenden Containers ändern müssen, wie das Installieren eines Pakets oder das Aktualisieren einer Konfiguration? Hier kommt docker commit ins Spiel. Es ermöglicht Ihnen, Änderungen in einem laufenden Container festzuhalten und ein neues Image zu erstellen, ohne das Original anzufassen. Dies ist ideal zum Testen von Korrekturen, schnellem Iterieren und zur Bereitstellung von benutzerdefinierten Images, ohne von Grund auf neu zu erstellen.

Warum Docker-Images sich nicht ändern

Docker-Images bestehen aus mehreren schreibgeschützten Schichten. Wenn Sie einen Container starten, fügt Docker eine dünne schreibbare Schicht oben drauf hinzu, die als Container-Schicht bezeichnet wird. Alle Änderungen, die Sie vornehmen, geschehen nur in dieser oberen Schicht. Sobald der Container gelöscht wird, verschwinden alle Änderungen in dieser Schicht, sodass das ursprüngliche Image unverändert bleibt.

Dieses Design garantiert mehrere Vorteile:

  • Jeder Container aus demselben Image verhält sich gleich, was Konsistenz gewährleistet.
  • Änderungen in einem Container beeinflussen andere nicht, was Vorhersehbarkeit bietet.
  • Sie können spezifische Image-Versionen sicher taggen, ohne Risiko.

Dieses Design bietet exzellente Stabilität, schränkt Sie jedoch ein, wenn Sie schnelle Änderungen an einem laufenden Container vornehmen möchten. Hier hilft docker commit.

Erstellt ein neues Image aus einem laufenden Container

Wenn Sie den Befehl docker commit ausführen, erfasst Docker den aktuellen Zustand eines laufenden Containers und erstellt ein neues Image daraus. Es nimmt einen Snapshot des Dateisystems des Containers auf und speichert alle Änderungen, die Sie vorgenommen haben, wie installierte Pakete, aktualisierte Konfigurationen oder geänderte Dateien, als neue Image-Schicht. Auf diese Weise bleibt das ursprüngliche Image unberührt, sodass Sie schnell experimentieren und iterieren können.

Dies macht es ideal zum Speichern einer benutzerdefinierten Basis-Konfiguration für die zukünftige Wiederverwendung, zum Anwenden kleiner Korrekturen oder Konfigurationsänderungen während des Testens oder zum Teilen aktualisierter Images mit Ihrem Team, ohne ein Dockerfile von Grund auf neu zu erstellen.

Sie können den Befehl docker commit mit der folgenden Syntax verwenden, um ein neues Image aus einem laufenden Container zu erstellen:

docker commit [OPTIONS] CONTAINER_ID NEW_IMAGE_NAME[:TAG]

Hierbei ist CONTAINER_ID die ID oder der Name des Containers, den Sie erfassen möchten, NEW_IMAGE_NAME der gewünschte Name für das neue Image, und TAG ist optional, wobei der Standardwert latest ist.

Hinweis: docker commit ist ein veralteter Alias für docker container commit; beide sind identisch.

Der Befehl docker commit bietet mehrere Optionen, mit denen Sie Metadaten hinzufügen, Konfigurationsänderungen anwenden und steuern können, wie der Commit-Vorgang abläuft. Die folgende Tabelle fasst alle unterstützten Optionen zusammen:

OptionLangformBeschreibungBeispiel
-a–authorFügt den Namen des Autors zu den Metadaten des neuen Images hinzu.docker commit -a "Anees" my-container my-image
-c–changeWendet Dockerfile-Anweisungen wie ENV, LABEL oder CMD auf das neue Image an.docker commit -c "ENV APP_ENV=prod" my-container my-image
-m–messageFügt eine kurze Nachricht hinzu, die die vorgenommenen Änderungen im Image beschreibt.docker commit -m "Installed curl" my-container my-image
-p–pausePausiert den Container während des Commits, um Konsistenz sicherzustellen (Standard: wahr).docker commit --pause=false my-container my-image

Sehen Sie, wie docker commit funktioniert

Angenommen, Sie möchten curl in einem Alpine-Container installieren, ohne neu zu erstellen...

Dockerfile. Dazu führen Sie einen Container aus dem Basis-Image aus:

docker run -it alpine:latest /bin/sh

Sobald Sie im Container sind, nehmen Sie die erforderlichen Änderungen vor:

apk update && apk add curl

Jetzt verlassen Sie den Container:

exit

Nachdem Sie dies getan haben, speichern Sie den Container als neues Image:

docker commit <container_id> alpine-with-curl:1.0

Überprüfen Sie Ihr neues Image:

docker images

Jetzt haben Sie ein neues Image, das überall ausgeführt werden kann, mit vorinstalliertem curl.

Führen Sie Ihr neues Image aus, um gespeicherte Änderungen zu testen

Nachdem Sie Ihr neues Image erstellt haben, können Sie einen Container daraus ausführen, um zu überprüfen, ob Ihre Änderungen gespeichert sind.

docker run -it alpine-with-curl:1.0 /bin/sh

Dieser Befehl öffnet eine interaktive Shell in einem Container basierend auf dem alpine-with-curl:1.0 Image. Sobald Sie drinnen sind, können Sie überprüfen, ob Ihre Änderungen intakt sind.

curl --version

Dies zeigt, dass die Änderungen im neuen Image beibehalten wurden.

docker commit vs Dockerfile: Wann welches verwenden

Sowohl Dockerfile als auch docker commit ermöglichen es Ihnen, Docker-Images zu erstellen, funktionieren jedoch auf sehr unterschiedliche Weise und eignen sich für unterschiedliche Situationen.

Ein Dockerfile ist die beste Wahl, wenn Sie zuverlässige und wiederholbare Builds benötigen, insbesondere für CI/CD-Pipelines und Produktionsumgebungen. Es hält alle Änderungen klar im Code definiert, was das Verfolgen, Überprüfen und Versionskontrollieren im Laufe der Zeit erleichtert. Dieser Ansatz stellt sicher, dass jeder, der das Image später erstellt, das gleiche Ergebnis erhält, was für die langfristige Wartung und Zusammenarbeit im Team entscheidend ist.

Auf der anderen Seite funktioniert docker commit gut für schnelle Fixes, Tests oder kleine Anpassungen, die Sie versuchen möchten, ohne ein vollständiges Dockerfile neu zu schreiben oder neu zu erstellen. Es ist nützlich, wenn Sie experimentieren, debuggen oder eine Änderung spontan validieren möchten. Allerdings sind die Änderungen in einer Datei nicht dokumentiert, daher eignet sich diese Methode besser für kurzfristige Verwendung als für die Produktion.

Zusammenfassend können Sie docker commit hauptsächlich für Experimente oder temporäre Fixes verwenden. Für produktionsbereite Images bevorzugen Sie immer ein Dockerfile. Um das Beste aus Docker herauszuholen, lohnt es sich, andere wichtige Befehle zu erkunden, die die Arbeit mit Containern, Images und Workflows erleichtern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Go up