Docker Tutorial
Ein Docker Tutorial liegt schon länger als Idee für einen Blogartikel herum. In den letzten Wochen habe ich mich intensiv mit Docker beschäftigt und die Basics in diesem Tutorial zusammengefasst. Aus Sicht eines Programmierers sollte man zumindest verstehen was ein Docker Image ist und wie man es für seine Arbeit sinnvoll nutzen kann.
Docker Tutorial
Der erste Schritt ist der Download und die Installation von Docker Desktop. Das Programm findet man auf der offiziellen Docker Homepage https://hub.docker.com/. Bevor der Download gestartet werden kann ist eine Registrierung erforderlich. Über das Programm Docker führt man Docker Container aus. Es verhält sich wie ein Virtualisierungsprogramm (beispielsweise VirtualBox) zum Image eines Betriebssystems. Ohne dem Programm Docker macht ein Container keinen Sinn. Man kann mit Docker Desktop lokal auf dem Rechner Docker Container bauen und ausführen. Sinn macht so ein Container dann hauptsächlich in der Cloud um dort in einem Docker Container verpackte Software auszuführen und als Spezialfall mit geeigneter Software wie Docker Swarm oder Kubernetes diese Anwendung zu skalieren.
Erste Schritte
Mit Docker kann man Container bauen oder Container ausführen. Der erste Schritt ist deshalb, sich einen Container zu besorgen und den mal laufen zu lassen. Das macht man mit dem docker pull Befehlt gefolgt vom Namen und der Version des Containers. Will man beispielsweise den offiziellen ubuntu Container reicht:
docker pull ubuntu
Der Container wird daraufhin vom Docker Hub installiert. Das funktioniert erst, nachdem man die Accountdaten eingegeben hat. Docker fragt diese entweder auf der Konsole, oder unter Windows 10 bereits unten auf der Taskleiste ab. Eine Liste aller auf dem System installierten Container liefert:
docker images
Den Container kann man nun ausführen. Anders als bei VirtualBox lässt man diesen nun nicht einfach nur laufen, man gibt auch an welches Programm aus dem Container laufen soll. Idealerweise über Parameter so gesteuert, dass mit Beendigung dieses Programms auch der Container beendet wird. Für das Beispiel von ubuntu und der bash als Programm sieht der Aufruf so aus:
docker run -it ubuntu bash
Die Arbeit in der bash fühlt sich nun an wie auf einer echten Maschine unter Linux. Sobald man die bash aber mit dem Kommando exit beendet wird im Hintergrund auch der Container entladen. Wie man sehen kann wird mit einem einzigen Kommando ein Programm samt zur Ausführung nötiger Umgebung geladen, ausgeführt und sauber beendet. Alles was zur Ausführung nötig war ist im Container verpackt. Das Programm wird über Docker egal von welchem System (Server, Desktop, Windows, Linux, MacOS, …) immer exakt gleich ausgeführt.
Container 1×1
Wenn man beispielsweise den ubuntu Container installiert fallen einem vermutlich die 4 Zeilen auf mit einem Haufen Zahlen und Buchstaben als Name die einzeln heruntergeladen werden. Das sind so genannte Layer. Jeder Layer hat mit einem zufälligen Hashwert (die Wurst auf Zahlen und Buchstaben) einen eindeutigen Namen. Docker Container werden in Schichten gebaut. Das bedeutet, wenn ich mir nun einen Docker Container bauen will um auf Ubuntu ein Programm laufen zu lassen, dann lade ich mir den Standard ubuntu Container herunter. Danach kopiere ich mein Programm in den Container, erstelle daraus einen neuen Layer und speichere das Ergebnis als neuen Container. Würde ich diesen Container nun laden würde dieser bei der Installation aus 5 Layern bestehen. Den 4 Layern des offiziellen ubuntu Containers + meinem neuen Layer für mein Programm.
Wie man einen eigenen Container erstellt zeige ich im nächsten Artikel noch ausführlich.
Unterschied Docker und VirtualBox
Über VirtualBox wird ein Image erstellt, dieses beinhaltet ein Betriebssystem und darauf laufende Programme. Es wird in einem emulierten Rechner ausgeführt und stellt somit ein vollständiges virtuelles System dar. Das virtuelle System greift dabei auf emulierte Hardware zu. In einem Docker Container liegen nur jene Dateien die zur Ausführung eines bestimmten Programms unbedingt nötig sind. Ein Docker Container greift auf die Hardware des Host Systems zu. Der Unterschied liegt zum einen im verwendeten Speicher. Ein guter Container ist wesentlich kleiner als ein Image. Außerdem sollte die Ausführung des Programms effizienter sein. Üblicherweise hat ein Docker Container genau eine Aufgabe, nach Beendigung dieser wird der Container heruntergefahren und aus dem Speicher entfernt, ein Container verhält sich also eher wie ein ausführbares Programm als ein Betriebssystem.
Gründe für Docker
Es mag viele Gründe geben um einen Docker Container zu verwenden. Bei mir war der Auslöser ein Softwareprojekt an dem ich weiterarbeiten möchte. Das Projekt kann unter Linux gebaut werden, für Windows gibt es einige Anleitungen, da das Projekt über 20 Jahre läuft gibt es viele Tipps die nicht mehr funktionieren. Bevor ich nun also in meinem gepflegten Windows System alle möglichen Programme und Bibliotheken herunterlade und Einstellungen verändere habe ich beschlossen die ganze Entwicklung in ein virtuelles System auszulagern. VirtualBox ist dafür zu umständlich, müsste ich doch zuerst mal ein neues Image aufsetzen. Ich habe den Source Code schnell auf einem Raspberry Pi geladen und dort compiliert, das klappt gut. Da der Pi aber für die Entwicklung zu langsam ist und ich auch mobil auf dem Laptop arbeiten will kommt mir ein schlanker Container genau richtig. Perfekt für die Einarbeitung in das System. Als Entwickler sollte man Docker kennen.
Gründe gegen Docker
Mit Docker wird unter Windows 10 auch automatisch Hyper-V installiert und aktiviert. Dadurch kommt es zu einem Problem mit VirtualBox, das Programm funktioniert nicht mehr. Ein über Hyper-V betriebenes Windows 10 kann aktuell wegen Sicherheitseinstellungen kein Image über VirtualBox starten. Das erfährt man leider erst nach der Installation von Docker und das ist extrem nervig. Man kann nun immer Hyper-V deinstallieren und den Rechner neu starten, wenn man VirtualBox nutzen will. Will man Docker nutzen muss man Hyper-V wieder aufspielen und neu starten. Eine andere Möglichkeit ist die Transformation der VirtualBox Images nach Hyper-V.
Fazit
Der Einstieg ist dank des Docker Tutorial recht einfach. Auch Docker schafft mit dem einfachen Setup des Docker Desktop Programms und die komplett automatische Konfiguration von Hyper-V einen super simplen Einstieg. Spannend wird es erst, wenn wir nun mit Docker intensiver arbeiten und auch eigene Container erstellen.
Danke für den Einführungsartikel! Mir war der Unterschied Docker/VB bis jetzt noch nicht wirklich klar, mit dem Artikel kommt aber schön langsam etwas Licht in den Container …