In der Welt der modernen Softwareentwicklung sind Effizienz und Konsistenz entscheidend. Entwickler und Betriebsteams benötigen Lösungen, die ihnen helfen, Anwendungen nahtlos in verschiedenen Umgebungen zu verwalten, bereitzustellen und auszuführen.
Container und Docker sind Technologien, die revolutioniert haben, wie Software erstellt, getestet und bereitgestellt wird.
Ob Sie neu in der Welt der Technologie sind oder einfach die Grundlagen von Docker verstehen möchten, dieser Artikel wird Sie durch die wesentlichen Punkte führen.
Inhaltsverzeichnis
Was sind Container?
Bevor wir uns mit Docker beschäftigen, wollen wir zuerst verstehen, was Container sind. Stellen Sie sich vor, Sie arbeiten an einem Projekt und Ihre Anwendung funktioniert einwandfrei auf Ihrem Laptop. Aber wenn Sie versuchen, dieselbe Anwendung auf einem anderen Rechner auszuführen, schlägt sie fehl. Oft liegt das an Unterschieden in den Umgebungen: verschiedenen Betriebssystemen, installierten Softwareversionen oder Konfigurationen.
Container lösen dieses Problem, indem sie eine Anwendung und alle ihre Abhängigkeiten wie Bibliotheken, Frameworks und Konfigurationsdateien in einer einzigen, standardisierten Einheit verpacken. Dies stellt sicher, dass die Anwendung unabhängig davon, ob sie auf Ihrem Laptop, einem Server oder in der Cloud bereitgestellt wird, gleich funktioniert.
Schlüsselfunktionen von Containern:
-
Leichtgewichtig: Container teilen den Kernel des Hostsystems, im Gegensatz zu virtuellen Maschinen (VMs), die separate Betriebssysteminstanzen erfordern, was sie schneller und effizienter macht.
-
Tragbar: Einmal erstellt, kann ein Container konsistent in verschiedenen Umgebungen ausgeführt werden.
-
Isoliert: Container werden in isolierten Prozessen ausgeführt, was bedeutet, dass sie nicht mit anderen Anwendungen interferieren, die auf demselben System ausgeführt werden.
Was ist Docker?
Jetzt, da wir Container verstehen, lassen Sie uns über Docker sprechen, die Plattform, die Container populär gemacht hat.
Docker ist ein Open-Source-Tool, das entwickelt wurde, um den Prozess der Erstellung, Verwaltung und Bereitstellung von Containern zu vereinfachen. 2013 gestartet, ist Docker aufgrund seiner Benutzerfreundlichkeit, der Unterstützung durch die Community und des leistungsstarken Ökosystems von Tools schnell zur bevorzugten Lösung für Containerisierung geworden.
Schlüsselkonzepte in Docker
-
Docker-Images: Denken Sie an ein Docker-Image als Bauplan für Ihren Container. Es enthält alles, was benötigt wird, um die Anwendung auszuführen, einschließlich Code, Bibliotheken und Systemabhängigkeiten. Images werden aus einer Reihe von Anweisungen erstellt, die in einem Dockerfile geschrieben sind.
-
Docker-Container: Ein Container ist eine laufende Instanz eines Docker-Images. Wenn Sie einen Container erstellen und starten, startet Docker das Image in einer isolierten Umgebung, in der Ihre Anwendung ausgeführt werden kann.
-
Dockerfile: Dies ist eine Textdatei, die die Schritte enthält, die benötigt werden, um ein Docker-Image zu erstellen. Hier definieren Sie, wie Ihr Container aussehen wird, einschließlich des Basisimages, des Anwendungscode und eventueller zusätzlicher Abhängigkeiten.
-
Docker Hub: Docker Hub ist ein öffentliches Register, in dem Entwickler vorgefertigte Images teilen und darauf zugreifen können. Wenn Sie an einer gängigen Anwendung oder Technologiestack arbeiten, besteht die Möglichkeit, dass bereits ein Image auf Docker Hub verfügbar ist, was Ihnen Zeit spart.
-
Docker Compose: Für Anwendungen, die mehrere Container benötigen (zum Beispiel einen Webserver und eine Datenbank), ermöglicht Docker Compose das Definieren und Verwalten von Multi-Container-Umgebungen mithilfe einer einfachen YAML-Datei.
Warum Docker?
Die Beliebtheit von Docker rührt von seiner Fähigkeit her, eine Vielzahl von Herausforderungen zu lösen, denen Entwickler heute gegenüberstehen:
-
Konsistenz über verschiedene Umgebungen hinweg: Entwickler können „einmal erstellen, überall ausführen“ und so sicherstellen, dass die Anwendung in verschiedenen Umgebungen, von der lokalen Entwicklung bis zur Produktion, auf dieselbe Weise funktioniert.
-
Schnelligkeit: Docker-Container starten und stoppen schnell, was sie ideal für Test- und Bereitstellungspipelines macht.
-
Effiziente Ressourcennutzung: Da Container die Ressourcen des Host-Systems effektiver teilen als virtuelle Maschinen, reduzieren sie den Overhead und ermöglichen eine höhere Dichte bei Bereitstellungen.
-
Versionierung Ihrer Anwendungen: Docker ermöglicht es Ihnen, nicht nur Ihren Code, sondern auch die Umgebung, in der Ihr Code ausgeführt wird, zu versionieren. Dies ist besonders nützlich, um zu früheren Versionen zurückzukehren oder Probleme in der Produktion zu debuggen.
Docker-Architektur
Wenn Sie Docker zum ersten Mal verwenden, behandeln Sie es möglicherweise wie eine „einfach funktionierende“ Box. Das ist für den Einstieg in Ordnung, aber ein tieferes Verständnis der Docker-Architektur wird Ihnen helfen, Probleme zu beheben, die Leistung zu optimieren und fundierte Entscheidungen über Ihre Containerisierungsstrategie zu treffen.
Die Architektur von Docker ist darauf ausgelegt, Effizienz, Flexibilität und Skalierbarkeit zu gewährleisten. Sie besteht aus mehreren Komponenten, die zusammenarbeiten, um Container zu erstellen, zu verwalten und auszuführen. Schauen wir uns jede dieser Komponenten genauer an.
Docker-Architektur: Schlüsselkomponenten
Die Architektur von Docker basiert auf einem Client-Server-Modell, das die folgenden Komponenten umfasst
-
Docker-Client
-
Docker-Daemon (dockerd)
-
Docker Engine
-
Docker-Images
-
Docker-Container
-
Docker-Registries
1. Docker-Client
Der Docker-Client ist die primäre Methode, wie Benutzer mit Docker interagieren. Es ist ein Befehlszeilentool, das Anweisungen an den Docker-Daemon (den wir als nächstes behandeln werden) über REST-APIs sendet. Befehle wie docker build
, docker pull
und docker run
werden vom Docker-Client ausgeführt.
Wenn Sie einen Befehl wie docker run nginx
eingeben, übersetzt der Docker-Client dies in eine Anfrage, die der Docker-Daemon verstehen und darauf reagieren kann. Der Docker-Client fungiert im Wesentlichen als Front-End für die Interaktion mit den komplexeren Backend-Komponenten von Docker.
2. Docker-Daemon (dockerd)
Der Docker-Daemon, auch bekannt als dockerd, ist das Herzstück der gesamten Docker-Operation. Es handelt sich um einen Hintergrundprozess, der auf Anfragen vom Docker-Client lauscht und Docker-Objekte wie Container, Images, Netzwerke und Volumes verwaltet.
Das sind die Verantwortlichkeiten des Docker-Daemons
-
Erstellen und Ausführen von Containern: Wenn der Client einen Befehl zum Ausführen eines Containers sendet, ruft der Daemon das Image ab, erstellt den Container und startet ihn.
-
Verwaltung von Docker-Ressourcen: Der Daemon übernimmt Aufgaben wie Netzwerkkonfigurationen und Volumenverwaltung.
- Der Docker-Daemon läuft auf dem Hostrechner und kommuniziert mit dem Docker-Client über eine REST-API, Unix-Sockets oder eine Netzwerkschnittstelle. Er ist auch dafür zuständig, mit den Container-Laufzeiten zu interagieren, die die tatsächliche Ausführung der Container steuern.
3. Docker Engine
Die Docker Engine ist der Kern von Docker. Sie ist es, die die gesamte Plattform zum Laufen bringt, indem sie Client, Daemon und Container-Laufzeit kombiniert. Die Docker Engine kann auf verschiedenen Betriebssystemen wie Linux, Windows und macOS ausgeführt werden.
Es gibt zwei Versionen der Docker Engine
-
Docker CE (Community Edition): Dies ist die kostenlose Open-Source-Version von Docker, die weit verbreitet für persönliche und kleinere Projekte verwendet wird.
-
Docker EE (Enterprise Edition): Die kostenpflichtige Enterprise-Version von Docker verfügt über zusätzliche Funktionen wie erweiterte Sicherheit, Support und Zertifizierung.
Der Docker Engine vereinfacht die Komplexitäten der Container-Orchestrierung, indem er die verschiedenen Komponenten integriert, die zum Erstellen, Ausführen und Verwalten von Containern erforderlich sind.
4. Docker-Images
Ein Docker-Image ist eine schreibgeschützte Vorlage, die alles enthält, was Ihre Anwendung zum Ausführen benötigt – Code, Bibliotheken, Abhängigkeiten und Konfigurationen. Images sind die Bausteine von Containern. Wenn Sie einen Container ausführen, erstellen Sie im Wesentlichen eine beschreibbare Ebene auf einem Docker-Image.
Docker-Images werden in der Regel aus Dockerfiles erstellt, die Textdateien sind, die Anweisungen zum Erstellen des Images enthalten. Zum Beispiel könnte ein grundlegendes Dockerfile mit einem Basisimage wie nginx
oder ubuntu
beginnen und Befehle zum Kopieren von Dateien, Installieren von Abhängigkeiten oder Festlegen von Umgebungsvariablen enthalten.
Hier ist ein einfaches Beispiel eines Dockerfiles
dockerfileCopy codeFROM nginx:latest
COPY ./html /usr/share/nginx/html
EXPOSE 80
In diesem Beispiel verwenden wir das offizielle Nginx-Image als Basis und kopieren unsere lokalen HTML-Dateien in das Webverzeichnis des Containers.
Sobald das Image erstellt ist, kann es in einem Docker-Registry gespeichert und mit anderen geteilt werden.
5. Docker-Container
Ein Docker-Container ist eine laufende Instanz eines Docker-Images. Er ist leichtgewichtig und isoliert von anderen Containern, teilt jedoch den Kernel des Host-Betriebssystems. Jeder Container verfügt über sein eigenes Dateisystem, Speicher, CPU-Zuweisung und Netzwerkeinstellungen, was ihn tragbar und reproduzierbar macht.
Container können erstellt, gestartet, gestoppt und zerstört werden, und sie können sogar zwischen Neustarts bestehen bleiben. Da Container auf Images basieren, stellen sie sicher, dass Anwendungen unabhängig vom Ausführungsort gleich funktionieren.
Einige wichtige Merkmale von Docker-Containern:
-
Isolierung: Container sind voneinander und vom Host isoliert, teilen jedoch denselben OS-Kernel.
-
Portabilität: Container können überall ausgeführt werden, sei es auf Ihrem lokalen Rechner, einer virtuellen Maschine oder einem Cloud-Anbieter.
6. Docker-Registrierungen
Ein Docker-Registry ist ein zentraler Ort, an dem Docker-Images gespeichert und verteilt werden. Der beliebteste Registrierungsort ist der Docker Hub, der Millionen öffentlich verfügbarer Images hostet. Organisationen können auch private Registrierungen einrichten, um ihre eigenen Images sicher zu speichern und zu verteilen.
Docker-Registrierungen bieten mehrere wichtige Funktionen:
-
Image-Versionierung: Images werden mithilfe von Tags versioniert, was die Verwaltung verschiedener Versionen einer Anwendung erleichtert.
-
Zugriffskontrolle: Registrierungen können öffentlich oder privat sein, mit rollenbasierter Zugriffskontrolle, um zu verwalten, wer Bilder abrufen oder hochladen kann.
-
Verteilung: Bilder können aus einer Registrierung abgerufen und überall bereitgestellt werden, was es einfach macht, containerisierte Anwendungen zu teilen und wiederzuverwenden.
Docker’s Container-Laufzeit: containerd
Eine wichtige jüngste Entwicklung in der Architektur von Docker ist die Verwendung von containerd. Früher hatte Docker seine eigene Container-Laufzeit, aber jetzt verwendet es containerd, eine Container-Laufzeit, die branchenüblichen Standards folgt und auch von anderen Plattformen wie Kubernetes verwendet wird.
-
containerd ist verantwortlich für
-
Starten und Stoppen von Containern
-
Verwalten von Speicher und Netzwerk für Container
-
Abrufen von Containerbildern aus Registrierungen
-
Durch die Trennung des Container-Runtimes von der höheren Funktionalität von Docker ist Docker modularer geworden, was es anderen Tools ermöglicht, containerd zu verwenden, während sich Docker auf benutzerorientierte Funktionen konzentriert.
Wie man einen einfachen Container mit Docker erstellt
Das Linux-Image abrufen
Beginnen Sie mit dem Abrufen des alpine
-Images von Docker Hub. Das alpine
-Image ist eine minimale Linux-Distribution, die darauf ausgelegt ist, leicht und schnell zu sein.
Führen Sie den folgenden Befehl aus:
docker pull alpine
Dadurch wird das alpine
-Image auf Ihrem lokalen System heruntergeladen.
Den Container starten
Erstellen und starten Sie einen Container mit dem alpine
-Image. Wir werden auch eine Terminal-Sitzung innerhalb des Containers starten.
docker run -it alpine /bin/sh
Hier ist, was jede Option bedeutet:
-
docker run
: Erstellt und startet einen neuen Container. -
-it
: Ermöglicht die Interaktion mit dem Container (interaktiver Modus + Terminal). -
alpine
: Gibt das zu verwendende Image an. -
/bin/sh
: Gibt den Befehl im Container auszuführen an (in diesem Fall eine Shell-Sitzung).
Erkunden Sie den Container
Sobald der Container läuft, sehen Sie eine Shell-Aufforderung, die ungefähr so aussieht
/ #
Dies zeigt an, dass Sie sich innerhalb des Alpine Linux Containers befinden. Sie können nun Linux-Befehle ausführen. Zum Beispiel:
Aktuelles Verzeichnis überprüfen:
pwd
Dateien im Verzeichnis auflisten:
ls
Ausgabe: Eine minimale Verzeichnisstruktur, da Alpine ein leichtgewichtiges Image ist.
Sie können auch ein Paket installieren (Alpine verwendet apk
als Paketmanager):
apk add curl
Container verlassen
Wenn Sie mit dem Erkunden fertig sind, geben Sie exit
ein, um die Sitzung zu beenden und den Container zu stoppen
bashCopy codeexit
Zugriff auf den Container nach dem Stoppen
Wenn Sie nach dem Stoppen erneut auf den Container zugreifen möchten, können Sie diesen Befehl verwenden, um alle Container aufzulisten (auch die gestoppten):
docker ps -a
Sie sehen eine Liste von Containern mit ihren IDs und Status, dann können Sie den gestoppten Container starten:
docker start <container-id>
Sie können sich mit dem Shell des Containers verbinden, indem Sie diesen Befehl verwenden:
docker exec -it <container-id> /bin/sh
Wenn Sie den Container nicht mehr benötigen, können Sie ihn entfernen
-
Stoppen Sie den Container (falls er noch läuft):
docker stop <container-id>
-
Container entfernen:
docker rm <container-id>
Wichtige Docker-Befehle Zusammenfassung
Befehl | Beschreibung |
docker pull alpine |
Lädt das Alpine Linux-Image herunter. |
docker run -it alpine /bin/sh |
Erstellt und startet einen interaktiven Container. |
docker ps -a |
Listet alle Container (laufend und gestoppt) auf. |
docker start <container-id> |
Startet einen gestoppten Container. |
docker exec -it <container-id> |
Verbindet sich mit einem laufenden Container. |
docker stop <container-id> |
Stoppt einen laufenden Container. |
docker rm <container-id> |
Entfernt einen gestoppten Container. |
Zusammenfassung
Jetzt, wo Sie ein grundlegendes Verständnis haben, ist es Zeit, Ihr Wissen anzuwenden. Beginnen Sie mit Experimenten mit Docker, erstellen Sie Ihren ersten Container und erkunden Sie sein umfangreiches Ökosystem.
Sie werden bald sehen, warum Docker zu einem Eckpfeiler moderner DevOps und Softwareentwicklung geworden ist.
Sie können mir folgen auf
Source:
https://www.freecodecamp.org/news/an-introduction-to-docker-and-containers-for-beginners/