Docker-Container – Warum?
Wozu benötige ich eigentlich Docker-Container? Kurz und knapp gesagt, um eine produktionsähnliche Umgebung sowohl lokal als auch in verschiedenen Testumgebungen zu erstellen und dabei so wenig wie möglich impact auf der Maschine zu generieren, auf der die jeweilige Umgebung laufen soll. Außerdem kann man mit einem geeigneten den gleichen Container auf verschiedenen Umgebungen ausrollen oder, wenn der Container mal kaputt gehen sollte, so eine identische Version wieder hergestellt werden kann.
Erstellen eines Docker-Containers
Ein Docker Container kann ganz einfach mit docker run <docker-image>:<version> erstellt werden. Allerdings reicht das in den meisten Fällen nicht, denn so wird ein name für den Container generiert, den wir uns merken müssen. Außerdem werden wir im Allgemeinen sowohl Ports weiterleiten müssen als auch Zugriff auf das Verzeichnis des Host benötigen. Somit wir der Befehl zur Erstellung eines Container deutlich komplizierter. Die allgemeine Struktur des Befehls lautet nun:
docker run -p <container-port[/protokoll]>:<host-port> -v <host-Verzeichnis>:<container-Verzeichnis> --name <sprechender Name des Containers> <docker-image>:<version>
Dabei kann der Parameter -v <host-Verzeichnis>:<container-Verzeichnis> wiederholt werden.
Was hier nun noch stört ist, dass die Konsole durch den Befehl docker run gesperrt ist und wenn ich Ctrl-C drücke der Container geschlossen wird. Aus diesem Dilemma kommen wir heraus, indem wir den Container detached starten. Der Befehl lautet nun:
docker run -d -p <container-port[/protokoll]>:<host-port> -v <host-Verzeichnis>:<container-Verzeichnis> --name <sprechender Name des Containers> <docker-image>:<version>
Somit haben wir die meisten Fälle, um einen Container zu erstellen abgearbeitet.
Installieren zusätzlicher Software
Allerdings sind wir noch nicht fertig! Häufig kommt es vor, dass man aus Wartungsgründen weitere Programme benötigt. Wollen wir z.B. Daten sichern und ein Backup-Archiv erstellen, könnten wir tar gebrauchen. Was aber, wenn das nicht installiert ist.
Dazu müssen benötigen wir Zugriff auf die Shell im Container. Aber wie kommen wir dahin?
Hier gibt es zwei Möglichkeiten:
- wir nutzen Kitematic oder ein ähnliches Tool
- wir Attachen uns manuell über die Kommandozeile.
In jedem Fall ist es wichtig, dass der Container auch läuft!
Den Beschreibung von spezieller Software wie Kitematic überlasse ich der Dokumentation der jeweiligen Software und beschränke mich hier auf die Dokumentation der Kommandozeile.
Um mich per Kommandozeile mit einem Container zu verbinden gebe ich ein: docker -ti exec <container-name>. Hier sieht man auch gleich den Nutzen eines sprechenden Containernamens. Die Parameter -t -i stehen dabei für die Nutzung eines für die Nutzung eines pseudo TTYs und für den interaktiven Modus. Lässt man -t weg, sieht man nichts könnte theoretisch aber mit dem Container interagieren; lässt man das -i weg, dann sieht man zwar was, kann aber keine Befehle eingeben.
Mit der Eingabe der obigen Befehls, haben wir dann schon mal dein Einstieg geschafft – wir befinden uns im Container.
Nun hängt es davon ab, welches Betriebssystem der Container hat. Da alle Container, die ich bisher genutzt haben Ubuntu oder entsprechende Derivate waren, beschränke ich mich hier erst mal auf dieses System.
Als erstes sollte man sicherstellen, dass die aktuellen Installationsscripte genutzt werden. Dazu gibt man in der Kommandozeile apt-get updateein. Wenn das script abgelaufen ist, installiert man die zusätzliche Software mit apt-get install <packetname der Software>(z.B. apt-get install tar).
Wenn andere Software benötigt wird, kann man sich diese auf dem Host im Internet herunterladen und in eines der Verzeichnisse legen, die der Container gemountet hat. Dann kann man innerhalb des Containers auf den passenden Pfad gehen und die Installation manuell oder per Installer ausführen.
Einen existenten Container nutzen
Damit ich nicht ständig einen neuen Container erstellen muss und mir damit Testdaten verloren gehen, will ich nicht ständig docker run … ausführen. Es muss doch einen Weg geben, um einen existierenden Container wiederholt auszuführen.
Richtig, es gibt einen Weg einen vorhanden Container zu re-usen! Um einen vorhanden Container zu starten gibt man in der Kommandozeile docker start <container-name>, um einen laufenden Container zu stoppen gibt man docker stop <container-name>ein.
Wie finde ich einen vorhandenen Container?
Vorhandene Container kann man mit dem Befehl docker ps -a. Der Parameter -a gibt dabei an, dass man alle vorhandenen Container sehen möchte. Will man nur die Container sehen, die aktuell laufen, lässt man den Parameter -a einfach weg.