Einführung in Linux Container / Docker (Teil 1)

Vorwort

Dieser Artikel richtet sich an Benutzer, die gerade erst mit der Verwendung von Linux-Containern und Docker beginnen. Ich habe eine grobe Übersicht zusammengestellt, um die Behälter zu verstehen, die schwer zu erreichen sind, wenn Sie sie nicht berührt haben.

Da es lang ist, habe ich es in zwei Teilen geschrieben: Einführung in Linux Container / Docker (Teil 2).

** Linux-Container (LXC) **

Konzept des Containers

Ein Container ist einfach eine Technologie, die eine Anwendung vom Host-Betriebssystem isoliert. Erstellen Sie einen isolierten Bereich im Linux-Betriebssystem und erstellen Sie eine Umgebung, in der er ausgeführt werden kann, ohne Prozesse in anderen Containern oder Prozessen auf dem Host-Betriebssystem zu beeinträchtigen. Gleichzeitig kann eine saubere Umgebung bereitgestellt werden, indem eine vom vorhandenen Host-Betriebssystem getrennte Umgebung erstellt wird.

Über den Linux-Kernel und die Distribution

Bevor wir uns mit den Details von Containern befassen, beginnen wir mit Linux. Das Wort Linux hat zwei Bedeutungen: "Linux-Kernel" im engeren Sinne und "Linux-Distribution" im weiteren Sinne.

Linux im engeren Sinne: Linux-Kernel

Der Kernel ist der Kern des Betriebssystems und führt die grundlegende Prozessverwaltung und Speicherverwaltung durch. Der Kernel ist allen Linux-basierten Betriebssystemen gemeinsam.

Allgemein definiertes Linux: Linux-Distribution (Linux-Betriebssystem)

Der Linux-Kernel allein kann nicht direkt auf einem PC oder Server installiert werden. Eine "Linux-Distribution" ist ein Paket verschiedener Treiber, Bibliotheken und Anwendungen, die für die Interaktion mit HW erforderlich sind.

Beispiel:

** ⇒ Obwohl es anders aussieht, verwenden alle Linux-Betriebssysteme den gleichen Linux-Kernel. ** (Natürlich ist die Version anders)

Ein Überblick über den Container und die Rolle von LXC

LXC ist ein Tool zum Erstellen einer Containerumgebung mit den Funktionen des Linux-Kernels. Es werden hauptsächlich die folgenden Kernelfunktionen verwendet.

--Namespace… Teilen Sie Prozesse und NW-Ressourcen (z. B. virtuelle Netzwerkkarten) so auf, dass sie sich nicht gegenseitig stören können. --CGroup: Gruppe proklamiert und begrenzt die Ressourcen wie CPU und Speicher, die von jedem verwendet werden können.

Konventioneller Fall

image.png

Mit einem Container

image.png

** Es ist einfacher zu verstehen (glaube ich), einen Container als "isolierten Prozess" zu betrachten, als ihn als "kompakte VM" zu betrachten **

Unterschied zwischen VM und Container

Unterschied in der Teilung

VM ... Emulieren Sie die Hardware und starten Sie das Betriebssystem Container ... Isoliert offenbar Prozesse und Verzeichnisse auf demselben Betriebssystem

** VMs und Container sind ähnlich und unterschiedlich. Der Ansatz ist genau das Gegenteil. ** **.

Overhead

VM ... verursacht Overhead, um Hardware zu emulieren und das Betriebssystem auszuführen Container ... Die Entität ist nur ein Prozess, der auf dem Host-Betriebssystem ausgeführt wird, sodass fast kein Overhead entsteht. (*)

Software zu setzen

VM ... Installieren und verwenden Sie eine Menge Software wie einen physischen Server Container ... Grundsätzlich 1 Container 1 Software. Geben Sie keine unnötigen Bibliotheken und Befehle ein (*)

Sie können dies sehen, indem Sie den Befehl ps im Container verwenden.

psax2.png

