Erste Schritte mit Docker
Wer sich bislang in der Welt der Containertechnologie noch wenig auskennt, dem mag sie ungewohnt oder vielleicht sogar kompliziert vorkommen. Geduld ist also oberstes Gebot und ein schrittweiser Einstieg sei empfohlen. Voraussetzung ist jedoch, dass du dich bereits ein wenig mit Linux auskennst.
Ein Vorteil von containerbasierter Virtualisierung ist die Möglichkeit, unterschiedliche Anwendungen mit unterschiedlichen Anforderungen isoliert voneinander auszuführen, ohne dass man dafür eines oder mehrere komplett virtualisierte Betriebssysteme mit viel größerem Bedarf an Ressourcen auf einem Host-Rechner ausführen muss.
Docker und der Linux-Kernel
Die Container Technologie fußt auf zwei Grundfunktionen des Linux-Kernels, also dem zentralen Bestandteil des Linux-Betriebssystems: Control Croups und Kernel-Namespaces.
Die Control Groups, auch “Cgroups” begrenzen den Ressourcenverbrauch einer Anwendung, indem sie den Zugriff auf Prozessorleistung, Speicher und Bandbreiten limitieren. Somit wird gewährleistet, dass eine Anwendung nicht den Betrieb anderer Anwendungen behindert.
Die Namensräume, also “Namespaces” isolieren den Zugriff eines Containers auf bestimmte Teile des Host-Systems. Dabei teilen sich die Namespaces in fünf Bereiche auf:
- Systemidentifikation (UTS): UTS-Namespaces weisen den Containern eigene Host- und Domainnamen zu.
- Prozess-IDs (PID): Jeder Container bekommt einen eigenen Namensraum für Prozess-IDs. Prozesse außerhalb des Containers sind davon nicht beeinflusst. So können mehrere Container innerhalb ihrer Prozesse die gleiche PID verwenden, ohne dass es dabei auf dem Host-System zu Konflikten kommt.
- Interprozess-Kommunikation (IPC): Die IPC-Namespaces sorgen dafür, dass Prozesse innerhalb eines Containers isoliert werden und die Kommunikation mit Prozessen außerhalb verhindert wird.
- Netzwerkressourcen (NET): Die Netzwerk-Namespaces sind dazu da, jedem Container eigene Netzwerkressourcen wie IP-Adressen oder Routing-Tabellen zuzuordnen.
- Mountpoints (MNT): Die Mountpoints sorgen dafür, dass ein Prozess in einem Container niemals das gesamte Dateisystem des Hostcomputers einsehen kann, sondern lediglich den Ausschnitt, den der Container zum Ablegen von Informationen benötigt.
Als Einsteiger sollte man also nicht gleich mit dem im Zusammenhang von Containertechnologien oftmals erwähnten Google Kubernetes starten, das automatisiert Container-Anwendungen bereitstellt, skaliert und verwaltet. Am einfachsten ist es, wie beim Erlernen einer neuen Programmiersprache, mit einem klassischen “Hello World” Container zu beginnen und sich von dort aus zu steigern.
Die Basis für Docker Container
Bevor man mit der eigenen Container Entwicklung mit Docker startet, ist es jedoch wichtig, den Aufbau von Docker zu verstehen und zu wissen, was sich hinter Begriffen wie “Image” und “Registry” versteckt und wie die Docker Kommandozeile genutzt wird.
Was ist ein Docker Image?
Das Docker Image ist eine aus mehreren Schichten (Layern) bestehende, schreibgeschützte Datei, die verwendet wird, um Code in einem Docker Container auszuführen. Ein Docker Image wird aus den Anweisungen für eine ausführbare Version einer Anwendung erstellt. Wenn die Anwendung ausgeführt wird, wird aus dem Image zunächst ein Container erzeugt. Alle auf dem Docker-Host laufenden Container greifen dabei auf denselben Betriebssystem-Kernel zurück. Um ein Image zu starten wird der Befehl docker run <image-id> ausgeführt. Andersrum kann aus einem laufenden Container auch ein Image erzeugt werden. Das geht mit dem Befehl docker commit <container-id>. Das Docker Image ist also quasi das Trägermedium, der Docker Container die laufende Anwendung.
Was ist eine Docker Registry?
Eine Docker Registry bezeichnet eine Methode, mit denen das Verwalten, Speichern und Verteilen von Docker Images erleichtert wird. Während sich Docker Images relativ leicht erstellen lassen, ist es doch eine Herausforderung bei vielen hunderten bis tausenden von Images den Überblick zu behalten. Die Registry soll hier Abhilfe schaffen. So ist Docker Hub eine von Docker verwaltete Docker Registry mit über 100.000 unterschiedlichen Container Images von unterschiedlichen Anbietern und der Docker Community. Sie enthält Software und Anwendungen aus offiziellen Repositories wie Apache HTTP, Grafana, MySQL, Ubuntu oder Oracle Linux. Kurz gesagt, die Registry ist der Platz an dem du deine Docker Images ablegen kannst.
Das Docker Dateisystem und Volumes
Als nächstes ist es wichtig, das Docker Dateisystem und die sogenannten Volumes zu verstehen. Jeder Docker Container hat sein eigenes Dateisystem. Wenn ein Container ausgeführt wird, werden die verschiedenen Ebenen eines Images für das Dateisystem verwendet. Außerdem verfügt jeder Container über einen eigenen temporären Speicherbereich zum Erstellen, Aktualisieren oder Ändern von Dateien. Wird der Container jedoch beendet, gehen diese Änderungen verloren.
Jetzt treten die Docker Volumes in Aktion. Mit ihnen gibt es die Möglichkeit, eine Verbindung mit Dateisystempfaden des Containers und Host-System zu erstellen. Wird ein Verzeichnis im Container eingebunden, werden diese Änderungen in dem Verzeichnis auch auf dem Host-System vorgenommen. Mit dem Befehl docker volume create wird ein Volume erstellt. Docker selbst verwaltet den physischen Speicherort auf dem Datenträger. Es genügt, sich lediglich den Namen des Volumes zu merken. Wenn du doch einmal wissen möchtest, wo die Daten wirklich abgelegt wurden, kannst du den Befehl docker volume inspect verwenden. Docker gibt dir dann den “Mountpoint” zurück, den Pfad, indem das Volume auf dem Datenträger abgelegt ist.
Tipps zum Umgang mit Containern
Wer mit Containern arbeitet, sollte ein paar Grundregeln beachten. Drei davon seien hier zum Abschluss noch aufgeführt:
- Nur ein Prozess pro Container
Im Idealfall sollte man pro Container nur einen Prozess, beziehungsweise einen Service implementieren. Natürlich gibt es Ausnahmen, zum Beispiel dann, wenn Applikationen sehr eng miteinander verknüpft oder abhängig voneinander sind. Ansonsten lassen sich Container, wenn sie nur einen Prozess beinhalten, sehr leicht auch für andere Anwendungen wiederverwenden. Container sind also nicht nur schlank, sie eignen sich ideal fürs “Recycling”.
- Nutzerdaten gehören nicht in Container!
Da Container nur so lange existieren, wie sie aktiv sind, werden auch alle Daten, die innerhalb ihrer Laufzeit erzeugt werden, gelöscht, sofern man sie nicht extern auslagert. Nutzerdaten haben daher in einem Container nichts verloren, ansonsten sind sie schnell verloren. - Automatisierungstools erleichtern das Leben
Wer sich mit den Anfängen vertraut gemacht hat, sollte im fortgeschrittenen Stadium überlegen, ob nicht Tools zur Automatisierung wie etwa Jenkins, Terraform oder Ansible genutzt werden können.
Das könnte dich auch interessieren
easyname ist ein erfolgreicher und bekannter österreichischer Anbieter von Cloud-Services, Domains sowie Webhosting bis hin zur Server-Infrastruktur und gehört seit 2020 zur dogado group.
Das Unternehmen ist seit 2006 in Österreich erfolgreich am Markt und inzwischen auch in vielen anderen Ländern weltweit tätig. Sowohl das Team als auch die gehosteten Daten befinden sich in Österreich.
easyname liegt die Datensicherheit besonders am Herzen und stellt daher zu jedem Hosting-Paket auch kostenlose SSL-Zertifikate zur Verfügung. Mit intuitiven Tools zur Erstellung von Websites und Webshops und mit Easy Install Apps wie WordPress, Joomla oder PrestaShop können alle easyname-Kunden schnell in die Online-Welt einsteigen.