Zum Hauptinhalt springen

Docker Überblick

Docker war zunächst ein internes Projekt, das von Solomon Hykes, dem Gründer von dotCloud, einem in Frankreich ansässigen Unternehmen, initiiert wurde. Es war eine Innovation, die auf den jahrelangen Cloud-Service-Technologien von dotCloud aufbaute und im März 2013 unter der Apache-2.0-Lizenz als Open-Source-Software veröffentlicht wurde. Der primäre Projektcode wird auf GitHub gepflegt, und das Projekt wurde in Moby umbenannt. Das Docker-Projekt trat später der Linux Foundation bei und gründete die Open Container Initiative (OCI).

Nach der Freigabe als Open-Source-Software erlangte Docker weitreichende Aufmerksamkeit und Diskussion, wobei sein GitHub-Projekt bis heute über 67.000 Sterne und mehr als 18.000 Forks ansammelte. Aufgrund der Popularität des Docker-Projekts entschied sich dotCloud Ende 2013, sich in Docker umzubenennen. Docker wurde zunächst auf Ubuntu 12.04 entwickelt und implementiert, während Red Hat Docker ab RHEL 6.5 unterstützte und Google Docker in seinen PaaS-Produkten umfangreich nutzte.

Docker wird mit Go entwickelt, einer von Google eingeführten Programmiersprache, und nutzt Linux-Kernel-Technologien wie cgroups, Namespaces und OverlayFS-Typ Union FS. Es kapselt und isoliert Prozesse auf Betriebssystemebene, eine Form der Betriebssystem-Virtualisierung. Da die isolierten Prozesse unabhängig vom Host und anderen isolierten Prozessen sind, werden sie als Container bezeichnet. Die ursprüngliche Implementierung basierte auf LXC, aber ab Version 0.7 wurde LXC entfernt und Docker begann, das selbst entwickelte libcontainer zu verwenden. Ab Version 1.11 hat es sich weiterentwickelt und verwendet runC und containerd.

Was ist Docker

Docker ist eine offene Plattform für die Entwicklung, Auslieferung und Ausführung von Anwendungen. Docker ermöglicht es Ihnen, Ihre Anwendungen von Ihrer Infrastruktur zu trennen, so dass Sie Software schnell bereitstellen können. Mit Docker können Sie Ihre Infrastruktur auf die gleiche Weise verwalten wie Ihre Anwendungen. Durch die Nutzung der Docker-Methoden für das Versenden, Testen und Bereitstellen von Code können Sie die Verzögerung zwischen dem Schreiben von Code und dessen Ausführung in der Produktion erheblich reduzieren.

Warum Docker verwenden

Als neu aufkommende Virtualisierungsmethode bietet Docker zahlreiche Vorteile gegenüber traditionellen Virtualisierungsansätzen.

Effizientere Ressourcennutzung Da Container keine Hardware-Virtualisierung oder ein vollständiges Betriebssystem benötigen, nutzt Docker Systemressourcen effizienter. Ob es sich um die Geschwindigkeit der Anwendungsausführung, den Arbeitsspeicherverbrauch oder die Dateispeichergeschwindigkeit handelt, Docker übertrifft traditionelle Virtualisierungstechnologien. Folglich können im Vergleich zur virtuellen Maschinenentechnologie auf einem Host mit der gleichen Konfiguration oft mehr Anwendungen ausgeführt werden.

Schnellere Startzeit Bei der traditionellen virtuellen Maschinenentechnologie dauert es oft Minuten, bis ein Anwendungsservice gestartet ist, während Docker-Container nahezu sofortige Startzeiten innerhalb von Sekunden oder sogar Millisekunden erreichen können, da sie direkt auf dem Host-Kernel laufen, ohne dass ein kompletter Betriebssystemstart erforderlich ist. Dies reduziert die Entwicklungs-, Test- und Bereitstellungszeit erheblich.