Normalerweise leitet Linux eine große Anzahl von untergeordneten Prozessen aus dem Init-Prozess von PID1 ab, aber Sie können sehen, dass PID1 im Container plötzlich zu Apache wird.

Normalerweise so. PID1 ist "init". psax.png

Vorteile der Verwendung von Behältern

Es hat die folgenden Vorzüge. (Zitiert von der offiziellen LXC-Website)

  1. Verbesserte Sicherheit Indem verhindert wird, dass eine Anwendung andere Anwendungen stört, kann der Schaden verringert werden, der beim Eindringen in das System verursacht wird.

  2. Verbesserte lose Kupplung Da Anwendungen auf einem Host-Betriebssystem ausgeführt werden können, ohne sich gegenseitig zu stören, wirken sich Änderungen an einer Software nicht auf andere Software aus.

  3. Systemabstraktion Der Container verbirgt das Betriebssystem und die Hardware des Hosts und kann eine Umgebung erstellen, die in jeder Umgebung stabil funktioniert.

Zusammenfassung

Container

Teil 2

Fahren Sie mit [Einführung in Linux Container / Docker (Teil 2)] fort (https://qiita.com/satken2/items/8515900a5a7b9bb0d0c9).

Recommended Posts

Einführung in Linux Container / Docker (Teil 1)
Einführung in Linux Container / Docker (Teil 2)
Einführung in die praktische Containerentwicklung von Docker / Kubernetes
Einführung von Docker - Teil 1--
Einführung in Spring Boot Teil 1
[Linux] Starten Sie den Apache-Container mit Docker
Docker Push zur GitHub Container Registry (ghcr.io)
Einführung in die schnelle Übungsausgabe Kapitel 5 Teil 2
[Docker] Kopieren Sie Dateien aus dem Docker-Container auf den Host
Docker Container Build kann PHP-Radis nicht installieren
Installieren Sie Docker mit WSL2 Memo ([Teil 2] Docker-Einführung)
[Einführung in Docker] Offizielles Tutorial (japanische Übersetzung)
Einführung in Ruby 2
[Zusammenfassung der technischen Bücher] Zusammenfassung der Lektüre "Einführung in die praktische Containerentwicklung von Docker / Kubernetes"
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Kleiner Docker Container
Einführung in die Migration
Rails Docker-Teil 1-
Rails Docker ~ Teil 2 ~
Einführung in Java
Einführung in Doma
So überprüfen Sie das Protokoll im Docker-Container
[Docker] Einführung in Docker Compose Grundlegende Zusammenfassung von Docker-Compose.yml
So erhalten Sie einen Heapdump aus einem Docker-Container
Road to Java Engineer Teil 1 Einführung & Umgebungskonstruktion
Einstellung zum Verlassen des Docker-Containers mit VScode
Kopieren Sie Dateien vom Docker-Container auf den Host (Docker-CP).
Ich habe einen Docker-Container erstellt, um Maven auszuführen
So aktualisieren Sie eine vorgefertigte Datei in einem Docker-Container
Einfache Einrichtung zum Ausführen des Docker-Befehls ohne sudo (Linux)
Einführung in JAR-Dateien
[Einführung in Docker x ECS] ECS-Bereitstellung mit Docker Compose
Einführung in Ratpack (8) -Session
Schritte zum Verschieben eines Docker-Images in die GitHub Container Registry (ghcr.io)
Einführung in Algorithmen mit Java-Dictionary Reihenfolge / Kombination verschiedener Lebensmittel (Teil1)
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in PlayFramework 2.7 ① Übersicht
Einführung in das Android-Layout
Erstellen Sie einen Docker-Container, um EPS in eine PGF-Quelle zu konvertieren
So installieren Sie Docker
Einführung in Entwurfsmuster (Einführung)
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
Einführung in den Lambda-Stil
Ein Memorandum bei der Installation von Docker und der Erstellung eines Linux-Containers
Einführung in den Java-Befehl
Docker-Container-Nutzungsszene
Einführung in die Keycloak-Entwicklung
Übertragen Sie ein Docker-Image von GitHub Actions in die GitHub Container Registry