Einführung in Docker-Container

Einführung in Docker-Container

1. Übersicht

1.1 Grundlegende Konzepte:

Docker ist eine Open-Source-Anwendungscontainer-Engine, die auf der Sprache Go basiert und Open Source gemäß dem Apache 2.0-Protokoll ist. Mit Docker können Entwickler ihre Anwendungen und abhängigen Pakete in einen leichten, portablen Container packen und diesen dann auf jeder gängigen Linux-Maschine veröffentlichen und auch Virtualisierung implementieren. Der Container verwendet einen vollständigen Sandbox-Mechanismus und es gibt keine Schnittstellen zwischen ihnen (ähnlich wie bei iPhone-Apps). Noch wichtiger ist, dass der Container einen äußerst geringen Leistungsaufwand aufweist.

1.2 Vorteile:

Vereinfachte Verfahren:

Mit Docker können Entwickler ihre Anwendungen und abhängigen Pakete in einen portablen Container packen und diesen dann auf jeder gängigen Linux-Maschine veröffentlichen, um eine Virtualisierung zu erreichen. Docker hat die Art und Weise der Virtualisierung verändert und ermöglicht es Entwicklern, ihre eigenen Ergebnisse zur Verwaltung direkt in Docker einzufügen. Komfort und Geschwindigkeit sind bereits die größten Vorteile von Docker. Aufgaben, die früher Tage oder sogar Wochen dauerten, können heute mit Docker-Containern in Sekunden erledigt werden.

Geld sparen:

Einerseits bedeutet der Beginn des Cloud-Computing-Zeitalters, dass Entwickler nicht länger teure Hardware konfigurieren müssen, um Ergebnisse zu erzielen. Docker hat die Denkweise geändert, dass hohe Leistung ihren Preis haben muss. Durch die Kombination von Docker und Cloud kann der Cloud-Speicherplatz umfassender genutzt werden. Es löst nicht nur das Problem der Hardwareverwaltung, sondern verändert auch die Art der Virtualisierung.

1.3 Vergleich mit herkömmlichen VM-Funktionen:

Als leichtgewichtige Virtualisierungsmethode bietet Docker beim Ausführen von Anwendungen erhebliche Vorteile gegenüber herkömmlichen virtuellen Maschinen:

Docker-Container sind sehr schnell und können in Sekundenschnelle gestartet und gestoppt werden, was viel schneller ist als herkömmliche virtuelle Maschinen.

Docker-Container erfordern nur sehr wenige Systemressourcen und Tausende von Docker-Containern können gleichzeitig auf einem Host ausgeführt werden.

Docker verwendet Git-ähnliche Vorgänge, um Benutzern das Abrufen, Verteilen und Aktualisieren von Anwendungsimages zu erleichtern. Die Anweisungen sind präzise und der Lernaufwand gering.

Docker unterstützt flexible automatisierte Erstellungs- und Bereitstellungsmechanismen durch Dockerfile-Konfigurationsdateien, um die Arbeitseffizienz zu verbessern.

Abgesehen davon, dass sie die Anwendungen in ihnen ausführen, verbrauchen Docker-Container grundsätzlich keine zusätzlichen Systemressourcen und gewährleisten so die Anwendungsleistung bei gleichzeitiger Minimierung des Systemaufwands.

Docker verwendet mehrere Schutzmechanismen auf dem Linux-System, um eine strikte und zuverlässige Isolierung zu erreichen. Ab Version 1.3 führte Docker Sicherheitsoptionen und Image-Signaturmechanismen ein, die die Sicherheit bei der Verwendung von Docker erheblich verbesserten.

Merkmal Container Virtuelle Maschinen
Startgeschwindigkeit Sekunden Minutenstand
Festplattennutzung Normalerweise MB Normalerweise GB
Leistung Nahe am Einheimischen Schwächer als Einheimische
Systemunterstützung Eine einzige Maschine unterstützt Tausende von Containern Normalerweise Dutzende von
Isolierung Sicherheitsisolierung Vollständige Isolierung

1.4 Infrastruktur

Docker verwendet ein Client-Server-Architekturmodell (C/S) und verwendet eine Remote-API zum Verwalten und Erstellen von Docker-Containern.

Docker-Container werden aus Docker-Images erstellt.

Die Beziehung zwischen Containern und Bildern ähnelt der zwischen Objekten und Klassen in der objektorientierten Programmierung.

