Freigeben über


Was ist Docker?

Tipp

Dieser Inhalt ist ein Auszug aus dem eBook .NET Microservices Architecture for Containerized .NET Applications, verfügbar auf .NET Docs oder als kostenlose herunterladbare PDF, die offline gelesen werden kann.

.NET-Microservices-Architektur für containerisierte .NET-Anwendungen eBook-Cover-Thumbnails.

Docker ist ein Open-Source-Projekt zum Automatisieren der Bereitstellung von Anwendungen als tragbare, eigenständige Container, die in der Cloud oder lokal ausgeführt werden können. Docker ist auch ein Unternehmen, das diese Technologie fördert und weiterentwickelt, in Zusammenarbeit mit Cloud-, Linux- und Windows-Anbietern, einschließlich Microsoft.

Diagramm mit den Orten, an denen Docker-Container ausgeführt werden können.

Abbildung 2-2. Docker stellt Container auf allen Ebenen der Hybridcloud bereit.

Docker-Container können überall lokal im Kundendatencenter, in einem externen Dienstanbieter oder in der Cloud in Azure ausgeführt werden. Docker-Imagecontainer können nativ unter Linux und Windows ausgeführt werden. Windows-Images können jedoch nur auf Windows-Hosts ausgeführt werden und Linux-Images können auf Linux-Hosts und Windows-Hosts (mit einem Hyper-V Linux-VM, bisher) ausgeführt werden, wobei Host ein Server oder eine VM bedeutet.

Entwickler können Entwicklungsumgebungen unter Windows, Linux oder macOS verwenden. Auf dem Entwicklungscomputer führt der Entwickler einen Docker-Host aus, auf dem Docker-Images bereitgestellt werden, einschließlich der App und seiner Abhängigkeiten. Entwickler, die unter Linux oder macOS arbeiten, verwenden einen Docker-Host, der Linux basiert, und sie können Images nur für Linux-Container erstellen. (Entwickler, die an macOS arbeiten, können Code bearbeiten oder die Docker CLI über macOS ausführen, aber ab diesem Zeitpunkt werden Container nicht direkt unter macOS ausgeführt.) Entwickler, die an Windows arbeiten, können Images für Linux- oder Windows-Container erstellen.

Um Container in Entwicklungsumgebungen zu hosten und zusätzliche Entwicklertools bereitzustellen, liefert Docker Desktop für Windows oder für macOS-. Diese Produkte installieren die erforderliche VM (der Docker-Host), um die Container zu hosten.

Es gibt zwei Typen von Runtimes zum Ausführen von Windows-Containern:

  • Windows Server-Container bieten Anwendungsisolation durch Prozess- und Namespaceisolationstechnologie. Ein Windows Server-Container teilt einen Kernel mit dem Containerhost und mit allen Containern, die auf dem Host ausgeführt werden.

  • Hyper-V Container erweitern die von Windows Server-Containern bereitgestellte Isolation, indem jeder Container auf einem hochoptimierten virtuellen Computer ausgeführt wird. In dieser Konfiguration wird der Kernel des Containerhosts nicht für die Hyper-V Container freigegeben, was eine bessere Isolierung ermöglicht.

Die Images für diese Container werden auf die gleiche Weise erstellt und funktionieren gleich. Der Unterschied besteht darin, wie der Container aus dem Image erstellt wird: Für das Ausführen eines Hyper-V-Containers ist ein Zusatzparameter erforderlich. Weitere Informationen finden Sie unter Windows-Container.

Vergleichen von Docker-Containern mit virtuellen Computern

Abbildung 2-3 zeigt einen Vergleich zwischen VMs und Docker-Containern.

Virtuelle Computer Docker-Container
Diagramm mit dem Hardware-/Softwarestapel einer herkömmlichen VM. Diagramm mit dem Hardware-/Softwarestapel für Docker-Container.
Virtuelle Computer umfassen die Anwendung, die erforderlichen Bibliotheken oder Binärdateien und ein vollständiges Gastbetriebssystem. Die vollständige Virtualisierung erfordert mehr Ressourcen als containerisierung. Container enthalten die Anwendung und alle zugehörigen Abhängigkeiten. Sie teilen den Betriebssystemkernel jedoch mit anderen Containern, die als isolierte Prozesse im Benutzerbereich auf dem Hostbetriebssystem ausgeführt werden. (Die einzige Ausnahme stellen Hyper-V-Container dar, wo jeder Container auf einem speziellen virtuellen Computer pro Container ausgeführt wird.)

