Docker Detaillierte Abbildungen

Docker Detaillierte Abbildungen

1. Einführung in Docker

1.1 Virtualisierung

1.1.1 Was ist Virtualisierung?

Bei Computern ist Virtualisierung eine Technologie zur Ressourcenverwaltung, die verschiedene physische Ressourcen eines Computers wie Server, Netzwerke, Speicher und Speicherplatz abstrahiert und transformiert, um die untrennbaren Barrieren zwischen physischen Strukturen aufzubrechen und es Benutzern zu ermöglichen, diese Ressourcen besser als in der ursprünglichen Konfiguration zu verwenden. Diese neuen virtuellen Ressourcenteile sind nicht durch die Art und Weise eingeschränkt, in der vorhandene Ressourcen geografisch oder physisch bereitgestellt werden. Zu den virtualisierten Ressourcen zählen im Allgemeinen Rechenleistung und Datenspeicher.

In der tatsächlichen Produktionsumgebung wird die Virtualisierungstechnologie hauptsächlich verwendet, um das Problem der Überkapazität von leistungsstarker physischer Hardware und der Unterkapazität von alter Hardware zu lösen und sie neu zu organisieren und wiederzuverwenden, wodurch die zugrunde liegende physische Hardware transparent gemacht wird, um die Nutzung der physischen Hardware zu maximieren und die Ressourcen voll auszunutzen. Es gibt viele Arten von Virtualisierungstechnologien, wie z. B. Softwarevirtualisierung, Hardwarevirtualisierung, Speichervirtualisierung, Netzwerkvirtualisierung (VIP), Desktopvirtualisierung, Servicevirtualisierung, virtuelle Maschinen usw.

1.1.2 Arten der Virtualisierung

(1) Vollständige Virtualisierungsarchitektur: virtuelle Hardware -> virtuelles Betriebssystem

Der Monitor (Hypervisor) einer virtuellen Maschine ähnelt einer Benutzeranwendung, die auf dem Betriebssystem des Hosts ausgeführt wird, beispielsweise einer VMware-Workstation. Dieses Virtualisierungsprodukt bietet virtuelle Hardware.

(2) Virtualisierungsarchitektur auf Betriebssystemebene: keine Hardwarevirtualisierung, dasselbe Kernel-Betriebssystem

(3) Virtualisierung auf Hardwareebene

Die Virtualisierung auf Hardwareebene bietet eine hohe Leistung und Isolation, da der Hypervisor direkt auf der Hardware ausgeführt wird, wodurch der Betriebssystemzugriff der VM auf die Hardwareressourcen gesteuert werden kann. Zu den Produkten, die diese Lösung verwenden, gehören VMware ESXi und Xen Server.

Hypervisor ist eine Software-Zwischenschicht, die zwischen dem physischen Server und dem Betriebssystem läuft. Er ermöglicht mehreren Betriebssystemen und Anwendungen die gemeinsame Nutzung einer Reihe grundlegender physischer Hardware. Daher kann er auch als „Meta“-Betriebssystem in einer virtuellen Umgebung betrachtet werden. Er kann den Zugriff auf alle physischen Geräte und virtuellen Maschinen auf dem Server koordinieren. Er wird auch als Virtual Machine Monitor (VMM) bezeichnet.

Der Hypervisor ist der Kern aller Virtualisierungstechnologien. Wenn der Server den Hypervisor startet und ausführt, weist er jeder virtuellen Maschine die entsprechende Menge an Arbeitsspeicher, CPU, Netzwerk und Festplatte zu und lädt das Client-Betriebssystem aller virtuellen Maschinen. Gastgeber

Der Hypervisor ist das Herzstück aller Virtualisierungstechnologien. Er macht die Architektur und Verwaltung von Hard- und Software effizienter und flexibler und ermöglicht eine bessere Ausnutzung der Hardwareleistung. Zu den gängigen Produkten gehören: VMware, KVM, Xen usw. OpenStack

1.2 Was ist Docker?

1.2.1Die Containertechnologie ähnelt der Virtualisierungsarchitektur auf Betriebssystemebene:

In der Computerwelt haben Container eine lange und bewegte Geschichte. Container unterscheiden sich von der Hypervisor-Virtualisierung (HV). Bei der Hypervisor-Virtualisierung werden eine oder mehrere unabhängige Maschinen virtuell über eine Zwischenschicht auf physischer Hardware ausgeführt, während Container direkt im Benutzerbereich auf dem Betriebssystemkernel ausgeführt werden. Daher wird die Containervirtualisierung auch als „Virtualisierung auf Betriebssystemebene“ bezeichnet. Die Containertechnologie ermöglicht die Ausführung mehrerer unabhängiger Benutzerbereiche auf demselben Hostcomputer.