Docker Objektorientiert
Container Objekt
Spiegel Art


1.5 Die Grundlage der Docker-Technologie:

  • Namespace, die Grundlage der Containerisolierung, stellt sicher, dass Container A Container B nicht sehen kann. 6 Namespaces: User, Mnt, Network, UTS, IPC, Pid
  • cgroups, Container-Ressourcenstatistiken und Isolierung. Die wichtigsten verwendeten Cgroups-Subsysteme: CPU, BLKIO, Device, Freezer, Memory
  • unionfs, typisch: aufs/overlayfs, die Grundlage für geschichtete Spiegelung

1.6 Docker-Komponenten:

  • Docker-Client --> Anfragen an den Docker-Serverprozess initiieren, etwa: Container erstellen, stoppen, zerstören usw.
  • Docker Server Serverprozess --> verarbeitet alle Docker-Anfragen und verwaltet alle Container
  • Docker Registry Image Warehouse -> das zentrale Lager, in dem das Image gespeichert ist, das als Speicherbinär-SCM angesehen werden kann

2. Installation und Bereitstellung

2.1 Voraussetzungen

Derzeit unterstützt CentOS nur Docker im veröffentlichten Kernel.

Docker läuft auf CentOS 7, was ein 64-Bit-System und eine Kernelversion von 3.10 oder höher erfordert.

Docker läuft auf CentOS-6.5 oder höheren Versionen von CentOS. Das System muss 64-Bit sein und die Systemkernelversion muss 2.6.32-431 oder höher sein.

2.2 Docker installieren

yum install docker -y #Installiere systemctl start docker #Starte systemctl enable docker #Richte automatischen Start ein

2.3 Grundlegende Befehle

Docker-Suche Centos #Suche nach Bildern

Standardmäßig werden die Daten aus dem Ausland bezogen, was sehr langsam ist. Über daocloud lässt sich eine Beschleunigung konfigurieren.

 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://d6f11267.m.daocloud.io
Das Skript ist so geschrieben, dass es "{\"registry-mirrors\": [\"http://d6f11267.m.daocloud.io\"]}"> /etc/docker/daemon.json widerspiegelt.
systemctl restart docker #Neustart fehlgeschlagen 


Ziehen Sie das Bild nach Bedarf:

Docker-Pull docker.io/ansible/centos7-ansible

Alle bei der Suche gefundenen Bilder abrufen:

für i in `Docker-Suche Centos|awk '!/NAME/{print $2}'`;mache Docker-Pull $i;fertig

Sehen Sie sich das lokale Bild an:

Docker-Bilder 

2.4 Befehlsanordnung:

Containeroperationen:

docker create # Einen Container erstellen, aber nicht starten docker run # Einen Container erstellen und starten docker stop # Den Container stoppen und ein SIGTERM-Signal senden
docker start # Einen angehaltenen Container startendocker restart # Einen Container neu startendocker rm # Einen Container löschendocker kill # Ein Signal an den Container senden, Standard ist SIGKILL
docker attach # Verbindung zu einem laufenden Container herstellen docker wait # Einen Container blockieren, bis dieser nicht mehr läuft

Containerinformationen abrufen:

docker ps # Zeigt Container an, die aktiv sind docker ps -a # Zeigt alle Container an, auch die aktiven und beendeten
docker inspect # Gehen Sie tief in den Container, um alle Informationen des Containers zu erhalten docker logs # Zeigen Sie die Protokolle des Containers an (stdout/stderr)
Docker-Ereignisse # Holen Sie sich Echtzeitereignisse des Docker-Servers Docker-Port # Zeigen Sie die Portzuordnung des Containers an Docker-Top # Zeigen Sie die Prozessinformationen des Containers an Docker-Diff # Zeigen Sie die Änderungen vor und nach dem Container-Dateisystem an

Exportieren Sie den Container:

docker cp # Dateien oder Verzeichnisse aus dem Container kopieren docker export # Das komplette Dateisystem des Containers als Tarball ohne Layer, Tags etc. exportieren.

implementieren:

docker exec # Führen Sie einen Befehl im Container aus. Sie können bash ausführen, um interaktiv zu werden

Spiegelbedienung:

