Was sind Docker Container und wie funktionieren sie?

Docker Container = Frachtcontainer

Docker Container sind eine der Hauptgründe, warum sich Docker so schnell verbreitet hat. Ein Docker Container ist eine einfach konfigurierbare, abgeschlossene Einheit, in der Anwendungen ausgeführt werden können. Ein Container kann als Frachtcontainer betrachtet werden, in dem sich ein Männchen befindet, das eine bestimmte Aufgabe ausführt. Innerhalb des Containers sieht es immer gleich aus, unabhängig davon, wo sich der Container gerade befindet. Unabhängig ob auf dem privaten Windows Rechner oder auf einem Server mit einem Linux Betriebssystem. Ein Dockerfile beschreibt den Container so, dass er auf einem anderen Rechner genau gleich aufgebaut werden kann.

Docker Images sind die Baupläne für Container, die über das zentrale Docker Hub mit anderen Entwicklern geteilt werden können. Aus den Images werden dann die jeweiligen Container gestartet, vergleichbar mit der objektorientierten Programmierung, wo aus einer Klasse mehrere Instanzen erzeugt werden. Wenn mehrere Container vorhanden sind, die miteinander kommunizieren sollen, können sie über das sogenannte Linking miteinander verknüpft werden. Dadurch können Kommunikationswege wie offene Ports oder gemeinsame Ordner festgelegt werden.

Ein weiterer Vorteil von Docker Containern besteht darin, dass sie nur so lange leben, wie sie etwas tun. Alles, was innerhalb des Containers passiert, verschwindet, sobald er beendet wird. Wenn jedoch mit persistenten Daten gearbeitet werden soll, können Ordner zwischen dem Host-Rechner und dem Container geteilt werden, um sicherzustellen, dass Änderungen auf beiden Seiten automatisch aktualisiert werden.

Den ersten Docker Container starten

Beginnen wir mit einem einfachen Schritt und starten einen Docker-Container. Container basieren immer auf einem Docker-Image, auch wenn sie von Entwicklern erstellt werden. Docker Hub bietet hunderte von verschiedenen Images für alle möglichen Situationen an. Ein Basisimage könnte beispielsweise die Grundfunktionalität von Ubuntu sein, die als ubuntu:22.04 bezeichnet wird. Die 22.04 ist dabei eine Art Version.

Wenn wir ein Docker-Container starten wollen, geben wir einfach den folgenden Befehl ein:

docker run ubuntu echo "Hello World"

Dies ist ein einfaches „Hello World“-Beispiel, aber man muss irgendwo anfangen. Was passiert eigentlich bei diesem Befehl?

Zunächst überprüft Docker, ob es das Image „ubuntu“ lokal gespeichert hat. Wenn nicht, wird es automatisch heruntergeladen. Da kein Tag angegeben wurde, wird automatisch das neueste Image genommen.
Docker startet einen Container aus dem angegebenen Image und führt den Befehl „echo ‚Hello World'“ innerhalb des Containers aus, der einfach nur „Hello World“ ausgibt. Docker beendet den Container wieder, da er seinen Zweck erfüllt hat.

Das hat zwar etwas gedauert, um nur „Hello World“ auf dem Bildschirm zu sehen, aber das Herunterladen des Images brauchte seine Zeit. Wenn wir den Befehl jetzt ein zweites Mal ausführen, wird die Ausgabe sofort angezeigt, da das Image bereits lokal gespeichert ist.

Run Parameter

Standardmäßig wird der Container sofort nach dem Ausführen des Befehls beendet. Wenn wir das Standardverhalten ändern möchten, gibt es verschiedene Parameter für den „docker run“-Befehl, die wir verwenden können. Hier sind einige davon:

  • -i sorgt dafür, dass der Container interaktiv ist. Das bedeutet, wir können während der Laufzeit damit interagieren.
  • -t bindet unsere Ein- und Ausgaben an diesen interaktiven Container.
  • -d sorgt dafür, dass der Container im Hintergrund weiterläuft (Daemon-Modus). Das ist nützlich für Container, die dauerhaft laufen sollen (beispielsweise Container, die Server enthalten oder Aufgaben, die einige Minuten oder Stunden dauern können).
  • -p bindet Ports von unserem Host an den Container. Ein Beispiel wäre „-p 80:5000“, das unseren Hostport 80 auf den Containerport 5000 mappt. Das kann sinnvoll sein, wenn wir denselben Container mehrfach aufrufen und die Ports andernfalls kollidieren würden.
  • -v verlinkt ein Verzeichnis auf unserem Hostrechner mit einem Verzeichnis innerhalb des Containers. So können Daten persistent gespeichert werden, da diese normalerweise mit dem Auslaufen des Containers verschwinden. Ein Beispiel wäre „-v ./folder:/var/folder“. Vor dem Doppelpunkt steht das Verzeichnis auf dem Hostrechner und danach das Verzeichnis innerhalb des Containers – genau wie bei den Ports.
  • -name gibt unserem Container einen Namen. Dieser wird andernfalls automatisch vergeben, ist aber nicht immer leicht zu merken. Namen können als Ersatz für die (sehr kryptische) Container-ID verwendet werden und machen daher durchaus Sinn. Hierbei ist zu beachten, dass die Namen auf dem Hostrechner eindeutig sein müssen. Wenn wir also einen neuen Container mit diesem Namen an.

Container auflisten und stoppen

Wenn wir Informationen über die aktuell ausgeführten Docker Container benötigen, können wir den Befehl

docker ps

verwenden. Dieser Befehl zeigt uns wichtige Eigenschaften wie die Container-ID, das Image, die zugeordneten Ports oder den Namen des Containers an.

Standardmäßig werden nur laufende Container aufgelistet. Wenn wir alle Container auf unserem Host anzeigen lassen möchten, verwenden wir einfach den Parameter -a.

Wenn wir einen laufenden Container beenden möchten, können wir den Befehl

docker stop NAME/ID

verwenden. Der Container wird dann gestoppt, aber er bleibt weiterhin vorhanden und behält den Zustand des Docker-Images bei, das beim Ausführen von docker run verwendet wurde. Wenn wir das Image aktualisieren, müssen wir docker run erneut ausführen, um die Änderungen wirksam zu machen.

Um den Container später wieder zu starten, verwenden wir einfach den Befehl

docker start NAME/ID

Container entfernen

Wie bereits erwähnt, muss ein Docker-Container entfernt werden, wenn er erneut mit dem gleichen Namen über den docker run Befehl gestartet werden soll. Hierfür kann der Befehl

docker rm NAME/ID

verwendet werden, allerdings muss der Container zuvor mit dem Befehl docker stop gestoppt werden.

Im folgenden Artikel werden wir uns genauer mit Docker Images 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