Abbildung 2-3. Vergleich herkömmlicher virtueller Computer mit Docker-Containern

Für VMs gibt es drei Basisebenen auf dem Hostserver, von unten nach oben: Infrastruktur, Hostbetriebssystem und hypervisor, und darüber hinaus verfügt jeder virtuelle Computer über ein eigenes Betriebssystem und alle erforderlichen Bibliotheken. Bei Docker verfügt der Hostserver nur über die Infrastruktur und das Betriebssystem und darüber hinaus über das Containermodul, das container isoliert, aber die Basisbetriebssystemdienste gemeinsam verwendet.

Da Container wesentlich weniger Ressourcen benötigen (z. B. kein vollständiges Betriebssystem), sind sie einfach bereitzustellen und schnell zu starten. Dies ermöglicht es Ihnen, eine höhere Dichte zu haben, was bedeutet, dass Sie mehr Dienste auf derselben Hardwareeinheit ausführen können, wodurch die Kosten reduziert werden.

Als Nebeneffekt der Ausführung auf demselben Kernel erhalten Sie weniger Isolation als VMs.

Das Hauptziel eines Images ist, dass es die Umgebung (Abhängigkeiten) in verschiedenen Bereitstellungen gleich macht. Dies bedeutet, dass Sie es auf Ihrem Computer debuggen und dann auf einem anderen Computer bereitstellen können, auf dem dieselbe Umgebung gewährleistet ist.

Ein Containerimage ist eine Möglichkeit, eine App oder einen Dienst zu verpacken und auf zuverlässige und reproduzierbare Weise bereitzustellen. Sie könnten sagen, dass Docker nicht nur eine Technologie, sondern auch eine Philosophie und ein Prozess ist.

Wenn Sie Docker verwenden, hören Sie nicht, dass Entwickler sagen: "Es funktioniert auf meinem Computer, warum nicht in der Produktion?" Sie können einfach sagen: "Es wird auf Docker ausgeführt", da die verpackte Docker-Anwendung in jeder unterstützten Docker-Umgebung ausgeführt werden kann und wie sie für alle Bereitstellungsziele vorgesehen war (z. B. Dev, QA, Staging und Produktion).

Eine einfache Analogie

Vielleicht kann eine einfache Analogie dazu beitragen, das Kernkonzept von Docker zu verstehen.

Lassen Sie uns einen Moment in die 1950er Jahre zurückkehren. Es gab keine Textverarbeitungsprogramme, und die Fotokopierer wurden überall verwendet (sozusagen).

Stellen Sie sich vor, Sie sind für die regelmäßige Ausgabe von Briefen verantwortlich, die nach Bedarf erstellt und an Kunden versendet werden, indem Sie echtes Papier und Umschläge verwenden, um sie physisch an die Adresse jedes Kunden zuzustellen (damals gab es keine E-Mail).

Irgendwann stellen Sie fest, dass die Briefe nur eine Zusammensetzung aus einer großen Reihe von Absätzen sind, die nach Zweck des Schreibens ausgewählt und angeordnet werden, also entwickeln Sie ein System, um Briefe schnell auszustellen, in der Erwartung, eine kräftige Gehaltserhöhung zu erhalten.

Das System ist einfach:

  1. Sie beginnen mit einem Foliensatz mit transparenten Blättern, die jeweils einen Absatz enthalten.

  2. Wenn Sie eine Reihe von Briefen ausgeben möchten, wählen Sie die Blätter mit den benötigten Absätzen aus, dann stapeln Sie sie und richten sie so aus, damit sie gut aussehen und sich gut lesen lassen.

  3. Schließlich platzieren Sie den Satz im Kopierer, und drücken Sie den Start, um so viele Buchstaben wie erforderlich zu produzieren.

Das ist also vereinfacht gesagt die Kernidee von Docker.

In Docker ist jede Ebene der resultierende Satz von Änderungen, die nach dem Ausführen eines Befehls, z. B. der Installation eines Programms, dem Dateisystem passieren.

Wenn Sie also das Dateisystem "betrachten", nachdem die Ebene kopiert wurde, sehen Sie alle Dateien, die in der Ebene enthalten sind, als das Programm installiert wurde.

Sie können sich ein Image als Hilfs-Festplatte im schreibgeschützten Modus vorstellen, die bereit zur Installation in einem "Computer" ist, in dem das Betriebssystem bereits installiert ist.

Ebenso können Sie sich einen Container als "Computer" vorstellen, auf dem die Image-Festplatte installiert ist. Der Container kann wie ein Computer eingeschaltet oder ausgeschaltet werden.