Docker-Images # Zeigt eine Liste aller lokalen Images an. Docker-Import # Erstellt ein Image aus einem Tarball. Wird oft in Verbindung mit „Export Docker Build“ verwendet. # Verwendet Dockerfile, um ein Image zu erstellen (empfohlen).
docker commit # erstelle ein Image aus einem Containerdocker rmi # lösche ein Imagedocker load # erstelle ein Image aus einem Tarball, verwende es mit savedocker save # speichere ein Image als Tarball mit Ebenen und Tagsdocker history # zeige den Verlauf der Befehle an, die ein Image generiert habendocker tag # weise einem Image einen Alias ​​zu

Registrierungsvorgänge:

Docker-Login # Bei einem Register anmelden
docker search # Suche nach Images aus der Registry docker pull # Lädt Images aus dem Repository auf das lokale Gerät herunter docker push # Pusht ein Image in die Registry

2.5 Einfache praktische Bedienung

Führen Sie den Containervorgang aus und geben Sie ihn ein:

docker run -i -t docker.io/1832990/centos6.5 /bin/bash

-t gibt ein Pseudoterminal oder Terminal im neuen Container an;

-i ermöglicht uns die Interaktion mit dem Container (STDIN);

-d bedeutet, den Container im Hintergrund auszuführen;

/bin/bash . Dadurch wird eine Bash-Shell innerhalb des Containers gestartet.

Wenn der Container startet, erhalten wir eine Eingabeaufforderung:


Wir installieren MySQL im Container, richten es so ein, dass es beim Booten automatisch startet, und übermitteln das geänderte Image:

Docker PS -l Container-ID abfragen
docker commit -m "function" -a "user information" ID-Tag zum Übermitteln des geänderten Images 

Docker-Inspect-ID Detaillierte Informationen anzeigen Docker-Push-ID Docker-Image hochladen

Erstellen eines Images mit DockerFile

Um den Befehl „Docker Build“ zu verwenden, müssen Sie eine Dockerfile-Datei erstellen, die eine Reihe von Anweisungen enthält, die Docker mitteilen, wie das Image erstellt werden soll.

mkdir DockerFile
cd DockerFile
Katze > Docker-Datei <<EOF
VON 603dd3515fcc
WARTUNGSBEARBEITER Docker xuel
Führen Sie den Befehl „yum install mysql mysql-server -y“ aus.
Führen Sie mddir /etc/sysconfig/network aus.
Führen Sie den Befehl /etc/init.d/mysqld start aus.
Ende der Laufzeit 

docker build -t "centos6.8:mysqld" .

-t gibt Repository und Tag an

Geben Sie den Pfad zum Dockerfile an.

Beachten Sie, dass ein Bild nicht mehr als 127 Ebenen enthalten darf.

Darüber hinaus können Sie den Befehl ADD verwenden, um lokale Dateien auf den Spiegel zu kopieren.

Verwenden Sie den Befehl EXPOSE, um den Port für die Außenwelt zu öffnen.

Verwenden Sie den CMD-Befehl, um das Programm zu beschreiben, das nach dem Start des Containers ausgeführt wird.

CMD ["/usr/sbin/apachectl", "-D", "VORDERGRUND"]

2.6 Detaillierte Erläuterung der Docker-Datei

Bei Dockerfile-Anweisungen wird die Groß- und Kleinschreibung nicht beachtet. Es wird empfohlen, Großbuchstaben und # als Kommentare zu verwenden. Jede Zeile unterstützt nur eine Anweisung und jede Anweisung kann mehrere Parameter enthalten.

Dockerfile-Anweisungen können entsprechend ihrer Funktion in zwei Typen unterteilt werden: Build-Anweisungen und Setup-Anweisungen.

Build-Anweisungen: werden zum Erstellen von Images verwendet. Die angegebenen Vorgänge werden nicht auf dem Container ausgeführt, auf dem das Image ausgeführt wird.

Einstellungsanweisungen: Wird zum Festlegen der Eigenschaften des Bildes verwendet. Die angegebenen Vorgänge werden im Container ausgeführt, in dem das Bild ausgeführt wird.

VON (Basisbild angeben)

Build-Anweisungen müssen angegeben und vor anderen Anweisungen im Docker-File platziert werden. Alle nachfolgenden Anweisungen hängen von dem durch diese Anweisung angegebenen Bild ab. Das durch die FROM-Anweisung angegebene Basisimage kann sich in einem offiziellen Remote-Repository oder in einem lokalen Repository befinden.

Diese Anweisung hat zwei Formate:

  • FROM <image> #Geben Sie das Basisbild als die zuletzt geänderte Version des Bildes an
  • FROM <image>:<tag> #Geben Sie das Basisbild als Tag-Version des Bildes an.

MAINTAINER (wird verwendet, um die Informationen zum Image-Ersteller anzugeben)

Build-Anweisungen, die verwendet werden, um Informationen über den Ersteller des Bildes in das Bild zu schreiben. Wenn wir den Befehl „Docker Inspect“ auf dem Image ausführen, gibt es in der Ausgabe entsprechende Felder, um diese Informationen aufzuzeichnen.

  • WARTUNGSBEARBEITER <Name>

RUN (für die Softwareinstallation)

Mit den Build-Anweisungen kann RUN jeden Befehl ausführen, der vom Basisimage unterstützt wird. Wenn Ubuntu als Basis-Image ausgewählt ist, können im Bereich „Softwareverwaltung“ nur Ubuntu-Befehle verwendet werden.

  • RUN <Befehl> (der Befehl wird in einer Shell ausgeführt – „/bin/sh -c“)
  • RUN ["ausführbare Datei", "Param1", "Param2" ... ] (Exec-Formular)

CMD (legt die Operation fest, die beim Starten des Containers ausgeführt werden soll)

Legen Sie Anweisungen für Vorgänge fest, die beim Starten des Containers angegeben werden. Der Vorgang kann darin bestehen, ein benutzerdefiniertes Skript oder einen Systembefehl auszuführen. Diese Direktive kann in einer Datei nur einmal vorkommen. Wenn mehrere Direktiven vorhanden sind, wird nur die letzte ausgeführt.

  • CMD ["ausführbare Datei", "Param1", "Param2"] (wie ein Exec, dies ist die bevorzugte Form)
  • CMD-Befehl param1 param2 (als Shell)

ENTRYPOINT gibt den Pfad zu einem ausführbaren Skript oder Programm an, das mit den Parametern param1 und param2 ausgeführt wird. Wenn die CMD-Anweisung also die obige Form verwendet, muss im Dockerfile ein passender ENTRYPOINT vorhanden sein. Wenn eine Docker-Datei einen Einstiegspunkt angibt, verwendet sie das folgende Format:

  • CMD ["param1","param2"] (als Standardparameter für ENTRYPOINT)

ENTRYPOINT (legt die Operation fest, die beim Starten des Containers ausgeführt werden soll)

Legen Sie die Anweisung fest, um den Befehl anzugeben, der beim Starten des Containers ausgeführt werden soll. Sie kann mehrmals festgelegt werden, aber nur der letzte Befehl ist gültig.

  • ENTRYPOINT ["executable", "param1", "param2"] (wie ein Exec, die bevorzugte Form)
  • ENTRYPOINT-Befehl param1 param2 (als Shell)

Es gibt zwei Situationen, in denen dieser Befehl verwendet werden kann: Entweder er kann allein verwendet werden, oder er kann in Verbindung mit dem CMD-Befehl verwendet werden.
Bei alleiniger Verwendung, wenn Sie auch den CMD-Befehl verwenden und CMD ein vollständig ausführbarer Befehl ist, überschreiben sich die CMD-Anweisung und der ENTRYPOINT gegenseitig und nur der letzte CMD oder ENTRYPOINT ist gültig.

# Der CMD-Befehl wird nicht ausgeführt, nur der ENTRYPOINT-Befehl wird ausgeführt CMD echo "Hallo Welt!" 
EINSTIEGSPUNKT ls -l

Eine weitere Verwendung besteht darin, es mit der CMD-Anweisung zu verwenden, um die Standardparameter von ENTRYPOINT anzugeben. In diesem Fall ist die CMD-Anweisung kein vollständig ausführbarer Befehl, sondern nur der Parameterteil. Die ENTRYPOINT-Anweisung kann JSON nur verwenden, um den Ausführungsbefehl anzugeben, nicht jedoch die Parameter.

VON Ubuntu 
Befehl ["-l"] 
EINSTIEGSPUNKT ["/usr/bin/ls"]

USER (den Benutzer des Containers festlegen)

Legen Sie die Anweisung fest, um den Benutzer festzulegen, der den Container startet. Der Standardbenutzer ist root.

# Geben Sie den laufenden Benutzer von memcached an ENTRYPOINT ["memcached"] 
USER-Daemon 
oder ENTRYPOINT ["memcached", "-u", "daemon"]

EXPOSE (geben Sie den Port an, den der Container dem Hostcomputer zuordnen muss)

Legt die Anweisung fest, die den Port im Container einem Port auf dem Hostcomputer zuordnet. Wenn Sie auf den Container zugreifen müssen, können Sie anstelle der IP-Adresse des Containers die IP-Adresse des Hostcomputers und den zugeordneten Port verwenden. Der gesamte Vorgang ist in zwei Schritten abgeschlossen. Verwenden Sie zunächst EXPOSE, um den Container-Port festzulegen, der in Dockerfile zugeordnet werden soll, und geben Sie dann beim Ausführen des Containers die Option -p sowie den von EXPOSE festgelegten Port an. Auf diese Weise wird die von EXPOSE festgelegte Portnummer zufällig einer Portnummer auf dem Hostcomputer zugeordnet. Sie können auch den Port angeben, der dem Hostcomputer zugeordnet werden muss. Stellen Sie in diesem Fall sicher, dass die Portnummer auf dem Hostcomputer nicht verwendet wird. Der EXPOSE-Befehl kann mehrere Portnummern gleichzeitig festlegen. Beim Ausführen des Containers können Sie die Option -p mehrmals verwenden.

# Einen Port zuordnen EXPOSE port1 
# Der entsprechende Befehl zum Ausführen des Containers (Host-Port: Container-Port)
docker run -p port1 image 
 
# Mehrere Ports zuordnen EXPOSE port1 port2 port3 
# Der entsprechende Befehl zum Ausführen des Containers lautet docker run -p port1 -p port2 -p port3 image 
# Sie können auch eine Portnummer angeben, die dem Hostcomputer zugeordnet werden muss docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image

Portmapping ist eine wichtige Funktion von Docker. Der Grund dafür ist, dass bei jedem Ausführen eines Containers die IP-Adresse des Containers nicht angegeben werden kann, sondern zufällig innerhalb des Adressbereichs der Bridge-Netzwerkkarte generiert wird. Die IP-Adresse des Host-Rechners ist fest. Wir können den Port des Containers einem Port auf dem Host-Rechner zuordnen, sodass die IP-Adresse des Containers nicht jedes Mal überprüft werden muss, wenn auf einen Dienst im Container zugegriffen wird. Für einen laufenden Container können Sie den Docker-Port plus den im Container zuzuordnenden Port und die Container-ID verwenden, um den zugeordneten Port der Portnummer auf dem Hostcomputer anzuzeigen.

ENV (zum Festlegen von Umgebungsvariablen)

Erstellen Sie Anweisungen zum Festlegen einer Umgebungsvariable im Image.

  • ENV<Schlüssel><Wert>

Nach dem Festlegen können nachfolgende RUN-Befehle verwendet werden. Nachdem der Container gestartet wurde, können Sie diese Umgebungsvariable über Docker Inspect anzeigen oder die Umgebungsvariable während des Docker-Ausführens --env key=value festlegen oder ändern.

Wenn Sie das JAVA-Programm installiert haben und JAVA_HOME festlegen müssen, können Sie es wie folgt in die Docker-Datei schreiben:

  • ENVJAVA_HOME/Pfad/zu/java/dirent

ADD (Dateien von src in den Zielpfad des Containers kopieren)

Anweisungen zum Erstellen: Alle in den Container kopierten Dateien und Ordner haben die Berechtigung 0755 und UID und GID sind 0. Wenn es sich um ein Verzeichnis handelt, werden alle Dateien unter dem Verzeichnis dem Container hinzugefügt, mit Ausnahme des Verzeichnisses. Wenn die Datei in einem erkennbaren Komprimierungsformat vorliegt, hilft Docker beim Dekomprimieren (achten Sie auf das Komprimierungsformat). Wenn <src> eine Datei ist und <dest> nicht mit einem Schrägstrich endet, wird <dest> als Datei behandelt und der Inhalt von <src> wird in <dest> geschrieben. Wenn <src> eine Datei ist und <dest> mit einem Schrägstrich endet, wird die <src>-Datei in das Verzeichnis <dest> kopiert.

  • ADD <Quelle><Ziel>

<src> ist der relative Pfad zum erstellten Quellverzeichnis. Dies kann ein Pfad zu einer Datei oder einem Verzeichnis oder die URL einer Remotedatei sein.
<dest> ist der absolute Pfad im Container

