[LINUX] Ich habe über Docker recherchiert und werde es zusammenfassen

Einführung

Docker, k8s wird im Thema 42tokyo herauskommen, also habe ich es untersucht und zusammengefasst.

Vorausgesetztes Wissen

Es gibt keine Erklärung für das Grundkonzept, daher ist es gut, Docker ein wenig berührt zu haben.

Was ist Docker?

Von Docker entwickelte Open Source Container Software.

grundlegende Denkweise

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.

Was ist zu lösen?

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.

Containertechnologie

Was ist Virtualisierung?

"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.

Unterschied zwischen Virtualisierung und Container

空白の図 - 2ページ.png

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

Warum scheint der Container ein anderes Betriebssystem zu haben, wenn er keines hat?

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.

スクリーンショット 2020-11-11 18.32.01.png

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.

空白の図 - ページ 1.png

Was ist wieder ein Container?

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.

Verstehe das Bild

Da ich den Mechanismus des Containers erklärt habe, ist auch der Mechanismus des Bildes einfach.

Ein Bild ist eigentlich keine Datei

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.

Schreiben Sie das Bild neu und sehen Sie sich die Ebenenstruktur an

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.

スクリーンショット 2020-11-12 2.30.23.png

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

Erstellen Sie ein Bild

Erläutern Sie die Vorteile von Docker und erstellen Sie ein Image, das die Vorteile nicht beeinträchtigt.

Operationsbild des Dockers

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.

Container-Lebenszyklus

Es gibt drei Möglichkeiten, ein Docker-Image zu erstellen.

  1. Vom Dockerhub ziehen
  2. Erstellen Sie die Docker-Datei
  3. Übernehmen Sie den gestoppten Container, an dem Sie gearbeitet haben, um ein Bild daraus zu machen

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.

スクリーンショット 2020-11-11 21.41.53.png

Vorteile von Docker und seinen Vorsichtsmaßnahmen

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.

So erstellen Sie ein umgebungsunabhängiges Image

Es ist wichtig, Umgebungsvariablen gut zu nutzen und ein Bild zu erstellen, das nicht von der Umgebung abhängt.

continue...

Referenz

Recommended Posts

Ich habe über Docker recherchiert und werde es zusammenfassen
Ich habe das Verhalten von Argsort of Numpy nicht verstanden, deshalb werde ich es zusammenfassen
Ich habe es mit Visual Studio Code (hauptsächlich für Python) angepasst, daher werde ich es zusammenfassen
Ich habe ein Umfragepapier zur Erkennung von Zeitreihenanomalien gelesen und werde es daher zusammenfassen.
Ich blieb stecken und überprüfte es
Ich möchte Airpods Pro, daher werde ich LINE benachrichtigen, wenn es eintrifft
Irgendwie hat der Code, den ich geschrieben habe, funktioniert und ich war beeindruckt, also werde ich ihn veröffentlichen
Ich konnte AWS-Batch mit Python, Moto verspotten, also werde ich es verlassen
Ich habe Docker gestartet
Docker x Visualization hat nicht funktioniert und ich war süchtig danach, also habe ich es zusammengefasst!
Ich habe die Größenänderung von TensorFlow nicht verstanden und sie daher visuell zusammengefasst.
Python-Anfänger haben einen Chat-BOT erstellt, also habe ich versucht, zusammenzufassen, wie man es macht
Ich dachte "Was ist Linux?", Also habe ich es nachgeschlagen.
Ich mag die Einschlussnotation von Python, also habe ich sie mit der Karte verglichen
AWS Lambda unterstützt jetzt Python, also habe ich es versucht
[Streamlit] Ich habe es installiert
[Erwerb der Qualifikation] Ich habe LinuC Level 1 bestanden und werde darüber schreiben, wie man studiert und wie es war.
mypy wird es tun
PyTorchs Buch war schwer zu verstehen, deshalb habe ich es ergänzt