Was ist Docker? Tutorial für Anfänger
Docker hat sich in kürzester Zeit zur bevorzugten Technologie für die Verpackung und Bereitstellung moderner verteilter Anwendungen entwickelt. Der Name Docker ist daher zum Synonym für Container geworden. Aber was genau ist Docker, wie funktioniert es, und warum sollte man es verwenden? Lesen Sie weiter und erfahren Sie alles über die wichtigsten Konzepte und Funktionen von Docker sowie die Vorteile, die es der Unternehmens-IT bringt. Außerdem zeigen wir Ihnen, wie Sie das Beste aus Ihren Docker-Container-Umgebungen herausholen können.
Bevor wir anfangen, sehen wir uns aber zuerst die Grundlagen von Containern an.
Container 1×1
Wenn das Thema völliges Neuland für Sie ist, werden Sie sich wahrscheinlich fragen: Was sind Container überhaupt? Kurz gesagt sind Container eine Alternative zur herkömmlichen Virtualisierungs-Methode, bei der virtuelle Maschinen (VMs) die Partitionierung von Infrastruktur-Ressourcen übernehmen. Doch während VMs vollwertige Gastsysteme sind, handelt es sich bei Containern um deutlich optimierte Betriebsumgebungen, die nur jene Ressourcen bereitstellen, die eine Anwendung tatsächlich benötigt. Das ist dank der Art und Weise, wie Container von der Host-Infrastruktur abstrahiert werden, möglich. Anstatt einen Hypervisor für die Verteilung von Hardware-Ressourcen zu verwenden, teilen sich Container den Kernel des Host-OS mit anderen Containern.
Das kann den Infrastruktur-Footprint Ihrer Anwendungen erheblich reduzieren, da Container alle Systemkomponenten bündeln können, die Sie für die Ausführung Ihres Codes benötigen – ohne ein komplett aufgeblasenes Betriebssystem laufen zu lassen. Die geringere Größe und Benutzerfreundlichkeit von Containern bedeutet auch, dass sie schneller gestoppt und gestartet werden können als VMs und man somit besser auf schwankende Skalierungsanforderungen reagieren kann. Und im Gegensatz zu einem Hypervisor muss eine Container-Engine nicht ein ganzes Betriebssystem emulieren. Insgesamt bieten Container also normalerweise bessere Leistungen als herkömmliche VM-Implementierungen.
Container und die Cloud
Container sind ideal für den heutigen Cloud-Ansatz in der Anwendungsarchitektur, bei dem man sich nicht auf ein großes, monolithisches Programm verlassen muss, sondern auf eine Suite von lose gekoppelten Microservices setzen kann. Das bringt Ihnen eine Menge Vorteile. So können Sie beispielsweise Microservices über einen Cluster von VMs replizieren, um die Fehlertoleranz zu verbessern. Wenn eine einzelne VM ausfällt, kann Ihre Anwendung auf andere Microservices im Cluster zurückgreifen und läuft weiter. Darüber hinaus sind Microservices einfacher zu warten, da Sie den Code und die Systemumgebung Ihrer Container patchen oder aktualisieren können, ohne andere im Cluster zu beeinträchtigen.
Container und DevOps
Das kompakte Design von Containern macht sie äußerst portabel. Daher lassen sie sich mit Hilfe von DevOps-Tools wie Jenkins oder CodeShip problemlos in Continuous-Integration- (CI) und Continuous-Delivery-(CD) Workflows integrieren. Aus Sicht der Entwickler sind Container auch deshalb äußerst praktisch, weil sie auf verschiedenen Servern mit unterschiedlichen Konfigurationen gehostet werden können – vorausgesetzt, dass jedes Server-Betriebssystem denselben Linux-Kernel oder zumindest einen mit der Container-Umgebung kompatiblen Kernel verwendet.
So können sich Programmierer ganz auf den Code konzentrieren, ohne sich Gedanken über die zugrunde liegende Infrastruktur machen zu müssen, auf der dieser schließlich ausgeführt wird. Ebenso können Entwickler, unabhängig von der jeweils verwendeten Host-Umgebung, gemeinsam an Projekten arbeiten.
Sollten Sie Docker verwenden?
Docker ist eine von mehreren verschiedenen Container-Plattformen. Warum also sollte man sie anderen Container-Lösungen vorziehen? Dafür gibt es mehrere Gründe: Erstens ist Docker der mit Abstand am häufigsten verwendete Container-Service. Seine Beliebtheit beruht vor allem auf der Tatsache, dass es sich um eine robuste, sichere und kostengünstige Lösung mit vielen Funktionen handelt, die einfacher zu implementieren ist als alle anderen. Zweitens handelt es sich um eine Open-Source-Lösung, die von einer großen Gemeinschaft von Unternehmen und Einzelpersonen unterstützt wird, die wiederum kontinuierlich zu dem Projekt beitragen. Docker bietet breiten Support sowie ein umfangreiches Ökosystem an ergänzenden Produkten, Servicepartnern und Container-Images und -Integrationen von Drittanbietern. Außerdem sind Sie durch die Entscheidung für Docker nicht an einen bestimmten Anbieter gebunden.
Zu guter Letzt erlaubt die Docker-Plattform auch die Ausführung von Containern unter Windows. Das wird durch einen Linux-Virtualisierungs-Layer ermöglicht, der sich zwischen Windows und der Docker-Laufzeitumgebung befindet. Neben den Linux-Container-Umgebungen unterstützt Docker für Windows auch native Windows-Container.
Obwohl sich immer mehr Container-Alternativen entwickeln, ist Docker immer noch ein Vorreiter in diesem Bereich und für die meisten Anwendungsfälle die erste Wahl. Bevor Sie jedoch entscheiden, ob Docker das Richtige für Sie ist, und mit der Docker-Plattform durchstarten, sollten Sie die folgenden Grundkonzepte verstehen:
Docker-Engine
Diese Anwendung wird auf dem Hostrechner installiert, um Docker-Container zu erstellen, auszuführen und zu verwalten. Sie ist das Herzstück des Docker-Systems und vereint alle Komponenten der Plattform an einem einzigen Ort.
Docker-Daemon
Diese Komponente ist die treibende Kraft des Docker-Systems. Sie empfängt und verarbeitet API-Anfragen zur Verwaltung der verschiedenen anderen Aspekte Ihrer Installation, z. B. Images, Container und Speichervolumen.
Docker-Client
Das ist die primäre Benutzeroberfläche zur Kommunikation mit dem Docker-System. Der Docker-Client nimmt Befehle über die Kommandozeile (CLI = Command-line interface) entgegen und sendet sie an den Docker-Daemon.
Docker-Image
Ein schreibgeschütztes Template zur Erstellung von Docker-Containern. Es besteht aus mehreren Layern, die ein All-in-One-Paket bilden, das alle Installationen, Abhängigkeiten, Bibliotheken, Prozesse und Anwendungscode enthält, die für die Erstellung einer voll funktionstüchtigen Container-Umgebung erforderlich sind.
Docker-Container
Die aktive Instanz eines Docker-Images, die entweder ein einzelnes Microservice oder einen gesamten Anwendungs-Stack ausführt. Wenn Sie einen Container starten, ergänzen Sie die darunter liegenden Layer Ihres Docker-Images mit einem obersten beschreibbaren Layer, der als Container-Layer bezeichnet wird. In diesem Layer werden alle Änderungen gespeichert, die während der Laufzeit am Container vorgenommen werden.
Docker-Registry
Ein Katalogsystem zum Hosten sowie Hoch- und Herunterladen von Docker-Images. Sie können Ihre eigene lokale Registry oder eine der vielen Registry-Services von Drittanbietern verwenden (z. B. Red Hat Quay, Amazon ECR, Google Container Registry und Docker Hub). Eine Docker-Registry organisiert Images in Speicherorten (sogenannten “Repositories”), wobei jedes Repository eine andere Version des gleichnamigen Docker-Images enthält.
Mit diesen Grundlagen im Hinterkopf werfen wir jetzt einen kurzen Blick auf einige andere Aspekte von Docker-Containern, über die Sie Bescheid wissen sollten:
Container-Orchestration
Sobald Sie eine Anwendung in Docker bereitstellen möchten, müssen Sie einen Weg finden, Ihre Container in Ihrer Microservice-Architektur bereitzustellen, zu konfigurieren, zu skalieren und zu überwachen. Open-Source-Orchestration-Systeme wie Kubernetes, Mesos und Docker Swarm bieten Ihnen die Tools, die Sie zur Verwaltung Ihrer Container-Cluster benötigen. Diese können üblicherweise …
- Rechenressourcen zwischen Containern zuweisen.
- aufgrund der Auslastung von Anwendungen Container hinzufügen oder entfernen.
- Interaktionen zwischen Containern verwalten.
- den Zustand von Containern überwachen.
- die Auslastung von Microservices ausgleichen.
Optimierung von Kosten und Leistung
Schlussendlich müssen Sie Ihre Bereitstellungen optimieren, damit Sie die maximale Leistung und Effizienz aus Ihren Containern herausholen. Beginnen Sie damit, Ihre Container so gut wie möglich zu rationalisieren, indem Sie nur das verpacken, was Ihre Anwendung tatsächlich benötigt. Diese Best Practice trägt auch dazu bei, die Angriffsfläche der Container zu minimieren und dadurch die Sicherheit zu verbessern. Damit Ihre Container die Ressourcen so effizient wie möglich nutzen, sollten Sie sie regelmäßig kontrollieren, damit sie ein ausgewogenes Verhältnis zwischen CPU- und Speicherzuweisung, Clustergröße und Replikation von Microservices einhalten. Diese Schritte sind bei cloudbasierten Bereitstellungen besonders wichtig, da überflüssiger Ressourcenverbrauch zusätzliche und unnötige Kosten für die Cloud verursachen.
Erfahren Sie mehr über Docker!