Da Container „Gäste“ des Betriebssystems sind, können sie nur dasselbe oder ein ähnliches Betriebssystem wie der zugrunde liegende Host ausführen, was nicht sehr flexibel erscheint. Beispielsweise können Sie Redhat Enterprise Linux auf einem Ubuntu-Server ausführen, Microsoft Windows jedoch nicht.

Im Vergleich zur vollständig isolierten Hypervisor-Virtualisierung gelten Container als unsicher. Gegner dieser Ansicht sind der Ansicht, dass durch die Virtualisierung eines vollständigen Betriebssystems durch den virtuellen Container zweifellos eine größere Angriffsfläche bestehe und zudem das potenzielle Risiko einer Gefährdung der Hypervisor-Ebene zu berücksichtigen sei.

Trotz ihrer Einschränkungen werden Container in zahlreichen Anwendungen eingesetzt. Containertechnologie erfreut sich großer Beliebtheit bei der Bereitstellung extrem großer Multi-Tenant-Dienste, einfacher Sandboxes und isolierter Umgebungen mit weniger strengen Sicherheitsanforderungen. Das häufigste Beispiel ist ein Chroot-Jail, das eine isolierte Verzeichnisumgebung zum Ausführen von Prozessen erstellt. Wenn ein laufender Prozess im Permission Isolation Jail von einem Eindringling durchbrochen wird, befindet sich der Eindringling im „Gefängnis“, da er aufgrund unzureichender Berechtigungen in dem vom Container erstellten Verzeichnis gefangen ist und keinen weiteren Schaden am Hostcomputer anrichten kann.

Zu den neuesten Containertechnologien gehören OpenVZ, Solaris Zones und Linux Containers (LXC). Mit diesen neuen Technologien sind Container nicht mehr nur eine einfache Betriebsumgebung. Innerhalb seiner eigenen Berechtigungsklasse ähnelt ein Container eher einer vollständigen Hostmaschine. Docker profitiert von modernen Linux-Funktionen wie Kontrollgruppen und Namespace-Technologie. Die Isolierung zwischen Containern und Hosts ist gründlicher. Container verfügen über unabhängige Netzwerk- und Speicherstapel sowie über eigene Ressourcenverwaltungsfunktionen, sodass mehrere Container auf demselben Host problemlos koexistieren können.

Container gelten als schlanke Technologie, da sie nur einen begrenzten Mehraufwand erfordern. Im Vergleich zur herkömmlichen Virtualisierung und Paravirtualisierung benötigen Container keine Emulationsschicht und keine Hypervisorschicht, sondern verwenden stattdessen die Systemaufrufschnittstelle des Betriebssystems. Dadurch wird der zum Ausführen eines einzelnen Containers erforderliche Mehraufwand verringert und es können mehrere Container auf dem Host ausgeführt werden.

Trotz ihrer ruhmreichen Geschichte haben sich Container noch nicht auf breiter Front durchgesetzt. Ein sehr wichtiger Grund ist die Komplexität der Containertechnologie: Container selbst sind relativ komplex, nicht einfach zu installieren und schwierig zu verwalten und zu automatisieren. Docker wurde entwickelt, um all dies zu ändern.

1.2.2 Vergleich zwischen Containern und virtuellen Maschinen

(1) Wesentliche Unterschiede

(2) Unterschiede in der Nutzung

1.2.3 Docker-Funktionen

(1) Einfacher Einstieg.

Benutzer benötigen nur wenige Minuten, um ihre Programme zu „dockern“. Docker basiert auf einem Copy-on-Write-Modell, wodurch Anwendungen sehr schnell geändert werden können. Man kann sagen, dass es den Status „Ändern Sie den Code nach Belieben“ erreicht.

Sie können dann einen Container erstellen, um Ihre Anwendung auszuführen. Die meisten Docker-Container starten in weniger als einer Sekunde. Durch das Entfernen des Overheads des Hypervisors verfügen Docker-Container über eine hohe Leistung und es können mehrere Container auf derselben Hostmaschine ausgeführt werden, sodass Benutzer die Systemressourcen optimal nutzen können.

(2) Logische Zuordnung der Verantwortlichkeiten