VOLUME (Einhängepunkt angeben)

Legen Sie Anweisungen fest, um einem Verzeichnis im Container die Funktion zum dauerhaften Speichern von Daten zu ermöglichen. Das Verzeichnis kann vom Container selbst verwendet oder mit anderen Containern geteilt werden. Wir wissen, dass der Container AUFS verwendet, das keine Daten speichern kann. Wenn der Container geschlossen wird, gehen alle Änderungen verloren. Diese Anweisung kann in Dockerfile verwendet werden, wenn die Anwendung im Container persistente Daten benötigt.

VON Basis 
VOLUME ["/tmp/data"]

WORKDIR (Verzeichnis ändern)

Setzen Sie den Befehl, der mehrfach umschaltbar ist (entspricht dem Befehl cd) und für RUN, CMD und ENTRYPOINT wirksam ist.

# Führen Sie vim a.txt unter /p1/p2 aus 
ARBEITSVERZEICHNIS /p1 ARBEITSVERZEICHNIS p2 RUN vim a.txt

2.7 Bildimport und -export


Exportieren Sie das Bild lokal:


docker save -o centos6.5.tar centos6.5 oder docker export f9c99092063c >centos6.5.tar

Importieren Sie das Bild lokal:

docker load --input centos6.5.tar oder docker load < centos6.5.tar

docker rm löscht einen beendeten Container docker -f rm kann einen laufenden Container löschen

Ändern Sie den laufenden Hintergrundcontainer:

docker exec -it CONTAINER-ID /bin/bash 


3. Lagerung

3.1 Datenträger

Docker-Images bestehen aus Dateiebenen und einige Speicher-Engines von Docker können mit der Speicherung dieser Dateien umgehen.

Docker Inspect Centos #Containerdetails anzeigen

Die Ebenen unter den Informationen sind die CentOS-Dateien. Diese sind schreibgeschützt und können nicht geändert werden. Die Images und Container, die wir auf der Grundlage dieses Images erstellen, teilen diese Dateiebenen ebenfalls, und Docker fügt diesen Ebenen eine lesbare und beschreibbare Dateiebene hinzu. Wenn Sie etwas in der Dateiebene ändern müssen, kopiert Docker eine Kopie in diese lesbare und beschreibbare Dateiebene. Wenn Sie den Container löschen, werden auch die Dateien in der entsprechenden lesbaren und beschreibbaren Dateiebene gelöscht.

Wenn Sie bestimmte Daten dauerhaft behalten möchten, z. B. Protokolle auf einem Webserver oder Daten in einem Datenbankverwaltungssystem, können Sie diese Daten auf der Datenvolume-Festplatte speichern. Die darauf gespeicherten Daten bleiben dauerhaft erhalten, auch wenn der Container gelöscht wird. Beim Erstellen eines Containers können wir den Datenträger angeben. Tatsächlich geht es darum, ein bestimmtes Verzeichnis anzugeben.

docker run -i -t -v /mnt --name nginx docker.io/nginx /bin/bash

-v: Geben Sie das Verzeichnis an, das im Container bereitgestellt werden soll

Verwenden Sie die Docker-Inspect-Container-ID, um den physischen Dateipfad des bereitgestellten Verzeichnisses anzuzeigen, das dem Hostcomputer entspricht

In ähnlicher Weise können wir das Verzeichnis des angegebenen physischen Hosts verwenden, um das angegebene Verzeichnis des Containers zu mounten:

Hängen Sie das Hostverzeichnis in den Container ein:

Kopieren Sie den Code wie folgt:
docker run -d -p 80:80 --name nginx -v /webdata/wordpress:/usr/share/nginx/html docker.io/sergeyzh/centos6-nginx

-d Im Hintergrund ausführen

--name Geben Sie dem laufenden Container einen Namen

-v Hostverzeichnis: Containerverzeichnis mountet das Hostverzeichnis im Container

-p Host-Port: Der Container-Abhörport ordnet den Anwendungs-Abhörport im Container einem bestimmten Port auf dem physischen Host zu.

Mehrere physische Verzeichnisse zuordnen: (schreiben Sie einfach more -v)



3.2 Datencontainer:

Sie können einen Datencontainer erstellen, d. h. wenn Sie einen Container erstellen, geben Sie den Datenträger dieses Containers an und erlauben dann anderen Containern, diesen Container als ihren Datenträger zu verwenden. Dies ist in etwa so, als würden Sie den von diesem Datencontainer angegebenen Datenträger als Datenträger erben.

Erstellen Sie zunächst einen Datencontainer mit dem Namen newnginx

docker erstellen -v /mnt -it --name newnginx docker.io/nginx /bin/bash

Verwenden Sie diesen Datencontainer, um einen Container nginx1 auszuführen und eine Datei im Datenverzeichnis /mnt zu erstellen

docker run --volumes-from newnginx --name nginx1 -it docker.io/nginx /bin/bash

Verwenden Sie den Datencontainer, um einen Container nginx2 zu erstellen. Überprüfen Sie, ob die vom Container nginx1 im Datenverzeichnis erstellten Dateien noch vorhanden sind. Erstellen Sie auf ähnliche Weise Dateien unter /mnt von nginx2. Andere neue Container, die auf der Grundlage des Datencontainers ausgeführt werden, können die Dateien ebenfalls sehen.

3.3 Datenträgerverwaltung:

Beim Löschen eines Containers löscht Docker standardmäßig nicht dessen Datenträger.

docker volume ls #Datenträger anzeigendocker volume ls -f dangling=true #Datenträger anzeigen, der nicht vom Container verwendet wirddocker volume rm VOLUME NAME #Datenträger löschen 


Wenn Sie den Container und seine Datenfestplatte gleichzeitig löschen möchten, können Sie den Parameter -v verwenden.

docker rm -v newnginx

4. Netzwerk

Docker stellt mehrere Netzwerke bereit, die bestimmen, wie Container untereinander und mit der Außenwelt kommunizieren.

Docker-Netzwerk ls #Netzwerk anzeigen 

Wenn der Docker-Prozess startet, wird auf dem Host eine virtuelle Brücke mit dem Namen docker0 erstellt und der auf diesem Host gestartete Docker-Container wird mit dieser virtuellen Brücke verbunden. Die virtuelle Brücke funktioniert ähnlich wie ein physischer Switch, sodass alle Container auf dem Host über den Switch mit einem Layer-2-Netzwerk verbunden sind. Weisen Sie dem Container eine IP aus dem Subnetz Docker0 zu und legen Sie die IP-Adresse Docker0 als Standard-Gateway für den Container fest. Erstellen Sie auf dem Host ein Paar virtueller Netzwerkkarten (Veth-Paargeräte). Docker platziert ein Ende des Veth-Paargeräts im neu erstellten Container und nennt es eth0 (die Netzwerkkarte des Containers) und das andere Ende im Host (vethxxx oder so ähnlich) und fügt dieses Netzwerkgerät zur Docker0-Brücke hinzu.

4.1 Brückennetzwerk

Sofern Sie beim Erstellen eines Containers kein Netzwerk angeben, verwendet der Container standardmäßig ein Bridge-Netzwerk. Container, die zu diesem Netzwerk gehören, können miteinander kommunizieren. Wenn die Außenwelt jedoch auf die Container dieses Netzwerks zugreifen möchte, muss sie ein Brückennetzwerk verwenden, das wie eine Brücke zwischen dem Host und dem Container funktioniert und eine gewisse Isolationswirkung auf den Container hat. Tatsächlich werden DNAT-Regeln in iptables festgelegt, um die Portweiterleitungsfunktion zu realisieren. Sie können iptables -t nat -vnL verwenden, um es anzuzeigen.

4.2 Host-Netzwerk

Wenn Sie beim Starten eines Containers den Hostmodus verwenden, erhält der Container keinen unabhängigen Netzwerk-Namespace, sondern teilt einen Netzwerk-Namespace mit dem Host. Der Container virtualisiert nicht seine eigene Netzwerkkarte, konfiguriert nicht seine eigene IP usw., sondern verwendet die IP und den Port des Hosts. Andere Aspekte des Containers, etwa das Dateisystem und die Prozessliste, sind jedoch weiterhin vom Hostcomputer isoliert. Container, die nur diesen Netzwerktyp verwenden, nutzen das Netzwerk des Hosts. Dieses Netzwerk ist für die Außenwelt vollständig offen. Wenn Sie auf den Host zugreifen können, können Sie auch auf den Container zugreifen.

4.3 Verwenden des Modus „Keine“

