Zusammenfassung des fragmentierten Wissens zum Docker-Management

Zusammenfassung des fragmentierten Wissens zum Docker-Management

1. Übersicht

Ziel dieses Artikels ist es, die Wissensfragmente der täglichen Docker-Verwaltung zusammenzufassen und zu organisieren, damit sie später überprüft und nachgeschlagen werden können.

2. Anwendungsbeispiele

2.1. Docker-Container-Isolations-Namespace

Namespace: Dies ist die wichtigste Kerntechnologie von Linux, auf der die Containervirtualisierung basiert und die zum Isolieren von Containern verwendet wird. Dies wird hauptsächlich durch die folgenden sechs Isolationstechnologien erreicht: Es gibt zwei Pseudodateisysteme: /proc und /sys/

UTS: Ermöglicht jedem Container, einen unabhängigen Hostnamen und Domänennamen zu haben, sodass er als unabhängiger Knoten im Netzwerk und nicht als Prozess auf dem Host betrachtet werden kann.

IPC : Die Prozessinteraktion im Container verwendet weiterhin die gängigen Methoden zur Interprozessinteraktion in Linux, einschließlich gemeinsamer Semaphoren, Nachrichtenwarteschlangen und gemeinsam genutztem Speicher. Die Interaktion zwischen Containerprozessen ist eigentlich die Interaktion zwischen Prozessen mit derselben PID auf dem Host.

● PID: Prozesse verschiedener Benutzer werden durch PID-Namespaces isoliert und dieselbe PID kann in verschiedenen Namespaces existieren. Der übergeordnete Prozess aller LXC-Prozesse (Linux-Container) in Docker ist der Docker-Prozess , und jeder LXC-Prozess hat einen anderen Namespace.

● NET:

● MNT: Der Einhängepunkt des Dateisystems.

● USRE: Jeder Container kann unterschiedliche Benutzer- und Gruppen-IDs haben, was bedeutet, dass das Programm innerhalb des Containers mit dem Benutzer im Container ausgeführt werden kann, anstatt mit dem Benutzer auf dem Host.

2.2. Dockers kostenlose Einschränkungs-Cgroup

zB1: docker run -it -m 200M --memory-swap 300M centos //-m oder –memory: Speichernutzungslimit festlegen, –memory-swap: Swap-Nutzungslimit (Swap-Partition) festlegen

zB2: docker run -it --name containerB -c 512 centos //containerB, CPU-Gewichtslimit ist 512; -c oder –cpu-shares legt das CPU-Gewicht des Containerexperiments fest. Wenn nicht festgelegt, ist der Standardwert 1024

zB3: docker run -it --name testA --device-write-bps /dev/sda:30MB centos //Container testA begrenzt die Anzahl der Schreibvorgänge auf die Festplatte auf 30 MB pro Sekunde;

Andere Parameter:

-bps: Die pro Sekunde gelesene und geschriebene Datenmenge. Byte pro Sekunde
-iops: Die Anzahl der E/A-Vorgänge pro Sekunde. io pro Sekunde

--device-read-bps: Stellen Sie die BPS des Lesegeräts ein
--device-write-bps: Legen Sie die BPS für das Schreiben auf das Gerät fest

--device-read-iops: Legt die IOPS des Lesegeräts fest.
--device-write-iops: Legen Sie die IOPS für das Schreiben auf das Gerät fest.

2.3. Port-Mapping für den laufenden Container festlegen

Manchmal möchten wir den Container-Mapping-Port anpassen, ohne den Container anzuhalten. Wie können wir also den Service-Port der Anwendung im Container dem lokalen Host-Rechner zuordnen, während der Container verwendet wird?

Wenn Sie einige Netzwerkanwendungen im Container ausführen und externen Zugriff auf diese Anwendungen zulassen möchten, können Sie die Portzuordnung mit den Parametern -P oder -p angeben. Wenn Sie den Parameter -P (groß) verwenden, ordnet Docker einen lokalen Host-Port zufällig dem offenen Netzwerkport des internen Containers zu. Wenn Sie den Parameter -p (klein) verwenden, können Sie den zuzuordnenden Port angeben und nur ein Container kann an einen angegebenen Port gebunden werden. Unterstützte Formate sind:

IP:HostPort:ContainerPort
IP:ContainerPort
HostPort:ContainerPort

Schauen wir uns einige Beispiele an:

zB1: docker run -d -P nginx //docker ps zeigt, dass dem lokalen Host zufällig ein 3****-Port zugewiesen und dem Port 80 des Containers zugeordnet wird. Wenn Sie http://localhost:3**** im lokalen Browser aufrufen, wird die Willkommensseite von nginx angezeigt.

