Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Die systematischste Beherrschung der Docker-Kerntechnologie (Zusammenfassungsfreigabe)

Die systematischste Beherrschung der Docker-Kerntechnologie (Zusammenfassungsfreigabe)

WBOY
WBOYnach vorne
2022-02-04 07:00:312281Durchsuche

Dieser Artikel enthält einige verwandte Fragen zum Containerbetrieb der Docker-Core-Technologie sowie eine detaillierte Erläuterung von Dockerfile usw. Ich hoffe, er wird Ihnen hilfreich sein.

Die systematischste Beherrschung der Docker-Kerntechnologie (Zusammenfassungsfreigabe)

1. Docker

1. Einführung

  • Basierend auf Technologien wie Cgroup, Namespace und Union FS des Linux-Kernels werden Prozesse gekapselt und isoliert. Da der isolierte Prozess unabhängig vom Host ist, werden andere isolierte Prozesse daher als Container bezeichnet. Ab 0.7 wurde LXC entfernt und stattdessen der selbst entwickelte Libcontainer verwendet weiterentwickelt, um runC und Containerd zu verwenden
  • Docker Auf der Basis von Containern wurde eine weitere Kapselung durchgeführt, von Dateisystemen über Netzwerkverbindungen bis hin zur Prozessisolation usw., was die Erstellung und Wartung von Containern erheblich vereinfacht und die Docker-Technologie leichter und leichter macht schneller als die Technologie virtueller Maschinen
  • 2. Vorteile von Docker: Effizientere Nutzung der Systemressourcen
3. Vergleich zwischen Docker und virtuellen Maschinen

  • 2. Docker-Installation
  • Referenzartikel Installation: Docker Engine unter Ubuntu installieren |
  • 3 . Containerbetrieb

Start:

Docker-Ausführung:

​​-it-Interaktion

-d Hintergrundausführung

-p Portzuordnung

                                                                                                                                                                            -v disk mount

Starten Sie das beendete Container

Docker Start

Container stoppen

Docker Stop

    Containerprozess anzeigen
  • Docker PS

    Containerdetails anzeigen
  • docker inspect

    Dateien in den Container kopieren
  • docker cp file1 :/file_to_path

    Docker verlässt das Container und Container nicht schließen: Strg+Q+P
  • Docker verlässt den Container, schließt aber den Container: Exit

Alle Docker-Bilder abfragen
  • Docker-Bilder

  • ?? Erklärung

Dockerfile ist im Allgemeinen in vier Teile unterteilt: grundlegende Image-Informationen, Wartungsinformationen, Image-Bedienungsanweisungen und Container-Start-Bedienungsanweisungen

