Docker ist zum De-facto-Standard geworden, wenn es um Container-basierte Implementierungen geht. Von kleinen Implementierungen bis hin zu großen Unternehmensanwendungen dient Docker als Grundlage für die Container-basierte Orchestrierung.
Docker hat in der DevOps-Community aufgrund der Art und Weise, wie es für Portabilität entwickelt und für moderne Microservices-Architektur konzipiert wurde, in kurzer Zeit so große Popularität und Akzeptanz erlangt.
Die Entwicklung der Container
Wenn Sie denken, dass Containerisierung eine neue Technologie ist, ist das nicht der Fall. Google verwendet eine eigene Containerisierungstechnologie in seiner Infrastruktur seit Jahren.
Das Konzept des Containers entstand in den 2000er Jahren. Tatsächlich reichen die Wurzeln bis ins Jahr 1979 zurück, als wir Chroot hatten, ein Konzept zur Änderung des Stammverzeichnisses eines Prozesses.
Hier ist eine Liste von Container-basierten Projekten, die im Jahr 2000 gestartet wurden.
Was ist ein Linux-Container (LXC)?
Bevor Sie sich direkt mit den Konzepten von Docker befassen, müssen Sie zunächst verstehen, was ein Linux-Container ist.
In einer typischen virtualisierten Umgebung werden eine oder mehrere virtuelle Maschinen auf einem physischen Server unter Verwendung eines Hypervisors wie Xen, Hyper-V usw. ausgeführt.
Container hingegen laufen auf dem Kernel des Betriebssystems. Wir können diese Virtualisierung auf Betriebssystemebene nennen. Bevor wir uns mit den zugrunde liegenden Konzepten von Containern befassen, müssen Sie zwei wichtige Linux-Konzepte verstehen.
- Benutzerbereich : Der gesamte Code, der für die Ausführung von Benutzerprogrammen (Anwendungen, Prozesse) erforderlich ist, wird als „Benutzerraum“ bezeichnet. Wenn Sie eine Programmaktion initiieren, beispielsweise um eine Datei zu erstellen, führt der Prozess im Userspace einen Systemaufruf an den Kernelspace durch.
- Kernelraum : Dies ist das Herzstück des Betriebssystems, in dem sich der Kernel-Code befindet
Ein Container ist ein Prozess
Wenn Sie eine Anwendung starten, beispielsweise einen Nginx-Webserver, starten Sie tatsächlich einen Prozess. Ein Prozess selbst ist eine in sich geschlossene Anweisung mit begrenzter Isolation.
Was wäre, wenn wir den Prozess nur mit den Dateien und der Konfiguration isolieren könnten, die zum Ausführen und Funktionieren erforderlich sind? Das ist es, was ein Container tut.
Ein Container ist eigentlich ein Prozess mit ausreichender Isolierung User-Space-Komponenten sodass es sich wie ein separates Betriebssystem anfühlt.
Der übergeordnete Containerprozess kann einen untergeordneten Prozess haben. Wir können also sagen, dass ein Container auch eine Gruppe von Prozessen ist.
Wenn Sie beispielsweise einen Nginx-Dienst starten, startet dieser einen übergeordneten Nginx-Prozess. Der übergeordnete Prozess deckt dann seine untergeordneten Prozesse wie den Cache-Manager, den Cache-Loader und die Worker ab.
Wenn Sie also einen Nginx-Container starten, starten Sie einen Master-Nginx-Prozess in seiner isolierten Umgebung. Ich werde Ihnen dies in den folgenden Abschnitten praktisch zeigen.
Jeder Container verfügt über seinen isolierten Benutzerbereichund Sie können mehrere Container auf einem einzigen Host ausführen. Bedeutet das, dass ein Container das gesamte Betriebssystem besitzt? NEIN. Im Gegensatz zu einer VM mit eigenem Kernel enthält ein Container nur die notwendigen Dateien, die sich auf eine bestimmte Distribution beziehen, und verwendet den Kernel des gemeinsam genutzten Hosts. Noch interessanter, Sie können verschiedene Container basierend auf Linux-Distributionen auf einem einzigen Host ausführen, der denselben Kernel-Speicherplatz nutzt.
Sie können beispielsweise einen RHEL-, CentOS- oder SUSE-basierten Container auf einem Ubuntu-Server ausführen. Dies ist möglich, weil bei allen Linux-Distributionen nur der Benutzerbereich unterschiedlich und der Kernelbereich gleich ist.
Grundlegendes Konzept von Linux-Containern
Das folgende Bild zeigt Ihnen eine visuelle Darstellung der Linux-Kontinua.
Container werden innerhalb eines Hosts mithilfe von zwei Funktionen des Linux-Kernels isoliert, die als Namespaces und Cgroups bezeichnet werden.
Eine reale Analogie wäre ein Wohnhaus. Obwohl es sich um ein großes Gebäude handelt, ist jede Wohnung für einzelne Haushalte isoliert und verfügt über Wasser-, Gas- und Stromzähler mit eigener Identität. Zur Herstellung dieser Isolierung nutzen wir Beton, Stahlkonstruktionen und andere Baumaterialien. Sie haben keinen Einblick in andere Häuser, es sei denn, diese erlauben Ihnen den Zutritt.
Ebenso können Sie eine Verbindung zu einem einzelnen Host herstellen, der mehrere Container enthält. Um Container mit eigener CPU, Speicher, IP-Adresse, Mount-Punkten und Prozessen zu isolieren, benötigen Sie zwei Linux-Kernel-Funktionen namens Namespaces und Cgroups.
Was genau ist Docker?
Docker ist ein Open-Source-Projekt beliebt in Go geschrieben und entwickelt von Dotcloud (einem PaaS-Unternehmen).
Es handelt sich im Wesentlichen um eine Container-Engine, die Linux-Kernel-Funktionen wie Namespaces und Cgroups verwendet, um Container auf einem Betriebssystem zu erstellen.
Das heißt, alle Containerkonzepte und -funktionen, die wir im LXC-Abschnitt gelernt haben, werden von Docker ganz einfach umgesetzt. Führen Sie einfach ein paar Docker-Befehle und -Einstellungen aus, um die Container zum Laufen zu bringen.
Sie fragen sich vielleicht, wie sich Docker von einem Linux-Container (LXC) unterscheidet, da alle Konzepte und Implementierungen ähnlich sind.
Docker wurde ursprünglich auf Linux-Containern erstellt (LXC). Später ersetzte Docker LXC durch einen eigenen Laufzeitcontainer (der jetzt Teil von runc ist).
Abgesehen davon, dass es sich um eine Containertechnologie handelt, Docker verfügt über klar definierte Verpackungskomponenten, die Verpackungsanwendungen einfacher machen. Vor Docker war es nicht einfach, Container zu verwalten. Mit anderen Worten: Es übernimmt die gesamte erforderliche Arbeit, um Ihre Anwendung von der Infrastruktur zu entkoppeln, indem es alle Systemanforderungen der Anwendung in einen Container packt.
Wenn Sie beispielsweise über eine Java-JAR-Datei verfügen, können Sie diese auf jedem Server ausführen, auf dem Java installiert ist. Auf die gleiche Weise, Sobald Sie mit Docker einen Container mit den erforderlichen Anwendungen gepackt haben, können Sie ihn auf jedem anderen Host ausführen auf dem Docker installiert ist.
Unterschied zwischen Docker und Container
Docker ist eine Technologie oder ein Tool, das zur effizienten Verwaltung der Containerimplementierung entwickelt wurde.
Kann ich einen Container ohne Docker verwalten? Ja ! Natürlich. Mit der LXC-Technologie können Sie Container auf Linux-Servern ausführen.
Alles, was Sie über Docker wissen müssen
Docker ist eine weit verbreitete Containerisierungsplattform. Sie sollten wissen, dass Container und Microservices häufig aus der Perspektive der Anwendungsentwicklung und -bereitstellung verwendet werden. Dies ist eine „Cloud-native“ Entwicklung. Docker ist daher eine äußerst beliebte Alternative in Unternehmen. Wenn Sie Zugriff auf a haben möchten Vollständige Anleitung zu Dockerfinden Sie auf der Website unseres Partners datascientest.com. Ein Container ist eine leichtgewichtige Ausführungsumgebung und eine Alternative zu herkömmlichen Virtualisierungstechniken durch virtuelle Maschinen.
Um moderne Software erfolgreich zu entwickeln, müssen Anwendungen, die auf demselben Host bereitgestellt werden, isoliert werden, um zu verhindern, dass sie sich gegenseitig stören. Zum Ausführen von Anwendungen sind Pakete erforderlich. Virtuelle Maschinen werden verwendet, um Anwendungen auf einem identischen System voneinander zu trennen und Konflikte zwischen Softwarekomponenten und Konkurrenz um Ressourcen zu reduzieren. Docker ist eine sichere und kostengünstige Open-Source-Lösung. Docker wird auch verwendet, um Container unter Windows oder Mac über eine Linux-Virtualisierungsschicht auszuführen. So wissen Sie, wo Sie weitere Informationen zu Docker erhalten und alle Vor- und Nachteile dieser Containerisierungsplattform verstehen.
Um moderne Software erfolgreich zu entwickeln, müssen Anwendungen, die auf demselben Host bereitgestellt werden, isoliert werden, um zu verhindern, dass sie sich gegenseitig stören. Zum Ausführen von Anwendungen sind Pakete erforderlich. Virtuelle Maschinen werden verwendet, um Anwendungen auf einem identischen System voneinander zu trennen und Konflikte zwischen Softwarekomponenten und Konkurrenz um Ressourcen zu reduzieren. Docker ist eine sichere und kostengünstige Open-Source-Lösung. Docker wird auch verwendet, um Container unter Windows oder Mac über eine Linux-Virtualisierungsschicht auszuführen. So wissen Sie, wo Sie weitere Informationen zu Docker erhalten und alle Vor- und Nachteile dieser Containerisierungsplattform verstehen.
Warum ist Docker so erfolgreich?
Docker verfügt über einen effizienten Workflow zum Verschieben der Anwendung vom Laptop des Entwicklers in die Testumgebung und dann in die Produktion. Sie erfahren mehr, indem Sie sich ein praktisches Beispiel für das Packen einer Anwendung in ein Docker-Image ansehen.
Wussten Sie, dass das Starten eines Docker-Containers weniger als eine Sekunde dauert?
Es ist unglaublich schnell und kann auf jedem Host mit einem kompatiblen Linux-Kernel ausgeführt werden. (Es ist auch mit Windows kompatibel)
Notiz : Sie können einen Windows-Container nicht auf einem Linux-Host ausführen, da es keine Linux-Kernel-Unterstützung für Windows gibt. Hier können Sie mehr über Windows-Container erfahren
Docker verwendet zum Speichern seiner Bilder ein „Copy-on-Write“-Union-Dateisystem. Wenn Änderungen an einem Container vorgenommen werden, werden nur die Änderungen mithilfe des Copy-on-Write-Modells auf die Festplatte geschrieben.
Mit dem Copy-on-Write-Modell verfügen Sie über optimierte gemeinsame Speicherebenen für alle Ihre Container.