Was ist eigentlich DOCKER?

Cloud und Virtualisierung ist in aller Munde. Nun ist auch mal Zeit sich damit zu beschäftigen. Bei dem Thema kommt man heute an DOCKER nicht vorbei. Doch was ist das eigentlich ? Mit DOCKER lassen sich Container als Services bis hin zu ganzen virtuellen Maschinen in einer Sandbox betreiben. Huih – eine Menge Fremdworte für jemanden der sich damit noch nicht beschäftigt hat. Mal sehen ob wir es anders hinbekommen.

Bei einem Server oder allgemein bei einem Computer gibt es Hardware bestehend aus Festplatte, CPU, Speicher und Netzwerk. Damit dieses verwaltet wird und überhaupt miteinander harmoniert gibt es ein Betriebssystem – in engl. auch OS genannt. Dieses OS sorgt für die Verwaltung der Ressourcen. Es ist quasi der Manger dieser 4 Komponenten. Auf diesem OS laufen Programme. Es gibt Programme für Webserver, Datenbanken, Textverarbeitung, Grafikbearbeitung, …. und vieles mehr.

Ohne Docker (oder ohne eine Virtualisierungssoftware) kann auf einer Hardware nur EIN EINZIGES OS laufen. Mit Docker können mehere Betriebssysteme gleichzeitig in sogenannten Containern auf der Hardware gleichzeitig laufen. Das DOCKER PROGRAMM sorgt in diesem Zusammenspiel dafür, dass die vier Ressourcen der Hardware entsprechend zugewiesen werden und darüber mehrfach quasi gleichzeitig genutzt werden können.

Was ist das Ergebnis?

Docker ermöglich auf einer Hardware mehr als ein OS zu starten und darin bestimmte Dienste zu aktivieren. Das besondere dabei ist, die einzelnen Betriebssysteme teilen sich die Hardware aber haben keine Kenntnis von und keine Verbindung zueinander. Dadurch sieht es so aus, als ob jeder Container auf einer eigenen Hardware läuft.

Befehle zur Verwaltung

Zur Verwaltung und Administration gibt es auf dem Docker Server ein CLI – also ein Command Line Interface. Es ist sehr hilfreich einige dieser Befehle zu kennen. Eingeleitet werden die Befehle immer mit dem Befehl „docker“ gefolgt von Parametern und Optionen. Eine vollständige Referenz befindet sich auf der Webseite von Docker. Docker reference

docker run

Mit dem Parameter „run“ wird ein Image aus dem Docker Repository, dem sogenannten Docker HUB geladen und ein lokales Image daraus erstellt. Dieses Image wird dann auf dem DOCKER-Server gestartet.

docker start / stop

docker commit

docker ps

Praxisbeispiel

Nachfolgend möchte ich ein paar Beispiele aus der Praxis näher betrachten.

Virtuelles System auf Linux UBUNTU Basis

Ziel ist es eine virtuelle Maschine (VM) zu erstellen die auf einem Ubuntu 18.04 LTS Kern basiert. Das System soll zum testen für diverse Programme und Dienste eingesetzt werden. Wichtig ist das die Änderungen auf diesem System das HOST System nicht beeinflussen, also in einer Sandbox laufen. Das Testsystem kann beendet und wieder neu gestartet werden. Die Daten darin sollen nicht verloren gehen und können als ein neues Template verwendet werden.

Das Testsystem soll auf dem Hostsystem unter dem Port 22001 mit dem Service SSH erreichbar sein. Der Imagename ist vulkan1. Der Container soll im Hintergrund laufen, bei einem Fehler restarten (max. 5 Mal), das Hostverzeichnis /private-backup/vulkan.georg-keller.de wird in die VM an gleiche Stelle gemappt. Der Hostname ist vulkan01.georg-keller.de. Der init Prozess bekommt die PID 1. Der Container heisst vulkan01

Restart Policy: Nur Neustarten, wenn der EXIT CODE <> 0 ist


Umsetzungsschritte

Auf dem DOCKER Server wird ein neuer Container erzeugt und gestartet. Basis ist mein bereits angepasstes System mit dem Imagenamen vulkan1:

docker run -di -p 85.214.106.22:22001:22/tcp –restart on-failure:5 –name vulkan01 –init -v /private-backup/vulkan.georg-keller.de:/private-backup/vulkan.georg-keller.de -h vulkan01.georg-keller.de vulkan1

Die Netzwerkonfiguration wird geprüft:

netstat -an | grep :22001
tcp 0 0 85.214.106.22:22001 0.0.0.0:* LISTEN

Ein Terminal zum Image wird eröffnet. Das ist notwendig um den SSH Server manuell zu starten:

docker exec -it vulkan01 /bin/bash

Im Container „vulkan01“ wird der ssh Service gestartet:

service ssh start
* Starting OpenBSD Secure Shell server sshd

Jetzt sollte der SSH Server des Containers „vulkan01“ von aussen über die IP des Hosts und Port 22001 erreichbar sein:

ssh root@85.214.106.22:22000

Das Problem an dieser Konfiguration ist, innerhalb des Containers gibt es keinen init Prozess. Das bedeutet der SSH daemon startet nicht automatisch bei Aktivierung des Containers. Erst mit dem manuellen starten des ssh daemons ist der Service verfügbar.

Das würde übrigens auch für weitere Services gelten innerhalb des Containers. Beispielsweise Web- oder Datenbank Dienste.