Konsistente Laufzeitumgebung Ein häufiges Problem während des Entwicklungsprozesses ist die Inkonsistenz der Umgebungen. Aufgrund von Unterschieden zwischen Entwicklungs-, Test- und Produktionsumgebungen können einige Fehler während der Entwicklung unentdeckt bleiben. Docker-Images bieten eine vollständige Laufzeitumgebung, mit Ausnahme des Kernels, und gewährleisten die Konsistenz der Anwendungslaufzeitumgebung, wodurch das Problem "Aber es funktioniert auf meinem Rechner" vermieden wird.

Kontinuierliche Bereitstellung und Auslieferung Für Entwickler und Betriebsmitarbeiter (DevOps) ist das Idealste, einmal zu erstellen oder zu konfigurieren und dann überall korrekt auszuführen.

Docker ermöglicht eine kontinuierliche Integration, kontinuierliche Bereitstellung und Auslieferung durch die Anpassung von Anwendungsimages. Entwickler können Images mit Dockerfiles erstellen und in kontinuierliche Integrationssysteme zur Testung integrieren. Betriebsteams können diese Images dann schnell in Produktionsumgebungen bereitstellen, sogar mit der Integration in kontinuierliche Bereitstellungs-/Auslieferungssysteme für eine automatisierte Bereitstellung.

Durch die Verwendung von Dockerfiles wird der Image-Erstellungsprozess transparent, sodass sowohl Entwicklungs- als auch Betriebsteams die Laufzeitumgebung und die Bereitstellungsanforderungen der Anwendung verstehen, was eine bessere Image-Bereitstellung in Produktionsumgebungen ermöglicht.

Einfachere Migration Da Docker die Konsistenz der Laufzeitumgebung gewährleistet, wird die Anwendungsmigration einfacher. Docker kann auf verschiedenen Plattformen wie physischen Maschinen, virtuellen Maschinen, öffentlichen Clouds, privaten Clouds und sogar Laptops mit konsistenten Ergebnissen ausgeführt werden. Benutzer können Anwendungen, die auf einer Plattform ausgeführt werden, problemlos auf eine andere migrieren, ohne sich Sorgen darüber machen zu müssen, dass Änderungen der Laufzeitumgebung die korrekte Funktion der Anwendung verhindern.

Einfachere Wartung und Erweiterbarkeit Die geschichtete Speichertechnologie und die Image-Technologie von Docker erleichtern die Wiederverwendung duplizierter Anwendungskomponenten, was die Wartung und Aktualisierung von Anwendungen vereinfacht. Die Erweiterung von Images auf der Grundlage von Basis-Images wird ebenfalls sehr einfach. Darüber hinaus pflegt das Docker-Team zusammen mit verschiedenen Open-Source-Projekt-Teams eine große Sammlung hochwertiger offizieller Images, die direkt in Produktionsumgebungen verwendet oder als Basis für weitere Anpassungen genutzt werden können, wodurch die Kosten für die Erstellung von Anwendungsservice-Images erheblich reduziert werden.

Docker-Architektur

Docker verwendet eine Client-Server-Architektur. Der Docker-Client kommuniziert mit dem Docker-Daemon, der für den Aufbau, die Ausführung und Verteilung Ihrer Docker-Container verantwortlich ist. Der Docker-Client und der Daemon können auf demselben System laufen, oder Sie können einen Docker-Client mit einem Remote-Docker-Daemon verbinden. Der Docker-Client und der Daemon kommunizieren über eine REST-API, über UNIX-Sockets oder eine Netzwerkschnittstelle. Ein weiterer Docker-Client ist Docker Compose, mit dem Sie mit Anwendungen arbeiten können, die aus einer Reihe von.

Der Docker-Daemon

Der Docker-Daemon (dockerd) lauscht auf Docker-API-Anfragen und verwaltet Docker-Objekte wie Images, Container, Netzwerke und Volumes. Ein Daemon kann auch mit anderen Daemons kommunizieren, um Docker-Dienste zu verwalten.