Allgemeine Befehle
  • VON: Geben Sie das Basis-Image an, muss der erste Befehl sein

  • Format:

                FROM ;image>

               FROM :
  •    #                                  MAINTAINER

    Beispiel

    MAINTAINER-Band

    RUN: Befehl, der beim Erstellen des Images ausgeführt werden soll

    Format:

    Shell-Ausführung: RUN

    exec-Ausführung: RUN ["executable", "param1", "param2"]

    Beispiel:

    RUN apk update

    RUN ["/etc/execfile", "arg1", "arg2"]

    RUN apt-get update && apt-get install Diese beiden Befehle sind immer mit && verbunden, andernfalls wird die Build-Schicht von apt-get update ausgeführt zwischengespeichert werden. Führt dazu, dass das neue Paket nicht installiert werden kann

    ADD: Lokale Dateien zum Container hinzufügen, tar und andere Typen

    werden automatisch dekomprimiert und es kann auf Netzwerkressourcen zugegriffen werden, ähnlich wie bei wget

    Format :

    ADD ... Multi -Stage in Dockerfile (Multi -Stage Construction) -SparkDev -Blog Garden

    Copy & LT; ... & LT; Dest & GT;: Wird nach dem Erstellen des Containers aufgerufen, d. „param1“, „Param2“] (Entrypoint festlegen, Entrypoint direkt aufrufen, um Parameter hinzuzufügen)

    CMD-Befehl Param1 Param2 (Ausführen des Shell-internen Befehls) Beispiel:

    CMD [„EthTool“, „-Help“] CMD Echo „1111“

    ENTRTPOINT: Konfigurieren Sie den Container, um ihn ausführbar zu machen

    .

    Format:

    ENTRYPOINT ["executable", "param1", "param2"] (ausführbare Datei, Priorität)

    ENTRYPOINT-Befehl param1 param2 (Shell-interner Befehl)

    Beispiel:

    ENTRYPOINT /httpserver.

                          CMD [ - c]

    LABAL: Wird verwendet, um Quelldaten zum Bild hinzuzufügen

             LABEL = = ...

    Beispiel:

             LABEL multi.label1="value1" multi.label2="value2" other="value3"

    ENV: Umgebungsvariablen festlegen

    Format:

         ENV < ;value>

    Beispiel:

        ENV MY_SERVICE_PORT=80 UDP_PORT=90

    EXPOSE: Geben Sie den Port für externe Interaktion an

    Format:

        EXPOSE < port> [

    Beispiel:

                                                        VOLUME []

    Beispiel:

    VOLUME [" /data", "/usr1/jenkins"]

    BENUTZER: Geben Sie beim Ausführen des Containers den Benutzernamen oder die UID an. Beim nachfolgenden Ausführen wird ebenfalls der angegebene Benutzer verwendet.

    Format:

    USER user

    USER user:group

    USER uid

    USER uid:gid

    USER user:gid

    USER uid:group

    Beispiel:

    USER www

    ARG: wird verwendet, um anzugeben, an was übergeben werden soll Die Build-Ausführungsvariablen wann

    5. Detaillierte Erklärung von Linux NameSpace

    • Detaillierte Erklärung von NameSpace:

    Blog von Linux NameSpace_Frank_Abagnale – CSDN-Blog Eine ausführlichere Einführung zu diesem Artikel finden Sie hier

    • Allgemeine Operationen von NameSpace

    • Den Namespace des aktuellen Systems anzeigen:

    lsns -t

    • Den Namespace eines Prozesses anzeigen:

    ls -la /proc/

    • Den laufenden Befehl eines Namespace anzeigen

    nsenter -t -n

    6. Detaillierte Erklärung von Linux Cgroups

    • Enthalten äh Kern: cgroups – Sie können sich auf das kurze Buch „Lernen wir mehr über diesen Artikel lernen“ beziehen.

    Simulieren von Cgroups zur Steuerung von CPU-Ressourcen

      Führen Sie top aus und Sie können sehen, dass Busyloop zwei CPU-Ressourcen beansprucht.
    • Fügen Sie den Prozess zur cgroup-Prozesskonfigurationsgruppe hinzu erfolgreich auf 1 % reduziert

    Simulieren Sie Cgroups. Das Überschreiten der begrenzten Speicherressourcen wird OOM töten.

    Erstellen Sie einen Memory-Demo-Ordner im Verzeichnis /sys/fs/cgroup/memory verbrauchendes Programm und verwenden Sie watch, um die Speichernutzung abzufragen siehe die Kill-Informationen

    Hinweis: Löschen Sie den selbst erstellten cgroup-Ordner. Sie müssen cgroup-tools verwenden. 7. Union FS Alle sind von Linux-Technologien abgeleitet und nicht innovativ. Die Innovation von Docker ist das Dateisystem.

    1. Konzept:

    • Ein Dateisystem, das verschiedene Verzeichnisse unter demselben virtuellen Dateisystem bereitstellt
    • Unterstützt das Festlegen von Lese-, Lese- und Schreibberechtigungen für jedes Mitgliedsverzeichnis.
    • Dateisystemschichtung, schreibgeschützt Das Verzeichnis mit Berechtigungen kann sein Die Änderung erfolgt hier inkrementell und hat keinen Einfluss auf den schreibgeschützten Teil. Normalerweise besteht der Zweck von Union FS darin, den schreibgeschützten Teil mit dem schreibgeschützten Teil zu kombinieren
    • 2. Illustration von Union FS
    Im Design des Docker-Images wird das Konzept der Ebene eingeführt, das heißt, jeder Schritt des Benutzervorgangs zum Erstellen des Images generiert eine Ebene, die eine hinzugefügte Ebene ist . Messen Sie rootfs (ein Verzeichnis), sodass die Container, in denen sich Anwendung A und Anwendung B befinden, gemeinsam auf dieselbe Ubuntu-Betriebssystemschicht und Golang-Umgebungsschicht verweisen (als schreibgeschützte Schicht) und jeder über eine eigene Anwendungsschicht verfügt und beschreibbar ist Schicht. Hängen Sie beim Starten des Containers die relevanten Ebenen über UnionFS als Root-Dateisystem des Containers in ein Verzeichnis ein.

    3. Container-Speichertreiber

    4. Simulieren Sie Union FS, um den Effekt besser zu verstehen


    Da die aktuelle Version von Docker den OverlayFS-Speichertreiber verwendet, verwenden wir Overlay Um Experimente durchzuführen Overlayfs wird über drei Verzeichnisse implementiert: Unterverzeichnis, Oberverzeichnis und Arbeitsverzeichnis. Das Arbeitsverzeichnis ist das Basisverzeichnis der Arbeit Bei diesem Vorgang ist der Inhalt für den Benutzer unsichtbar. Schließlich wird die einheitliche Ansicht, die dem Benutzer nach Abschluss der gemeinsamen Bereitstellung angezeigt wird, als zusammengeführtes Verzeichnis bezeichnet.

    Führen Sie den folgenden Befehl aus:

    mkdir upper lower merged work
    echo "lower" > lower/in_lower.txt
    echo "from lower" > lower/in_both.txt
    echo "from upper" > upper/in_both.txt
    echo "upper" > upper/in_upper.txt
    path=$(pwd)
    mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged

    Sie können die Auswirkung der Verwendung der Dateimontage des Overlay-Speichertreibers sehen. Nach Abschluss des Experiments müssen Sie zum Wiederherstellen der Umgebung zuerst das zusammengeführte Verzeichnis aushängen und dann die vier Verzeichnisse löschen. Wenn Sie zuerst die anderen löschen, wird möglicherweise rm: „merged/“ nicht entfernen: Gerät oder Ressource ausgelastet angezeigt. Dies führt dazu, dass das zusammengeführte Verzeichnis nicht gelöscht wird. Er 8. Docker-Netzwerk

    1. Installationstools

    Centos-System:

    $ yum install Bride-Utils

    ubuntu-System:

    $ APT-GET Install Bridge-Utils

    2. Docker-Netzwerkmodus

    Abfrage des integrierten Netzwerkmodus von Docker

    Docker Run wählt den auszuführenden Netzwerkmodus aus

      1) Host-Modus: Verwenden Sie --net=host zur Angabe. Teilen Sie einen Netzsatz mit dem Host

    2) Keiner-Modus: Verwenden Sie --net=none zur Angabe. Die Netzwerkkonfiguration muss von Ihnen selbst konfiguriert werden

    3) Bridge-Modus: Verwenden Sie --net=bridge, um die Standardeinstellung anzugeben.

    Docker-Netzwerk-Logikdiagramm-Brücke und NAT

    4) Containermodus: Verwenden Sie zur Angabe --net=container:NAME_or_ID. Verwenden Sie die Netzwerkkonfiguration anderer Container

    Das Netzwerkmodusdiagramm sieht ungefähr wie unten gezeigt aus

    3 Simulieren Sie den Betrieb der Docker-Netzwerkbrücke

    • Erstellen Sie --net=none nginx

    • Netzwerk-Namespace erstellen

    • Netzwerk-Namespace-Link erstellen

    • Überprüfen Sie das aktuell erstellte Bridge-Gerät

    • Veth-Paar erstellen

    • Führen Sie eine Netzwerkkonfiguration durch. Nginx Docker

    zu eth0 IP konfigurieren Gateway

    Nginx kann auf

    zugreifen. Konfigurieren Sie NAT so, dass Windows auch auf

    zugreifen kann

    • Nach Verwendung löschen Nat-Regeln festlegen

    Empfohlenes Lernen: „

    Docker-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDie systematischste Beherrschung der Docker-Kerntechnologie (Zusammenfassungsfreigabe). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen