Machen wir uns mit der Docker-Architektur und ihren wesentlichen Komponenten vertraut.

Ich gehe davon aus, dass Sie ein Grundverständnis von Docker haben. Wenn nicht, können Sie sich diesen früheren Artikel ansehen.

Ich glaube, Sie verstehen die Bedeutung von Docker für DevOps. Hinter diesem fantastischen Tool muss eine erstaunliche, gut durchdachte Architektur stehen. Oder etwa nicht?

Aber bevor ich darüber spreche, möchte ich Ihnen die früheren und aktuellen Virtualisierungssysteme vorstellen.

Traditionelle vs. Virtualisierung der neuen Generation

Früher haben wir virtuelle Maschinen erstellt, und jede VM hatte ein Betriebssystem, das viel Platz beanspruchte und schwer war.

Bei Docker-Containern haben Sie nur ein einziges Betriebssystem, und die Ressourcen werden von den Containern gemeinsam genutzt. Daher ist er leichtgewichtig und bootet in Sekundenschnelle.

Traditional vs New Gen

Docker-Architektur

Nachfolgend sehen Sie ein einfaches Diagramm der Docker-Architektur.

Docker Architecture

Lassen Sie mich Ihnen die Komponenten einer Docker-Architektur erklären.

Docker-Engine

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

  • Server: Es handelt sich um den Docker-Daemon namens dockerd. Er kann Docker-Images erstellen und verwalten. Container, Netzwerke, usw.
  • Rest API: Sie wird verwendet, um den Docker-Daemon anzuweisen, was er tun soll.
  • Befehlszeilenschnittstelle (CLI): Es handelt sich um einen Client, der zur Eingabe von Docker-Befehlen verwendet wird.

Docker-Client

Docker-Benutzer können über einen Client mit Docker interagieren. Wenn ein Docker-Befehl ausgeführt wird, sendet der Client ihn an den Daemon dockerd, der ihn ausführt. Die Docker-API wird von Docker-Befehlen verwendet. Der Docker-Client kann mit mehr als einem Daemon kommunizieren.

Docker-Registrierungen

Dies ist der Ort, an dem die Docker-Images gespeichert werden. Es kann sich um eine öffentliche Docker-Registry oder eine private Docker-Registry handeln. Docker Hub ist der Standard-Speicherort für Docker-Images, seine öffentliche Registry. Sie können auch Ihre eigene private Registry erstellen und betreiben.

Wenn Sie die Befehle docker pull oder docker run ausführen, wird das gewünschte Docker-Image aus der konfigurierten Registry gezogen. Wenn Sie den Befehl docker push ausführen, wird das Docker-Image in der konfigurierten Registry gespeichert.

Docker-Objekte

Wenn Sie mit Docker arbeiten, verwenden Sie Images, Container, Volumes, Netzwerke – all dies sind Docker-Objekte.

Images

Docker-Images sind schreibgeschützte Vorlagen mit Anweisungen zur Erstellung eines Docker-Containers. Ein Docker-Image kann von einem Docker-Hub gezogen und so verwendet werden, wie es ist. Sie können aber auch zusätzliche Anweisungen zum Basis-Image hinzufügen und ein neues, modifiziertes Docker-Image erstellen. Sie können Ihre eigenen Docker-Images auch mithilfe einer Dockerdatei erstellen. Erstellen Sie ein Dockerfile mit allen Anweisungen zur Erstellung eines Containers und führen Sie es aus; dadurch wird Ihr eigenes Docker-Image erstellt.

Ein Docker-Image besteht aus einer Basisschicht, die nur gelesen werden kann, und der obersten Schicht, die beschrieben werden kann. Wenn Sie eine Dockerdatei bearbeiten und neu erstellen, wird nur der geänderte Teil in der obersten Schicht wiederhergestellt.

Container

Nachdem Sie ein Docker-Image ausgeführt haben, wird ein Docker-Container erstellt. Alle Anwendungen und ihre Umgebung werden in diesem Container ausgeführt. Sie können Docker API oder CLI verwenden, um einen Docker-Container zu starten, zu stoppen oder zu löschen.

Nachfolgend finden Sie ein Beispiel für einen Befehl zum Ausführen eines Ubuntu-Docker-Containers:

docker run -i -t ubuntu /bin/bash

Volumes

Die von Docker erzeugten und von Docker-Containern verwendeten persistenten Daten werden in Volumes gespeichert. Sie werden vollständig von Docker über Docker CLI oder Docker API verwaltet. Volumes funktionieren sowohl auf Windows- als auch auf Linux-Containern. Anstatt Daten in der beschreibbaren Schicht eines Containers zu speichern, ist es immer eine gute Option, dafür Volumes zu verwenden. Der Inhalt von Volumes existiert außerhalb des Lebenszyklus eines Containers, so dass die Verwendung von Volumes die Größe eines Containers nicht erhöht.

Sie können das Flag -v oder -mount verwenden, um einen Container mit einem Volume zu starten. In diesem Beispielbefehl verwenden Sie das Volume geekvolume mit dem Container geekflare.

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

Netzwerke

Das Docker-Netzwerk ist ein Durchgang, über den alle isolierten Container miteinander kommunizieren. Es gibt hauptsächlich fünf Netzwerktreiber in Docker:

  1. Bridge: Dies ist der Standard-Netzwerktreiber für einen Container. Sie verwenden dieses Netzwerk, wenn Ihre Anwendung auf eigenständigen Containern läuft, d.h. wenn mehrere Container mit demselben Docker-Host kommunizieren.
  2. Host: Dieser Treiber hebt die Netzwerkisolierung zwischen Docker-Containern und Docker-Host auf. Er wird verwendet, wenn Sie keine Netzwerkisolierung zwischen Host und Container benötigen.
  3. Überlagern: Über dieses Netzwerk können Schwarmdienste miteinander kommunizieren. Es wird verwendet, wenn die Container auf verschiedenen Docker-Hosts laufen oder wenn Schwarmdienste von mehreren Anwendungen gebildet werden.
  4. Keine: Dieser Treiber deaktiviert die gesamte Vernetzung.
  5. macvlan: Dieser Treiber weist den Containern eine Mac-Adresse zu, damit sie wie physische Geräte aussehen. Der Datenverkehr zwischen den Containern wird über deren Mac-Adressen geleitet. Dieses Netzwerk wird verwendet, wenn Sie möchten, dass die Container wie ein physisches Gerät aussehen, z.B. bei der Migration einer VM-Einrichtung.

Fazit

Ich hoffe, Sie haben jetzt einen Überblick über die Docker-Architektur und ihre wesentlichen Komponenten. Navigieren Sie durch Docker, um mehr zu erfahren, und wenn Sie an einer praktischen Schulung interessiert sind, dann schauen Sie sich diesen Docker Mastery Kurs an.