zB2: docker run -d -p 8080:80 nginx //Mit docker ps können Sie sehen, dass Port 8080 des lokalen Hosts Port 80 des Containers zugeordnet ist

Überprüfung: Befehlsformat: Docker-Port CONTAINER [PRIVATE_PORT[/PROTO]]

Verwenden Sie Docker Inspect + Container-ID, um die spezifischen Informationen des Containers zu erhalten:

zB3: Fügen Sie einem laufenden Container einen Mapping-Port hinzu

docker inspect \`container_name` | grep IPAddress //Ersetzen Sie container_name durch den Containernamen in der tatsächlichen Umgebung, um die IP-Adresse des Containers zu erhalten iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000 //Ordnen Sie Port 8000 des Containers Port 8001 des Docker-Hosts zu oder:
docker commit container_id foo/live //Einen laufenden Container als Image übermitteln docker run -d -p 8000:80 foo/live /bin/bash //Das Image ausführen und Port-Mapping hinzufügen, Host 8000 zu Container 80,

2.4. Ändern Sie den Inhalt eines laufenden Docker-Containers

In Docker kopieren und übertragen Host und Container Dateien untereinander

docker cp mycontainer:/opt/testnew/file.txt /opt/test/ // Dateien vom Container auf den Host kopieren docker cp /opt/test/file.txt mycontainer:/opt/testnew/ // Dateien vom Host in den Container kopieren sudo docker commit -m „Beschreibungsinhalt“ -a „Autorenname“ 32555789dd00 aipaper/devinz83:v2 //-m wird verwendet, um die Übermittlungsbeschreibung anzugeben, genau wie das von uns verwendete Versionskontrolltool; -a kann die aktualisierten Benutzerinformationen angeben; gefolgt von der ID des Containers, der zum Erstellen des Images verwendet wurde; geben Sie schließlich den Warehouse-Namen und die Tag-Informationen des Zielimages an. Nach erfolgreicher Erstellung werden die Image-ID-Informationen zurückgegeben. Docker-Images // REPOSITORY-TAG überprüfen
aipaper/devinz83 v2

#Ändern Sie die Containerkonfigurationsdatei yaml
vi /opt/docker/yml/docker-compose-resty-redis.yml

docker stack deploy --compose-file=/opt/docker/yml/docker-compose-resty-redis.yml resty_redis //Stellen Sie die Docker-Anwendung mit dem neu geänderten Image bereit.

Hinweis: Docker CP wird wirksam, unabhängig davon, ob der Container gestartet wird. Verwenden Sie nach Abschluss den Befehl Docker Commit, um die aktualisierte Kopie festzuschreiben.

Aktualisieren Sie dann die YML-Datei des Containers und aktualisieren Sie das Image auf das neue Objekt:

Bildbeschreibung hier einfügen

2.5. Docker-Container auf andere Server migrieren

Manchmal müssen wir den aktuellen Docker-Container aus verschiedenen Gründen, beispielsweise aufgrund von Hardware-Upgrades, Änderungen im Rechenzentrum, Ressourceneinschränkungen usw., in einen anderen Ressourcenpool oder Host migrieren.

1) Container exportieren und importieren:

Container exportieren: Dadurch wird eine komprimierte Datei aus dem Dateisystem des Containers erstellt. Die exportierte Datei wird als „gzip“-Datei gespeichert. Die komprimierte Datei wird dann mit einem Dateiübertragungstool wie scp oder rsync auf den neuen Server kopiert. Importieren Sie auf dem neuen Server die GZIP-Datei in einen neuen Container.

Docker exportiert Containername | gzip > Containername.gz

zcat Containername.gz | Docker-Import – Containername

docker run -d container-name /bin/bash //Verwenden Sie den Befehl "docker run", um auf den neuen Container zuzugreifen, der auf dem neuen Server erstellt wurde

Hinweis : Ein Nachteil des Tools „Container exportieren“ besteht darin, dass es weder die Ports und Variablen des Containers noch die zugrunde liegenden Daten exportiert, die den Container enthalten. Dies kann beim Versuch, den Container auf einem anderen Server zu laden, zu Fehlern führen. In diesem Zusammenhang können wir auch die Verwendung der Docker-Image-Migration in Betracht ziehen, um Container von einem Server auf einen anderen zu migrieren.

2) Migration von Container-Images:

Das heißt, wir migrieren das mit dem Container verknüpfte Image in einen neuen Ressourcenpool. Dies ist auch die gängigste Methode , um einen Docker-Container auf einen anderen Server zu migrieren. Speichern Sie für den zu migrierenden Container zunächst mit dem Befehl „Docker Commit“ dessen Docker-Image in einer komprimierten Datei.

docker commit container-id image-name //Das generierte Image wird komprimiert

Laden Sie anschließend das obige Image auf den neuen Server hoch und erstellen Sie auf dem neuen Server mit „docker run“ einen neuen Container.
Bei dieser Methode wird das Datenvolumen nicht migriert, die im Container erstellten Anwendungsdaten bleiben jedoch erhalten.

3) Erst speichern, dann das Bild laden

Ein Docker-Image ist ein Paket mit dem Code, den Bibliotheken, den Konfigurationsdateien usw. Ihrer Anwendung. Aus diesen Images werden Docker-Container erstellt.

Mit „Docker Save“ können Sie das Image komprimieren und auf den neuen Server migrieren. Erstellen Sie anschließend auf dem neuen Server mit „docker load“ aus der komprimierten Image-Datei ein neues Image.

Docker speichert Image-Name > Image-Name.tar

cat Bildname.tar | Docker laden

4) Datenmengen migrieren:

Datenvolumes in Docker-Containern sind gemeinsam genutzte Verzeichnisse , die containerspezifische Daten enthalten. Die Daten im Datenträger sind persistent und gehen bei der Neuerstellung des Containers nicht verloren.

Wenn Sie einen Docker-Container oder ein Docker-Image mithilfe der Export- oder Commit-Tools von einem Server auf einen anderen migrieren, werden die zugrunde liegenden Datenvolumes nicht migriert. In diesem Fall werden die Verzeichnisse mit den Daten manuell auf den neuen Server migriert. Erstellen Sie dann einen Container auf dem neuen Server und verweisen Sie auf dieses Verzeichnis als Datenträger.

Eine weitere einfache Möglichkeit besteht darin, Datenvolumes zu sichern und wiederherzustellen, indem Sie den Parameter „-volumes from“ im Befehl „docker run“ übergeben.

docker run --rm --volumes-from Datenvolumenname -v $(pwd):/Backup-Imagename tar cvf Backup.tar /Pfad zum Datenvolumen

docker run --rm --volumes-from Datenvolumenname -v $(pwd):/Backup-Imagename bash -c "cd /Pfad zum Datenvolumen && tar xvf /backup/backup.tar --strip 1"

Im obigen Befehl ist datavolume-name /path/to/volume. Dieser Befehl erstellt eine Sicherung des Datenvolumens. Um ein Arbeitsverzeichnis anzugeben, können Sie auch -w/backup angeben. Das im Ordner /backup erstellte Backup kann mittels SCP- oder FTP-Tools auf den neuen Server kopiert werden. Anschließend wird das kopierte Backup extrahiert und auf dem Datenträger im neuen Container wiederhergestellt.

5) Migrieren Sie den gesamten Docker-Container:

Die obige Methode funktioniert nur für einen einzelnen Container . Wenn jedoch alle Container von einem Server auf einen anderen migriert werden müssen, verfolgen wir einen anderen Ansatz. Bei dieser Methode wird das gesamte Docker-Verzeichnis („/var/lib/docker“) auf den neuen Server kopiert. Damit dieser Ansatz erfolgreich ist, müssen mehrere Schlüsselpunkte identifiziert werden.

1. Behalten Sie die Ordnerberechtigungen und -eigentümerschaft bei.
2. Stoppen Sie den Docker-Dienst vor der Migration.
3. Überprüfen Sie, ob die Docker-Versionen auf den beiden Servern kompatibel sind.
4. Überprüfen Sie die Containerliste und -funktionalität vor und nach der Migration.
5. Pfade zu Umgebungsvariablen und anderen Konfigurationsdateien.
6. Wenn diese Methode aufgrund eines Fehlers nicht funktioniert, konfigurieren wir ein benutzerdefiniertes Skript, um Container und Bilder von einem Server auf einen anderen zu migrieren.

2.6. Dateien im Docker-Image anzeigen

docker attach ContainerID //Der entsprechende Container muss ausgeführt werden und darf sich nicht im gestoppten Zustand befinden.##Für den nicht ausgeführten Container können Sie die Dateien im Docker-Image auf den Host kopieren, wie in den folgenden Beispielen gezeigtsudo docker cp nginx-ubuntu-container:/etc/apt/sources.list ~/Documents/  

2.7. Container ausführen: allgemeine Optionen für „docker run“

Syntax: docker run [Option] Imagename [an den Startcontainer übergebener Befehl]

Beschreibung allgemeiner optionaler Parameter:

  • -i bedeutet, den Container im „interaktiven Modus“ auszuführen
  • -t bedeutet, dass der Container nach dem Start seine Befehlszeile eingibt. Nachdem Sie diese beiden Parameter hinzugefügt haben, können Sie sich nach der Erstellung beim Container anmelden. Das heißt, weisen Sie ein Pseudoterminal zu.
  • --name Benennen Sie den erstellten Container
  • -v gibt die Verzeichniszuordnungsbeziehung an (ersteres ist das Hostverzeichnis und letzteres ist das dem Host zugeordnete Verzeichnis, d. h. Hostverzeichnis: Verzeichnis im Container). Mehrere -v können verwendet werden, um mehrere Verzeichnisse oder Dateien zuzuordnen. Hinweis: Am besten führen Sie eine Verzeichniszuordnung durch, nehmen Änderungen auf dem Hostcomputer vor und geben diese dann für den Container frei.
  • -d Wenn Sie nach dem Ausführen den Parameter -d hinzufügen, wird ein geschützter Container erstellt und im Hintergrund ausgeführt (auf diese Weise melden Sie sich nach der Erstellung nicht automatisch beim Container an. Wenn Sie nur die Parameter -i -t hinzufügen, betreten Sie den Container nach der Erstellung automatisch).
  • -p bedeutet Port-Mapping. Ersteres ist der Host-Port und letzteres der Mapping-Port im Container. Sie können mehrere -p verwenden, um mehrere Ports zuzuordnen.
  • -e legt Umgebungsvariablen für den Container fest
  • --network=host bedeutet, dass die Netzwerkumgebung des Hosts dem Container zugeordnet wird, und das Netzwerk des Containers ist dasselbe wie das des Hosts.

Dies ist das Ende dieses Artikels über die Zusammenfassung fragmentarischen Wissens zum Docker-Management. Weitere relevante Inhalte zum Docker-Management finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Docker-Datenvolumenverwaltung
  • Detaillierte Erläuterung der Docker Volume-Berechtigungsverwaltung
  • Detaillierte Erläuterung zum benannten Volume der Docker-Datenverwaltung
  • Netzwerkmanagement und Netzwerkisolationsimplementierung von Docker-Containern
  • Eine kurze Diskussion über die Docker-Grundlagen: Datenverwaltung
  • Teilen Sie 8 grundlegende Befehle zur Verwaltung von Docker-Containern

<<:  Zwei Boxmodelle in Webseiten (W3C-Boxmodell, IE-Boxmodell)

>>:  Sind die Wertebereiche von int(3) und int(10) in MySQL gleich?

Artikel empfehlen

MySQL-Trigger: Erstellen und Verwenden von Triggern

Dieser Artikel beschreibt anhand von Beispielen d...

Der gesamte Prozess der Konfiguration von Hive-Metadaten für MySQL

Gehen Sie im Hive-Installationsverzeichnis in das...

JavaScript Voranalyse, Objektdetails

Inhaltsverzeichnis 1. Voranalyse 1. Vorabanalyse ...

Elemente der Benutzererfahrung oder Elemente des Webdesigns

System- und Benutzerumgebungsdesign <br />D...

Vue implementiert einen Wasserfallfluss mit unendlichem Laden

In diesem Artikelbeispiel wird der spezifische Co...

So verstehen Sie den Unterschied zwischen ref toRef und toRefs in Vue3

Inhaltsverzeichnis 1. Grundlagen 1.Referenz 2. to...

Einführung in die Verwendung gängiger Dockerfile-Befehle

Inhaltsverzeichnis 01 CMD 02 EINSTIEGSPUNKT 03 AR...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.21

Notieren Sie die Installations- und Konfiguration...

Eine detaillierte Diskussion über MySQL-Deadlocks und -Logs

Vor kurzem sind mehrere Datenanomalien in MySQL o...

Detaillierte Erklärung der Datentypen und Schemaoptimierung in MySQL

Ich lerne derzeit etwas über MySQL-Optimierung. D...

Detaillierte Erläuterung der Mybatis-Sonderzeichenverarbeitung

Vorwort: Mybatis-Sonderzeichenverarbeitung, Verar...

js zum Hochladen von Bildern auf den Server

In diesem Artikelbeispiel wird der spezifische Co...