Der Docker-Client

Der Docker-Client (docker) ist die primäre Art und Weise, wie viele Docker-Benutzer mit Docker interagieren. Wenn Sie Befehle wie docker run verwenden, sendet der Client diese Befehle an dockerd, das sie ausführt. Der docker-Befehl verwendet die Docker-API. Der Docker-Client kann mit mehr als einem Daemon kommunizieren.

Docker Desktop

Docker Desktop ist eine einfach zu installierende Anwendung für Ihre Mac-, Windows- oder Linux-Umgebung, die es Ihnen ermöglicht, containerisierte Anwendungen und Microservices zu erstellen und zu teilen. Docker Desktop enthält den Docker-Daemon (dockerd), den Docker-Client (docker), Docker Compose, Docker Content Trust, Kubernetes und Credential Helper. Weitere Informationen finden Sie unter Docker Desktop.

Docker-Registries

Eine Docker-Registry speichert Docker-Images. Docker Hub ist eine öffentliche Registry, die jeder nutzen kann, und Docker sucht standardmäßig nach Images auf Docker Hub. Sie können sogar Ihre eigene private Registry betreiben.

Wenn Sie die Befehle docker pull oder docker run verwenden, lädt Docker die erforderlichen Images aus Ihrer konfigurierten Registry herunter. Wenn Sie den Befehl docker push verwenden, lädt Docker Ihr Image in Ihre konfigurierte Registry hoch.

Docker-Objekte

Wenn Sie Docker verwenden, erstellen und verwenden Sie Images, Container, Netzwerke, Volumes, Plugins und andere Objekte. Dieser Abschnitt ist eine kurze Übersicht über einige dieser Objekte.

Images

Ein Image ist eine schreibgeschützte Vorlage mit Anweisungen zum Erstellen eines Docker-Containers. Oft basiert ein Image auf einem anderen Image mit zusätzlichen Anpassungen. Sie können beispielsweise ein Image erstellen, das auf dem ubuntu-Image basiert, aber den Apache-Webserver und Ihre Anwendung sowie die erforderlichen Konfigurationsdetails installiert, damit Ihre Anwendung läuft.

Sie können Ihre eigenen Images erstellen oder nur diejenigen verwenden, die von anderen erstellt und in einer Registry veröffentlicht wurden. Um Ihr eigenes Image zu erstellen, erstellen Sie eine Dockerfile mit einer einfachen Syntax zur Definition der Schritte, die zum Erstellen und Ausführen des Images erforderlich sind. Jede Anweisung in einer Dockerfile erstellt eine Schicht im Image. Wenn Sie die Dockerfile ändern und das Image neu erstellen, werden nur die geänderten Schichten neu erstellt. Dies ist ein Teil dessen, was Images im Vergleich zu anderen Virtualisierungstechnologien so leichtgewichtig, klein und schnell macht.

Container

Ein Container ist eine ausführbare Instanz eines Images. Sie können einen Container mit der Docker-API oder der CLI erstellen, starten, stoppen, verschieben oder löschen. Sie können einen Container mit einem oder mehreren Netzwerken verbinden, Speicher daran anhängen oder sogar ein neues Image basierend auf seinem aktuellen Zustand erstellen.

Standardmäßig ist ein Container relativ gut von anderen Containern und seiner Host-Maschine isoliert. Sie können steuern, wie isoliert das Netzwerk, der Speicher oder andere zugrunde liegende Subsysteme eines Containers von anderen Containern oder der Host-Maschine sind.

Ein Container wird durch sein Image sowie alle Konfigurationsoptionen definiert, die Sie beim Erstellen oder Starten angeben. Wenn ein Container entfernt wird, gehen alle Änderungen an seinem Zustand verloren, die nicht in einem persistenten Speicher gespeichert sind.

Referenzen