Docker Images

Docker Image Run Docker Container

Docker-Images stellen den Zustand eines Containers zu einem bestimmten Zeitpunkt dar. Wenn wir beispielsweise einen Docker-Container mit einem Ubuntu-Image starten, wird es erst einmal nicht viel tun. Wir können darin Apache2 installieren und diesen Zustand speichern. Von nun an wird jeder Container, der von diesem Image gestartet wird, Apache2 enthalten. Auf diese Weise bauen die Images aufeinander auf.

Grundlagen

Nehmen wir an, wir haben Apache2 in unserem Image installiert und nennen es „ninja-apache2-server“. Jetzt benötigen wir eine Möglichkeit, um eine Webanwendung auf verschiedenen PHP-Versionen zu testen. Wir können ein Image erstellen, das auf „ninja-apache2-server“ aufbaut und PHP 7.4 installiert, nennen es „ninja-php74-server“. Außerdem können wir ein weiteres Docker Image erstellen, das auch auf „ninja-apache2-server“ aufbaut, aber PHP 8.2 installiert, und nennen es „ninja-php82-server“.

Dies bietet uns mehrere Vorteile:

  • Wir können mit einem einfachen „docker run“-Befehl blitzschnell virtuelle Maschinen mit verschiedenen PHP-Versionen starten, ohne uns mit mehreren PHP-Versionen innerhalb einer Maschine befassen oder ständig eine andere PHP-Version installieren zu müssen.
  • Wenn wir unsere Grundlage ändern möchten (in diesem Fall z.B. die Apache2-Version), können wir dies zentral im „ninja-apache2-server“-Image vornehmen, dieses speichern und die darauf aufbauenden Images können diese Änderungen einfach übernehmen. Das spart natürlich viel Zeit, da wir die Änderungen nicht in jeder virtuellen Testmaschine einzeln anpassen müssen.

Dieses einfache Beispiel zeigt uns bereits den Mehrwert einer gut durchdachten Docker-Entwicklungsumgebung. Stellen wir uns das Ganze in einem echten Webumfeld mit Webserver, Datenbank, PHP, NodeJS, Plugins und ständig vielfältiger werdenden Tools vor, dann verwundert die rasant ansteigende Beliebtheit von Docker nicht mehr. Eine Übersicht aller Images ist unter folgendem Link einsehbar.

Zur Zusammensetzung des Namens eines Docker Images dient das folgende Beispiel: „tekkie/ninja-apache2-server:0.1“. Der Teil vor dem Schrägstrich („tekkie“) ist der Name bzw. Account des Autors, der das Image hochgeladen hat. Der Teil danach („ninja-apache2-server“) ist der Name des Images selbst. Zusammen bilden diese das sogenannte Repository. Ein Repository kann mehrere Versionen eines Images enthalten. Diese Versionen werden anhand von Tags unterschieden, welche hinter dem Doppelpunkt stehen. Wenn kein Tag angegeben wird, wird automatisch der Tag „latest“ vergeben. Unser PHP-Beispiel von oben hätten wir auch eleganter lösen können, indem wir ein Image „ninja-php-server“ erstellen und es mit den Tags „7.4“ und „8.2“ versehen.

Docker Images Verwaltung

Zunächst betrachten wir, wie wir herausfinden können, welche Images bereits auf unserem Host installiert sind. Hierfür verwenden wir den Befehl:

docker images

Falls wir ein bestimmtes Image nicht installiert haben, wird es beim Ausführen von „docker run“ automatisch heruntergeladen.

Wenn wir ein Image manuell herunterladen möchten – möglicherweise, weil wir im Zielnetzwerk keinen Zugriff auf das Internet haben -, können wir dies problemlos mit dem Befehl durchführen:

docker pull author/image:tag

Zuletzt können wir selbstverständlich auch ein vorhandenes Docker-Image löschen.

docker rmi author/image:tag

Beachten Sie hierbei das i bei rmi. Der „docker rm“-Befehl ist bereits für das Entfernen von Containern vorgesehen.

Docker Images aktualisieren

Um ein Docker-Image zu aktualisieren, z.B. wenn eine neue Softwareversion verfügbar ist oder sich die Anforderungen geändert haben, gibt es eine einfache Methode. Zunächst müssen wir einen Container aus dem vorhandenen Image starten (wie bereits im vorherigen Artikel erklärt). Die ID des Containers muss notiert werden, da sie später benötigt wird.

Dann können alle erforderlichen Änderungen innerhalb des Containers durchgeführt werden, z.B. die Installation von curl mit dem Befehl apt-get install curl.

Sobald die Installation abgeschlossen ist und alles funktioniert, kann der Container mit exit verlassen werden.

Jetzt wird die oben erwähnte Container-ID benötigt, um den Befehl

docker commit -m "curl installiert" -a "Tekkie Ninja" CONTAINER-ID tekkie/ninja-test-server:1.2

auszuführen.

Dieser etwas längere Befehl kann in seine Einzelteile zerlegt werden:

  • docker commit bedeutet, dass wir ein Image an das Repository senden möchten.
  • -m ermöglicht es uns, einen Kommentar zu diesem Commit hinzuzufügen (wie bei GIT), damit wir später wissen, was wir in welchem Commit geändert haben.
  • -a zeigt den Autor des Commits an, damit wir in einem Team wissen, wer was gemacht hat.
  • CONTAINER-ID ist die zuvor erwähnte ID des Docker-Containers, den wir zuvor verändert haben.
  • tekkie/ninja-test-server:1.2 ist der Name, unter dem wir das neue Image speichern möchten (wie bereits oben besprochen).

Docker Images taggen

Zuletzt gibt es noch einen Befehl, um ein Image nachträglich zu taggen. Wie zuvor erwähnt, wird standardmäßig immer das Tag „latest“ zugewiesen, aber wir möchten möglicherweise für unsere eigenen Zwecke ein anderes Tag verwenden. Hierfür benötigen wir die ID des Images, die wir mit dem Befehl „docker images“ in der Image-Liste finden können.

docker tag IMAGE-ID tekkie/ninja-test-server:neuerTag

Im folgenden Artikel werden wir uns genauer mit dem Dockerfile beschäftigen und einen genaueren Blick darauf werfen.

Hier gehts weiter.

Kommentar verfassen

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

Nach oben scrollen