Docker-Architektur und ihre Komponenten für Einsteiger

Lassen Sie uns die Struktur von Docker und seine grundlegenden Elemente genauer betrachten.

Es wird davon ausgegangen, dass Sie bereits über ein Basiswissen in Bezug auf Docker verfügen. Wenn dies nicht der Fall ist, können Sie auf einen vorherigen Artikel zurückgreifen, der das Thema behandelt.

Ich denke, Ihnen ist die Bedeutung von Docker im Bereich von DevOps bekannt. Hinter diesem bemerkenswerten Werkzeug verbirgt sich eine durchdachte und beeindruckende Architektur, oder nicht?

Bevor ich darauf eingehe, möchte ich jedoch einen Blick auf frühere und aktuelle Virtualisierungsmethoden werfen.

Traditionelle vs. Moderne Virtualisierung

In der Vergangenheit wurden virtuelle Maschinen (VMs) erstellt, wobei jede VM ein eigenes Betriebssystem benötigte. Dies führte zu einem erheblichen Platzbedarf und machte die Verwaltung kompliziert.

Im Gegensatz dazu verwenden Docker-Container nur ein einziges Betriebssystem, wobei die Ressourcen zwischen den Containern aufgeteilt werden. Dadurch sind sie ressourcenschonender und starten in Sekundenschnelle.

Docker Architektur

Nachfolgend sehen Sie ein vereinfachtes Schema der Docker-Architektur.

Im Folgenden werden die einzelnen Komponenten einer Docker-Architektur detailliert beschrieben.

Docker-Engine

Dies ist das Kernstück des gesamten Docker-Systems. Die Docker-Engine ist eine Anwendung, die einer Client-Server-Architektur folgt und auf dem Host-Rechner installiert wird. Sie besteht aus drei Hauptbestandteilen:

  • Server: Der Docker-Daemon, bekannt als dockerd. Er ist zuständig für die Erstellung und Verwaltung von Docker-Images, Containern und Netzwerken.
  • REST-API: Sie dient dazu, dem Docker-Daemon Anweisungen zu geben, welche Aktionen auszuführen sind.
  • Befehlszeilenschnittstelle (CLI): Ein Client, über den Docker-Befehle eingegeben werden können.

Docker-Client

Docker-Benutzer interagieren über einen Client mit Docker. Werden Docker-Befehle ausgeführt, übermittelt der Client diese an den dockerd-Daemon, der sie dann ausführt. Die Docker-API wird für Docker-Befehle genutzt. Ein Docker-Client kann mit mehreren Daemons gleichzeitig kommunizieren.

Docker-Registrierungen

Dies ist der Ort, an dem Docker-Images gespeichert werden. Es kann sich entweder um eine öffentliche oder eine private Docker-Registrierung handeln. Docker Hub dient als Standard-Speicherort für Docker-Images und ist eine öffentliche Registrierung. Es besteht auch die Möglichkeit, eine eigene private Registrierung einzurichten und zu betreiben.

Wenn Sie Befehle wie docker pull oder docker run ausführen, wird das erforderliche Docker-Image aus der konfigurierten Registrierung abgerufen. Der Befehl docker push speichert hingegen ein Docker-Image in der konfigurierten Registrierung.

Docker-Objekte

Bei der Arbeit mit Docker werden verschiedene Objekte wie Images, Container, Volumes und Netzwerke verwendet.

Images

Docker-Images sind schreibgeschützte Vorlagen, die Anweisungen zum Erstellen eines Docker-Containers beinhalten. Ein Docker-Image kann von einer Docker-Hub-Registrierung heruntergeladen und unverändert genutzt werden. Alternativ kann es auch als Basis für weitere Modifikationen dienen, um ein neues, angepasstes Docker-Image zu erstellen. Eigene Docker-Images können mithilfe einer Dockerfile erstellt werden. Diese Datei enthält alle Anweisungen, die zur Erstellung und Ausführung eines Containers erforderlich sind, und erzeugt damit ein individuelles Docker-Image.

Ein Docker-Image hat eine schreibgeschützte Basisschicht, wobei die oberste Schicht beschreibbar ist. Wenn eine Dockerfile bearbeitet und neu erstellt wird, wird lediglich der geänderte Teil in der obersten Ebene neu aufgebaut.

Container

Sobald ein Docker-Image ausgeführt wird, wird ein Docker-Container erstellt. In diesem Container werden alle Anwendungen samt ihrer Laufzeitumgebung ausgeführt. Docker-Container können mithilfe der Docker-API oder CLI gestartet, gestoppt und gelöscht werden.

Hier ein Beispielbefehl zum Ausführen eines Ubuntu-Docker-Containers:

docker run -i -t ubuntu /bin/bash

Volumes

Persistente Daten, die von Docker erstellt und von Docker-Containern verwendet werden, werden in Volumes gespeichert. Diese werden vollständig von Docker über die Docker-CLI oder die Docker-API verwaltet. Volumes funktionieren sowohl mit Windows- als auch mit Linux-Containern. Anstatt Daten in der beschreibbaren Schicht eines Containers zu speichern, ist es ratsam, dafür Volumes zu nutzen. Da der Inhalt von Volumes unabhängig vom Lebenszyklus eines Containers existiert, vergrößern sie nicht die Größe des Containers.

Mit dem Flag -v oder --mount kann ein Container mit einem Volume gestartet werden. Im folgenden Beispiel wird das Volume geekvolume mit dem Container wdzwdz verbunden:

docker run -d --name wdzwdz -v geekvolume:/app nginx:latest

Netzwerke

Das Docker-Netzwerk dient als Kommunikationskanal für isolierte Container. Es gibt hauptsächlich fünf Netzwerk-Treiber in Docker:

  • Bridge: Der Standardnetzwerktreiber für Container. Er wird verwendet, wenn eine Anwendung auf eigenständigen Containern ausgeführt wird, die auf demselben Docker-Host miteinander kommunizieren.
  • Host: Dieser Treiber hebt die Netzwerkisolation zwischen Docker-Containern und dem Docker-Host auf. Er wird eingesetzt, wenn keine Isolation zwischen Host und Container benötigt wird.
  • Overlay: Dieses Netzwerk ermöglicht die Kommunikation zwischen Swarm-Diensten. Es wird genutzt, wenn Container auf verschiedenen Docker-Hosts laufen oder Swarm-Services aus mehreren Anwendungen gebildet werden.
  • None: Dieser Treiber deaktiviert die Netzwerkfunktionen.
  • macvlan: Dieser Treiber weist Containern MAC-Adressen zu, damit sie wie physische Geräte erscheinen. Der Datenverkehr wird über die MAC-Adressen der Container geleitet. Dieses Netzwerk wird zum Beispiel verwendet, wenn Container bei der Migration einer VM-Umgebung wie ein physisches Gerät aussehen sollen.

Zusammenfassung

Ich hoffe, dass dieser Artikel Ihnen einen guten Überblick über die Docker-Architektur und ihre wesentlichen Komponenten gegeben hat. Vertiefen Sie Ihr Wissen durch praktische Arbeit mit Docker. Wenn Sie an einer praktischen Schulung interessiert sind, empfehle ich Ihnen den Docker Mastery-Kurs.

Hat Ihnen der Artikel gefallen? Zögern Sie nicht, ihn mit anderen zu teilen!