Der Docker-Container verfügt über einen eigenen Netzwerk-Namespace, es wird jedoch keine Netzwerkkonfiguration für den Docker-Container durchgeführt. Mit anderen Worten, dieser Docker-Container hat keine Netzwerkkarte, IP, Routing und andere Informationen. Wir müssen Netzwerkkarten hinzufügen und die IP für den Docker-Container selbst konfigurieren. Container, die diesen Netzwerktyp verwenden, sind vollständig isoliert.

4.4 Einfache Demonstration:

Starten Sie zwei Container und zeigen Sie ihre internen IP-Adressen an

Kopieren Sie den Code wie folgt:
für i in `docker ps |grep -v "CONTAINER"|awk '{print $1}'`; führe Docker-Inspektion $i aus|grep 'IPAddress'; fertig

Überprüfen Sie, ob die Container im Host und die Container und der Host im Bridge-Modus normal kommunizieren können

Docker prüft Container-ID 

Überprüfen Sie, dass sich im vom Host erstellten Container keine IP-Adresse befindet. Es wird die Adresse des Hostcomputers verwendet.

docker run -d --net host docker.io/sergeyzh/centos6-nginx 



Überprüfen Sie, dass sich im vom Host erstellten Container keine IP-Adresse befindet. Es wird die Adresse des Hostcomputers verwendet.

docker run -d --net none docker.io/sergeyzh/centos6-nginx 


4.5 Containerhäfen:

Wenn Sie möchten, dass die Außenwelt auf die Dienste zugreifen kann, die der auf Basis des Bridge-Netzwerks erstellte Container bereitstellt, können Sie Docker mitteilen, welche Schnittstellen Sie verwenden möchten. Wenn Sie sehen möchten, welche Ports das Image verwendet, kann ExposedPorts Ihnen mitteilen, welche Ports das Image verwendet.

docker run -d -p 80 docker.io/sergeyzh/centos6-nginx  
Docker-Port 09648b2ff7f6

Der Parameter -p ordnet einen hohen Port auf dem Host zufällig dem angegebenen Port im Container zu.


Kopieren Sie den Code wie folgt:
docker run -d -p 80:80 docker.io/sergeyzh/centos6-nginx #Ordnen Sie Port 80 des Hosts dem Port 80 des Containers zu.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Tutorial zur Docker-Installation und einfachen Verwendung
  • Erste Schritte mit IPython und Docker-Containern
  • Eine vollständige Anleitung zur Docker-Befehlszeile (18 Dinge, die Sie wissen müssen)
  • Docker-Container vom Einstieg bis zur Obsession (empfohlen)
  • Eine Kurzanleitung zu Docker
  • Zweistündiges Docker-Einführungstutorial
  • Einfaches Einführungstutorial zur Installation und Anwendung von Docker
  • Docker-Grundlagen

<<:  Beispielcode für die Entwicklung einer H5-Formularseite basierend auf React-Hooks und der Konfiguration der Zarm-Komponentenbibliothek

>>:  Tutorial zum Migrieren von Projekten von MYSQL zu MARIADB

Artikel empfehlen

Eine kurze Einführung in die Kernkenntnisse der VUE uni-app

Inhaltsverzeichnis Spezifikation a. Die Auslageru...

Verwendung der JavaScript-Sleep-Funktion

Inhaltsverzeichnis 1. Schlaffunktion 2. setTimeou...

So unterscheiden Sie MySQLs innodb_flush_log_at_trx_commit und sync_binlog

Die beiden Parameter innodb_flush_log_at_trx_comm...

VUE realisiert Registrierungs- und Login-Effekte

In diesem Artikelbeispiel wird der spezifische Co...

Was wir von Googles neuer Benutzeroberfläche (Bilder und Text) lernen können

Die bedeutendste Website-Änderung im Jahr 2011 bet...

So fügen Sie einem Feld in MySQL eine Standardzeit hinzu

Unterschiede und Verwendungen von Datumstypen MyS...

Installations-Tutorial zur komprimierten Version von MySQL 8.0.11 unter Win10

In diesem Artikel finden Sie das Installations-Tu...

Detaillierte Erklärung des Linux Namespace-Benutzers

Der Benutzer-Namespace ist ein neuer Namespace, d...

4 Funktionen, die durch das Transform-Attribut in CSS3 implementiert werden

In CSS3 können mit der Transformationsfunktion vi...