Mit Docker müssen sich Entwickler nur um die im Container ausgeführten Anwendungen kümmern, und Betreiber müssen sich nur um die Verwaltung des Containers kümmern. Der Zweck des Docker-Designs besteht darin, die Konsistenz zwischen der Entwicklungsumgebung, in der Entwickler Code schreiben, und der Produktionsumgebung, in der Anwendungen bereitgestellt werden, zu verbessern. Dadurch wird die Wahrnehmung verringert, dass „während der Entwicklung alles normal war und es sich daher um ein Betriebs- und Wartungsproblem handeln muss (die Testumgebung war normal, aber nach dem Online-Zugriff traten Probleme auf, sodass es sich um ein Betriebs- und Wartungsproblem handeln muss)“.

(3) Schneller und effizienter Entwicklungslebenszyklus

Eines der Ziele von Docker besteht darin, den Zyklus für Codeentwicklung, Tests, Bereitstellung und Onlinebetrieb zu verkürzen, sodass Ihre Anwendungen portierbar, leicht zu erstellen und gemeinsam zu bearbeiten sind. (Einfach ausgedrückt ist Docker wie eine Box, die viele Objekte aufnehmen kann. Wenn Sie diese Objekte benötigen, können Sie sie direkt aus der großen Box herausnehmen, ohne sie einzeln aus der Box nehmen zu müssen.)

(4) Förderung der Nutzung serviceorientierter Architektur

Docker fördert außerdem eine serviceorientierte Architektur und eine Microservices-Architektur. Docker empfiehlt, dass ein einzelner Container nur eine Anwendung oder einen Prozess ausführt, wodurch ein verteiltes Anwendungsmodell entsteht. In diesem Modell können Anwendungen oder Dienste als eine Reihe intern miteinander verbundener Container dargestellt werden, was die Bereitstellung verteilter Anwendungen, die Erweiterung oder das Debuggen von Anwendungen sehr einfach macht und auch die Introspektion des Programms verbessert. (Natürlich können Sie mehrere Anwendungen in einem Container ausführen)

1.3 Docker-Komponenten

1.3.1 Docker-Client und -Server

Docker ist ein Client-Server-Architekturprogramm (C/S). Der Docker-Client muss lediglich Anfragen an den Docker-Server oder Daemon stellen, und der Server oder Daemon erledigt die ganze Arbeit und gibt die Ergebnisse zurück. Docker bietet ein Befehlszeilentool Docker und einen vollständigen Satz von RESTful-APIs. Sie können den Docker-Daemon und den Client auf demselben Host ausführen oder von einem lokalen Docker-Client aus eine Verbindung zu einem Remote-Docker-Daemon herstellen, der auf einem anderen Host ausgeführt wird.

1.3.2 Docker-Image

Images sind die Bausteine ​​von Docker. Benutzer führen ihre eigenen Container basierend auf dem Image aus. Images sind auch der „Build“-Teil des Docker-Lebenszyklus. Das Image ist eine auf dem Union-Dateisystem basierende Schichtenstruktur, die Schritt für Schritt durch eine Reihe von Anweisungen aufgebaut wird. Zum Beispiel:

  • Fügen Sie eine Datei hinzu;
  • Einen Befehl ausführen;
  • Öffnen Sie ein Fenster.

Sie können sich ein Image auch als den „Quellcode“ eines Containers vorstellen. Das Bild ist klein und sehr portabel, sodass es einfach geteilt, gespeichert und aktualisiert werden kann.

1.3.3 Registrierung

Docker verwendet Registry, um benutzerdefinierte Bilder zu speichern. Es gibt zwei Arten von Registern: öffentliche und private. Docker Inc. betreibt ein öffentliches Register namens Docker Hub. Benutzer können bei Docker Hub ein Konto registrieren und ihre eigenen Bilder teilen und speichern (Hinweis: Das Herunterladen von Bildern von Docker Hub ist sehr langsam, Sie können Ihr eigenes privates Register erstellen).

1.3.4 Docker-Container

Docker kann Ihnen beim Erstellen und Bereitstellen von Containern helfen. Sie müssen lediglich Ihre eigenen Anwendungen oder Dienste in Container packen. Der Container wird basierend auf dem Image gestartet und im Container können ein oder mehrere Prozesse ausgeführt werden. Wir können uns das Image als die Build- oder Verpackungsphase im Docker-Lebenszyklus vorstellen, während der Container die Start- oder Ausführungsphase ist. Der Container wird basierend auf dem Image gestartet. Sobald der Container gestartet ist, können wir uns beim Container anmelden und die benötigte Software oder Dienste installieren.

