Docker, k8s wird im Thema 42tokyo herauskommen, also habe ich es untersucht und zusammengefasst.
Es gibt keine Erklärung für das Grundkonzept, daher ist es gut, Docker ein wenig berührt zu haben.
Von Docker entwickelte Open Source Container Software.
Die Grundidee ist die gleiche wie beim Linux "Paket".
Als Linux Open-Source-Software brachte, installierte es ursprünglich den Quellcode, kompilierte ihn lokal und verwendete ihn. Es ist, als würde man Code wie den auf Github bringen, ihn erstellen und verwenden. (Referenz: https://eng-entrance.com/linux-package-apt-2)
Der Linux-Kernel selbst wird ebenfalls als Quellcode veröffentlicht und muss kompiliert werden. Darüber hinaus sind verschiedene Bibliotheken erforderlich, um Anwendungsprogramme wie Server, Anwendungen und Fenstersysteme zu betreiben. Das Erstellen und Betreiben einer solchen Umgebung von Grund auf ist jedoch äußerst kompliziert, sodass sie für Benutzer, die Linux verwenden möchten, nicht realistisch ist, um sie einzeln auszuführen.
Aus diesem Grund wurden viele Linux-Distributionen erstellt. Eine Linux-Distribution ist eine Sammlung von Linux-Kerneln, Bibliotheken, Systemsoftware, Anwendungssoftware usw. als "Pakete".
** Linux Distribution = Linux Kernel + verschiedene Bibliotheken **
Auf diese Weise hat sich die Idee eines "Pakets" verbreitet, das unmittelbar nach der Installation des kompilierten Status zusammen mit den Abhängigkeiten verwendet werden kann. Der Befehl linux apt ist ein Befehl des Paketverwaltungssystems
Das Container-Image wird auf Betriebssystemebene gepackt. Wenn Sie ein Image mitbringen und erstellen (einen Container erstellen), können Sie eine Umgebung erstellen, in der die Anwendung, die Sie ausführen möchten, sofort ausgeführt wird.
Bis dahin traten Probleme in Entwicklungsumgebungen, Testumgebungen und Produktionsumgebungen aufgrund kleiner Unterschiede auf, z. B. Unterschiede in den Umgebungsversionen. Jetzt kann die Umgebung jedoch auf Betriebssystemebene gepackt und gemeinsam genutzt werden. Es wurde einfacher.
Da die Umgebung (Betriebssystem und abhängige Bibliotheken), in der die Anwendung ausgeführt wird, gepackt ist, ist es praktisch, dass keine Abhängigkeiten bestehen und nicht an anderer Stelle installiert werden muss.
Es gibt auch einen Dienst namens Dockerhub wie github, der Bilder teilt.
"Virtualisierung" unterteilt den in der Hardware installierten Prozessor und Speicher in kleine Teile und lässt sie wie mehrere einzelne und unabhängige Server funktionieren. Der auf diese Weise erstellte scheinbare Server wird als "virtuelle Maschine" bezeichnet. Es wird eine vollständig isolierte Anwendungsausführungsumgebung.
Es gibt zwei Arten der Virtualisierung: Virtualisierung vom Typ Host-Betriebssystem, Virtualisierung vom Typ Hyperpaiser, die mit einer Software namens Hypervisor durchgeführt wird, und Virtualisierung vom Containertyp.
Das Tolle an der containergestützten Virtualisierung ist, dass sie den Betriebssystemkern gemeinsam nutzt, die Prozesse und Ressourcen jedoch vollständig isoliert sind. Es scheint, dass die folgenden Funktionen in der Container-Engine verwendet werden.
--namelary: Eine vom Linux-Kernel bereitgestellte Funktion, die Systemressourcen logisch aufteilt. --cgroup ・ ・ ・ Technologie zur Steuerung der Ressourcennutzung des Prozesses --chroot ・ ・ ・ Eine Funktion, die Dateien trennt, indem das Stammverzeichnis so geändert wird, dass Verzeichnisse auf höheren Ebenen nicht verwendet werden können.
Referenz: Docker im Prinzip zu verstehen
Erstens ist das einzige Betriebssystem-Image, das Docker bringen kann, die Linux-Distribution.
Im Gegensatz zu VM befindet sich im Container kein Gastbetriebssystem. Wie kann man dann dieses Betriebssystem realisieren? ??
Eigentlich funktioniert es einfach so, wenn man den Kernel des Host-Betriebssystems verwendet. Referenz: https://thinkit.co.jp/article/17301
Das Inux-System hat den gleichen Kernel, der einzige Unterschied ist die Bibliothek (= Linux-Kompatibilität) Wenn Sie die Bibliothek installieren, können Sie sie so einrichten, als ob das Betriebssystem installiert wäre. ** ** ** Völlig unterschiedliche Betriebssysteme wie Unix und Windows haben völlig unterschiedliche Kernel-Teile, sodass Sie kein Image erstellen können.
Aus der obigen Herstellungsmethode
e? Aber Sie können mit Docker auch auf Mac oder Windows entwickeln, oder? Denkst du nicht? Sie können es verwenden, indem Sie eine Anwendung namens Docker für Mac oder Docker für Windows installieren.
Tatsächlich scheint es sich um eine Docker-Engine auf einer Linux-VM zu handeln. Die Produktionsumgebung wird also unweigerlich Linux sein.
Jetzt können Sie eine Linux-basierte Umgebung in jeder Umgebung verwenden und in jeder Umgebung entwickeln und testen.
Ein Container ist nur ein ** Prozess, der von der Container-Engine auf dem Host-Betriebssystem ** gesteuert wird. (Ein Prozess ist ein laufendes Programm.)
Daher wird es beendet, sobald die Arbeit beendet ist. Aus diesem Grund wird der Dämon ausgeschaltet oder in einer Endlosschleife ausgeführt, genau wie der Container weiter ausgeführt wird.
Da es sich nur um einen Prozess handelt, ist er sehr leicht und kann wie ein Unix-Prozess mehrere Container (= Prozesse) gleichzeitig verarbeiten.
Deshalb lautet der Befehl ps oder kill.
Es wurde als ein Prozess realisiert, indem Prozesse, Systemressourcen, Berechtigungen usw. getrennt und verwaltet wurden, indem die Funktionen von Linux voll genutzt wurden, und es wurde nicht so viel neue Technologie verwendet.
Da ich den Mechanismus des Containers erklärt habe, ist auch der Mechanismus des Bildes einfach.
Das Bild ist ein abstraktes Konzept mit nur der Definition von "so verhalten". In Bezug auf die Programmierung ähnelt die Beziehung zwischen einem Bild und einem Container einer Klasse und einer Instanz. Wenn Sie das Image ausführen, wird ein Container erstellt. Wenn Sie das Image freigeben, können Sie dieselbe Umgebung an verschiedenen Orten erstellen.
Bilder bestehen nicht aus Dateien, sondern ** aus einer Schichtstruktur von Bildern mit mehreren "Unterschieden" **.
Es scheint, dass UFS (Union File System) verwendet wird, eine Technologie, die mehrere Dateien und Verzeichnisse als Ebenen stapelt und sie virtuell als ein Dateisystem behandelt.
Der Befehl "Docker-Verlauf" ist leicht zu verstehen, um die Struktur des Bildes zu verstehen. Lassen Sie uns als Test das Bild von Centos bringen, es neu schreiben und es mit zwei hinzugefügten Änderungen (Ebenen) anzeigen.
Ich versuche mir die obige Abbildung vorzustellen. Ich habe Änderungen vorgenommen, z. B. Centos eingegeben und eine Datei erstellt sowie eine Datei eingegeben und erstellt und jede als Bild gespeichert. (Befehl weggelassen)
Überprüfen Sie die Ebenenstruktur des Bildes mit dem Befehl "Docker-Verlauf"! Sicherlich ist zu sehen, dass diejenigen, die die Bildebene gemeinsam nutzen und zweimal Änderungen vornehmen, eine weitere Ebene haben.
$ docker image history centos-1
IMAGE CREATED CREATED BY SIZE COMMENT
f83fd832b2b7 21 minutes ago bash 13B
0d120b6ccaa8 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215MB
$ docker image history centos-2
IMAGE CREATED CREATED BY SIZE COMMENT
7318feb4e1e5 20 minutes ago bash 26B
f83fd832b2b7 21 minutes ago bash 13B
0d120b6ccaa8 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215MB
Sie können sehen, wie die Registrierung das Image verwaltet, indem Sie es an Dockerhub senden. Ich habe es geändert, weil ich den Namen wie "Benutzername / Bildname: Tag" ändern muss, um zu pushen. Auf diese Weise können Sie sehen, dass nur die Informationen, die aus anderen Repositorys zitiert werden, und der Unterschied zwischen ihnen übertragen werden.
$ docker image push momokahori124/mycentos
d61c8d8ef622: Pushed
e955d24fd305: Pushed
291f6e44771a: Mounted from library/centos
v1: digest: sha256:ae16ff8c612176dd9314c61cb906d9d6ebaa29ce0aff49fbc090f57b1c8af1dc size: 943
Der schöne Punkt ist, dass Sie viele Daten speichern können, indem Sie das Bild zu einer geschichteten Struktur von Unterschieden machen. Ich habe das Gefühl, dass Git auch durch den Unterschied bewältigt wurde, aber ist es die gleiche Methode?
Referenz: Tutorial zum Verständnis des Docker-Images
Erläutern Sie die Vorteile von Docker und erstellen Sie ein Image, das die Vorteile nicht beeinträchtigt.
Ich erklärte den Mechanismus des Containers und den Mechanismus des Bildes. Als nächstes werden wir von Docker-Operation zu Docker-Compose und k8s zusammenfassen.
Es gibt drei Möglichkeiten, ein Docker-Image zu erstellen.
Sobald Sie ein Image Ihrer Anwendung haben, das während der Entwicklung ausgeführt wird, können Sie es an Dockerhub senden und freigeben. Zu diesem Zeitpunkt ist es wichtig, ein Bild zu erstellen, um die Vorteile von Docker nicht zu beeinträchtigen.
** Umgebung kann verpackt werden ** Der Vorteil ist, dass die Umgebung verpackt und in jeder Umgebung verwendet werden kann. Achten Sie daher darauf, keine umgebungsabhängigen Variablen zu verwenden und umgebungsunabhängige Bilder / Docker-Dateien zu erstellen.
** Infrastruktur kann codiert werden ** Der Vorteil ist, dass die Infrastruktur sichtbar wird. Daher sollten Sie ** die Docker-Datei aktiv übernehmen ** und vermeiden, ein Image mit unbekannter Art und Weise zu erstellen und freizugeben, wie es mit dem Befehl commit erstellt wurde. Es wird empfohlen, dass Sie innerhalb des Containers arbeiten und die Docker-Datei ausfüllen, wenn Sie zur Hälfte fertig sind → einen neuen Container erstellen. Grundsätzlich scheint es, dass der erstellte Container im Grunde genommen verworfen wird, wenn er aufgebraucht ist. Wenn Sie die Option "--rm" zum "Docker Container Run" hinzufügen, wird diese sofort zerstört, wenn der Container gestoppt wird.
** Micro Service erleichtert Änderungen und Wartung ** Wenn Sie ein großes Bild erstellen, sind die ** Abhängigkeiten usw. darin unklar ** und es ist schwierig, sie zu ändern. Durch die Konfiguration mit mehreren Containern ist es möglich, einen Dienst zu erstellen, der gegen Änderungen resistent ist. Erstellen Sie grundsätzlich einen Container und einen Prozess (es ist besser, ihn als Multi-Container-Anwendung mit Docker-Compose zu verwalten).
Zusammenfassend lässt sich sagen, dass Sie es in einer Docker-Datei freigeben, den Container verfügbar machen und so viele separate Container wie möglich verwenden.
Es ist wichtig, Umgebungsvariablen gut zu nutzen und ein Bild zu erstellen, das nicht von der Umgebung abhängt.
continue...
Recommended Posts