Ein Docker-Container ist also:

  • Ein Bildformat;
  • Eine Reihe von Standardoperationen;
  • Eine Ausführungsumgebung.

Docker übernimmt das Konzept von Standardcontainern. Standardcontainer transportieren Güter rund um die Welt, und Docker hat dieses Modell auf sein eigenes Design angewendet, mit dem einzigen Unterschied, dass Container Güter transportieren, während Docker Software transportiert.

Wie bei Containern ist es Docker bei der Ausführung der oben genannten Vorgänge egal, was sich im Container befindet, ob es sich um einen Webserver, eine Datenbank oder einen Anwendungsserver handelt. Alle Container „laden“ Inhalte auf die gleiche Weise hinein.

Docker ist es auch egal, wohin Sie den Container versenden: Wir können den Container auf unserem eigenen Laptop erstellen, ihn in die Registry hochladen, ihn dann zum Testen auf einen physischen oder virtuellen Server herunterladen und den Container anschließend auf einem bestimmten Host bereitstellen. Wie Standard-Versandcontainer sind Docker-Container leicht austauschbar, stapelbar, leicht zu verteilen und so vielseitig wie möglich.

Mit Docker können wir schnell einen Anwendungsserver, einen Nachrichtenbus, eine Reihe von Dienstprogrammen, eine Testumgebung für kontinuierliche Integration (CI) oder jede andere Anwendung, jeden anderen Dienst oder jedes andere Tool erstellen. Wir können lokal eine vollständige Testumgebung erstellen oder schnell einen komplexen Anwendungsstapel für die Produktion oder Entwicklung replizieren.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Versuch der Bereitstellung von Docker-Containern – Kommunikation mit mehreren Containern (Node+MongoDB+Nginx)
  • Detaillierte Erläuterung der Docker-Container-Spring-Boot-Anwendung
  • Detaillierte Erläuterung der Verwendung von ELK zum Erstellen eines Docker-Containeranwendungsprotokollcenters
  • So stellen Sie den Node.js-Dienst mithilfe von Dockerfile bereit
  • Verwaltung privater Docker-Repositorys und Löschen von Bildern in lokalen Repositorys
  • Beispiel zum Hochladen eines Docker-Images in ein privates Repository
  • Docker verwendet Dockerfile, um die Node.js-Anwendung zu starten
  • Beispiel für die Bereitstellung eines Django-Projekts mit Docker
  • Detaillierte Erläuterung zur Lösung des Problems, dass der Docker-Container nicht über IP auf den Hostcomputer zugreifen kann
  • Containerisierungstransformation für Docker-Großprojekte

<<:  Tutorial zur Installation und Konfiguration von MySql5.7 in Alibaba Cloud ECS centos6.8

>>:  Implementierungsschritte zum Einrichten der React+Ant Design-Entwicklungsumgebung

Artikel empfehlen

Mehrere Möglichkeiten zum Löschen von Arrays in Vue (Zusammenfassung)

Inhaltsverzeichnis 1. Einleitung 2. Mehrere Mögli...

Detaillierte Erklärung des FreeList-Mechanismus von MySQL

1. Einleitung Nach dem Start von MySQL wird Buffe...

Tutorial zur Änderung des Root-Passworts in MySQL 5.6

1. Nach der Installation von MySQL 5.6 kann es ni...

Detaillierte Erklärung des JavaScript-Timer-Prinzips

Inhaltsverzeichnis 1. setTimeout()-Timer 2. Stopp...

Analyse der Initialisierung des Quellcodes des Linux-Kernel-Schedulers

Inhaltsverzeichnis 1. Einleitung 2. Grundkonzepte...

Ausführliche Erläuterung der HTML-Grundlagen (Teil 1)

1. Das WEB verstehen Webseiten bestehen hauptsäch...

Detaillierte Analyse des MySQL 8.0-Speicherverbrauchs

Inhaltsverzeichnis 1. innodb_buffer_pool_size 2. ...

Vue integriert Tencent TIM Instant Messaging

In diesem Artikel wird hauptsächlich die Integrat...

So fügen Sie in JS eine Abbruchfunktion zu einem Versprechen hinzu

Inhaltsverzeichnis Überblick Promise Race Methode...

SQL-Implementierung von LeetCode (175. Zwei Tabellen verbinden)

[LeetCode] 175.Zwei Tabellen kombinieren Tabelle:...