Docker-Datenverwaltung und Netzwerkkommunikationsnutzung

Docker-Datenverwaltung und Netzwerkkommunikationsnutzung

Sie können Docker installieren und einfache Vorgänge über den Docker-Kern und die Installation durchführen.

1. So erstellen Sie ein Docker-Image

Docker-Images sind nicht nur die Kerntechnologie von Docker, sondern auch ein Standardformat für Anwendungsversionen. Ein vollständiges Docker-Image kann den Betrieb eines Docker-Containers unterstützen. Während der gesamten Nutzung von Docker können Sie nach dem Eingeben eines finalisierten Containers Vorgänge im Container ausführen. Der häufigste Vorgang ist die Installation von Anwendungsdiensten im Container. Wenn Sie die installierten Dienste migrieren möchten, müssen Sie ein neues Image für die Umgebung und die erstellten Dienste generieren.

(1) Auf Basis eines vorhandenen Bildes erstellen

Der Befehl „Docker Commit“ wird hauptsächlich zum Erstellen von Images auf Grundlage vorhandener Images verwendet. Sein Wesen besteht darin, das in einem Container ausgeführte Programm und die Betriebsumgebung des Programms zu packen, um ein neues Image zu generieren.

Das Befehlsformat ist wie folgt:

Docker-Commit [Optionen] Container-ID/Name Warehouse-Name: [Tag]

Die Parameter sind wie folgt:

  • -m: Beschreibungsinformationen
  • -a: Autoreninformationen
  • -p: Stoppt das Image während des Build-Prozesses, um ein neues Image zu erstellen

(1) Installieren Sie zuerst Docker und erstellen Sie dann ein Image

[root@localhost ~]# yum -y installiere Docker
[root@localhost ~]# systemctl starte Docker
[root@localhost ~]# mount /dev/cdrom /media/
mount: /dev/sr0 ist schreibgeschützt und wird schreibgeschützt gemountet [root@localhost ~]# cd /media/
[root@localhost-Medien]# ls
apache-tomcat-8.5.16.tar.gz dhcp jdk-8u91-linux-x64.tar.gz
centos httpd-registry.tar.gz
centos6 httpd_centos ubuntu-12.04-x86_64-minimal.tar.gz
[root@localhost media]# docker load < dhcp \\zair lädt das Image in das lokale Verzeichnis [root@localhost media]# docker images \\Zeigen Sie das Image an [root@localhost media]# docker create -it docker.io/networkboot/dhcpd /bin/bash \\Container erstellen dfbe3a15f462d82674cfdfe87dfb7c4b4b1dcf2267e5c0043510cbe10f11a65b
[root@localhost /]# docker ps -a \\Container anzeigen CONTAINER ID IMAGE BEFEHL ERSTELLT STATUS PORTS NAMEN
dfbe3a15f462 docker.io/networkboot/dhcpd "/entrypoint.sh /b..." Vor etwa einer Minute Erstellt determined_dubinsky
[root@localhost /]# docker start dfbe3a15f462 \\Container dfbe3a15f462 starten
[root@localhost /]# docker exec -it dfbe3a15f462 /bin/bash
root@dfbe3a15f462:/# touch 123 \\Zwei Dateien erstellenroot@dfbe3a15f462:/# touch 456

(2) Starten Sie ein Image, nehmen Sie Änderungen im Container vor und senden Sie den geänderten Container anschließend als neues Image ab. Sie müssen sich die D-Nummer des Containers merken, zum Beispiel:

[root@localhost /]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
dfbe3a15f462 docker.io/networkboot/dhcpd "/entrypoint.sh /b..." vor 5 Minuten Up 2 Minuten determined_dubinsky

(3) Verwenden Sie den Befehl dockercommit, um wie folgt ein neues Image zu erstellen:

[root@localhost /]# docker commit -m "newdhcp" -a "xws" dfbe3a15f462 docker:mydhcp
sha256:2c1acb192f78bbbb584fc52954a179eb0f10730e0cd58d120d952439ead45b00

(4) Nach Abschluss der Erstellung werden die ID-Informationen des neu erstellten Bildes zurückgegeben. Zeigen Sie die lokale Bildliste an, um die neu erstellten Bildinformationen anzuzeigen:

[root@localhost /]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
docker mydhcp 2c1acb192f78 Vor etwa einer Minute 125 MB
docker.io/networkboot/dhcpd latest 6f98b6b9b486 vor 19 Monaten 125 MB

(2) Auf Basis einer lokalen Vorlage erstellen

Ein Image kann durch Importieren einer Betriebssystem-Vorlagendatei generiert werden. Die Vorlage kann vom Open-Source-Projekt OPENVZ unter der Downloadadresse heruntergeladen werden:
http://openvz.org/Download/template/precreated.

Mit folgendem Befehl herunterladen

wget http://down1oad.openvz.org/template/precreated/ubuntu-12.04-x86_64-minimal.tar.gz

(3) Basierend auf Dockerfile erstellen

Zusätzlich zur manuellen Generierung von Docker-Images können Sie Dockerfile auch zum automatischen Generieren von Images verwenden. Dockerfile ist eine Datei, die aus einer Reihe von Anweisungen besteht, von denen jede einem Befehl in Linux entspricht. Das Docker-Programm liest die Anweisungen im Dockerfile, um das angegebene Image zu generieren.

Die Dockerfile-Struktur ist grob in vier Teile unterteilt: grundlegende Image-Informationen, Betreuerinformationen, Anweisungen zum Image-Betrieb und Anweisungen, die beim Starten des Containers ausgeführt werden.

Beim Schreiben einer Docker-Datei muss ein striktes Format eingehalten werden: Die erste Zeile muss die FROM-Anweisung verwenden, um den Namen des Images anzugeben, auf dem sie basiert; verwenden Sie dann die MAINTAINER-Anweisung, um die Benutzerinformationen anzugeben, die das Image verwalten; dann folgen Anweisungen zu Image-Operationen, wie z. B. die RUN-Anweisung. Jedes Mal, wenn eine Anweisung ausgeführt wird, wird dem Basisimage eine neue Ebene hinzugefügt; verwenden Sie schließlich die CMD-Anweisung, um die Befehlsoperation anzugeben, die beim Starten des Containers ausgeführt werden soll.

Beispiel: Verwenden von Dockerfile zum Erstellen eines Images und Ausführen in einem Container

1. Erstellen Sie ein Arbeitsverzeichnis

[root@localhost /]# mkdir apache
[root@localhost /]# cd apache/

2. Erstellen und schreiben Sie die Dockerfile-Datei

[root@localhost media]# docker load < centos \\Laden Sie zuerst centos in das lokale [root@localhost apache]# vim Dockerfile

FROM centos \\Basierend auf dem Centos-Basisimage MAINTAINER Der Centos-Projektor \\Pflegt die Benutzerinformationen des Images und schreibt sie anschließend beiläufig RUN yum -y update \\Anweisungen zum Installieren des Apache-Softwarepakets im Image RUN yum -y install httpd
EXPOSE 80 \\Öffne Port 80 ADD index.html /var/www/html/index.html //Kopiere die Homepage-Datei der Website ADD run.sh /run.sh //Kopiere das Ausführungsskript in das Image RUN chmod 775 /run.sh
RUN systemctl disable httpd \\Apache so einstellen, dass er gestartet wird oder nicht CMD 【“/run.sh”】 \\Container starten, um Skript auszuführen

3. Schreiben Sie den Inhalt des Ausführungsskripts

[root@localhost apache]# vim run.sh
#!/bin/bash                
rm -rf /run/httpd/* \\Bereinigen Sie den HTTP-Cache exec /usr/sbin/apachectl -D FOREGROUND \\Starten Sie den Apache-Dienst

4. Erstellen Sie eine Testseite

[root@localhost apache]# echo "asd" >index.html
[root@localhost apache]# ls
Docker-Datei index.html run.sh

5. Generieren Sie ein Image mit Dockerfile

Nachdem Sie die Docker-Datei und den zugehörigen Inhalt geschrieben haben, können Sie mit dem Befehl „Docker Build“ ein Image erstellen.

docker build 【選項】 路徑

Verwenden Sie das gerade geschriebene Dockerfile, um das Image automatisch zu generieren

[root@localhost apache]# docker build -t httpd:centos .

Nachdem Sie das Bild im Befehl zum automatischen Generieren eines Bilds angegeben haben, müssen Sie unbedingt den Speicherpfad des neu generierten Bilds schreiben. Das heißt, der "." nach dem Leerzeichen stellt den aktuellen Pfad dar, andernfalls wird ein Fehler gemeldet.

6. Führen Sie den Container mit dem neuen Image aus

Laden Sie das neu generierte Image in den Container und führen Sie es aus

[root@localhost /]# docker run -d -p 12345:80 httpd:centos

ee9adf324443b006ead23f2d9c71f86d1a4eb73358fb684ee3a2d058a0ac4243

[root@localhost apache]# docker ps -a

CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
99e9234cefe5 httpd:centos "/run.sh" vor 8 Sekunden Vor 7 Sekunden 0.0.0.0:12345->80/tcp youthful_lumiere
dfbe3a15f462 docker.io/networkboot/dhcpd "/entrypoint.sh /b..." vor 56 Minuten Vor 53 Minuten determined_dubinsky

//Verwende das neu generierte Image, um es in den Container zu laden und auszuführen //Die Option „-p“ realisiert die Zuordnung vom lokalen Port 12345 zu Port 80 im Container

Greifen Sie über einen Browser auf die Webseite zu

Docker-Datenverwaltung

Um in Docker die im Container generierten Daten bequem anzuzeigen oder Daten zwischen mehreren Containern auszutauschen, sind Containerdatenverwaltungsvorgänge erforderlich. Es gibt zwei Hauptmethoden zum Verwalten von Daten in Docker-Containern: Datenvolumes und Datenvolumes-Container.

(1) Datenmenge

Ein Datenvolume ist ein spezielles Verzeichnis, das von Containern verwendet wird. Es befindet sich im Container und kann das Verzeichnis des Hosts in das Datenvolume einbinden. Änderungen am Datenvolume sind sofort sichtbar und eine Aktualisierung der Daten hat keine Auswirkungen auf das Image. Dies ermöglicht eine Datenmigration zwischen dem Host und dem Container. Die Verwendung von Datenvolumes ähnelt dem Mount-Vorgang für Verzeichnisse unter Linux.

1. Erstellen Sie ein Datenvolumen

[root@localhost /]# docker run -d -v /data1 -v /data2 --name web httpd:centos
4944c63124d2f96bedd78b4016e6d96e464089626e97b913b06ec888e7ab8f65
[root@localhost /]# docker exec -it web /bin/bash \\Geben Sie den Container ein und Sie können sehen, dass es sich um denselben Rechner wie den Host handelt [root@4944c63124d2 /]# ls
anaconda-post.log boot data2 usw. lib media opt root run.sh srv tmp var
bin data1 dev home lib64 mnt proc run sbin sys usr
[root@4944c63124d2 /]#

(2) Mounten Sie das Host-Verzeichnis als Datenvolume

Zum Beispiel

[root@localhost /]# docker run -d -v /var/www:/xws --name web-1 httpd:centos
05079057bf0c7c47b14fd457d1a5df0e29f080b6103753399654ef9d0aa4bf0f

Mitte: Ersteres ist das Verzeichnis des Hostcomputers und letzteres ist das Verzeichnis im Container

[root@localhost /]# cd /var/www/
[root@localhost www]# touch asdasdasd
[root@localhost www]# ls
Abonnieren

Gehen Sie in den Container und schauen Sie nach

[root@localhost /]# docker exec -it web-1 /bin/bash
[root@05079057bf0c /]# ls   
anaconda-post.log boot usw. lib media opt root run.sh srv tmp var
bin dev home lib64 mnt proc run sbin sys usr xws
[root@05079057bf0c /]# cd xws
[root@05079057bf0c xws]# ls
Abonnieren

Sie können sehen, dass der Host und der Container teilen

(2) Datenvolumencontainer

[root@localhost /]# docker run -it --volumes-from web --name 777 httpd:centos /bin/bash
[root@d6324596cb2c /]# cd data1
[root@d6324596cb2c data1]# Touch-Datei
[root@d6324596cb2c data1]# beenden
Ausfahrt
[root@localhost /]# docker exec -it web /bin/bash
[root@4944c63124d2 /]# ls
123 bin data1 dev home lib64 mnt proc run sbin sys usr
anaconda-post.log boot data2 usw. lib media opt root run.sh srv tmp var
[root@4944c63124d2 /]# cd data1
[root@4944c63124d2 data1]# ls
Datei
[root@4944c63124d2 data1]#

Sie können sehen, dass die beiden Container teilen

(3) Docker-Netzwerkkommunikation

Docker bietet einen Mechanismus zum Zuordnen von Container-Ports zum Host und zum Verbinden von Containern, um Netzwerkdienste für Container bereitzustellen.
Um die Portzuordnung zu implementieren, müssen Sie beim Ausführen des Befehls „docker run“ die Option -P (Großbuchstabe) verwenden, um eine zufällige Zuordnung zu implementieren. Docker ordnet einen Port im Bereich von 49000 bis 49900 zufällig einem offenen Netzwerkport innerhalb des Containers zu.

1. Portzuordnung

[root@localhost /]# docker run -d -P httpd:centos
70762709d90a8365803b8b13be02e06e2f9c0b4fdb8624bad01d579817809
[root@localhost /]# docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
70762709d90a httpd:centos "/run.sh" vor 5 Sekunden Aktiv seit 4 Sekunden 0.0.0.0:**32768**->80/tcp kickass_bhaskara

Sie können sehen, dass der Port 32768 wird

Sie können auch den Port angeben

[root@localhost /]# docker run -d -p 123:80 httpd:centos
9c7b1b3989b30f44c22276a62674e565daf410e05bdf0b4892c09dca22662253

2. Container-Vernetzung

Die Containerverbindung wird durch die Einrichtung eines dedizierten Netzwerkkommunikationstunnels zwischen Containern über die Containernamen erreicht. Einfach ausgedrückt wird zwischen dem Quellcontainer und dem Empfangscontainer ein Tunnel aufgebaut. Der Empfangscontainer kann die vom Quellcontainer angegebenen Informationen sehen. Beim Ausführen des Befehls „docker run“ wird die Option --link verwendet, um eine Verbindung und Kommunikation zwischen Containern herzustellen.
Das Format ist:

--link Name:Alias ​​\Alias

Erstellen eines Quellcontainers

[root@localhost /]# docker run -d -P --name web1 httpd:centos
0105f396c69b15557af4c15a62143872e725a28050075b554a4d2765a504d558

Erstellen eines Empfangscontainers

Verwenden Sie den Befehl „Docker Run“, um Container B zu erstellen. --name gibt den Namen als web2 an. --link gibt den Verbindungscontainer an, um die Containerverbindung herzustellen.

[root@localhost /]# docker run -d -P --name web2 --link web1:web1 httpd:centos
10413ec7492d1d4bab724b4ecf2c2378dae6f496d14c2d68d27ee29b6a26bb1a

Testen der Containerverbindung

[root@localhost /]#** docker exec -it web2 /bin/bash**
[root@10413ec7492d /]# **ping web1**
PING web1 (172.17.0.8) 56(84) Bytes Daten.
64 Bytes von Web1 (172.17.0.8): icmp_seq=1 ttl=64 Zeit=0,153 ms
64 Bytes von Web1 (172.17.0.8): icmp_seq=2 ttl=64 Zeit=0,063 ms
64 Bytes von Web1 (172.17.0.8): icmp_seq=3 ttl=64 Zeit=0,064 ms
64 Bytes von Web1 (172.17.0.8): icmp_seq=4 ttl=64 Zeit=0,074 ms
64 Bytes von Web1 (172.17.0.8): icmp_seq=5 ttl=64 Zeit=0,065 ms
64 Bytes von Web1 (172.17.0.8): icmp_seq=6 ttl=64 Zeit=0,065 ms

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:
  • Detaillierte Erläuterung der Netzwerkkommunikation des WeChat-Applets
  • Entwurfsoptimierungsschema für ServerSocket in der Java-Netzwerkkommunikation
  • Docker Multi-Host-Netzwerkkommunikation im Detail
  • Fallanalyse für Android-Netzwerkkommunikation
  • Paper: Effektives Lernen tiefer Netzwerkkommunikation mit verteilten Daten

<<:  Grundlegende Schritte zur Verwendung einer Mysql-SSH-Tunnelverbindung

>>:  So ändern Sie den Punkt im WeChat-Applet Swiper-Dot in einen Slider

Artikel empfehlen

Zusammenfassung gängiger Docker-Befehle

Docker-Installation 1. Anforderungen: Linux-Kerne...

Docker-Fallanalyse: Erstellen eines MySQL-Datenbankdienstes

Inhaltsverzeichnis 1 Konfigurations- und Datenver...

So verwenden Sie Lottie-Animationen in React Native-Projekten

Lottie ist eine von Airbnb entwickelte Open-Sourc...

Detailliertes Tutorial zur automatischen Installation von CentOS7.6 mit PXE

1. Nachfrage Die Basis verfügt über 300 neue Serv...

WePY-Cloud-Entwicklungspraxis im Linux-Befehlsabfrage-Applet

Hallo zusammen, heute werde ich mit Ihnen die WeP...

Detaillierte Erklärung zur Verwendung von Standard in MySQL

NULL- und NOT NULL-Modifikatoren, DEFAULT-Modifik...

Designtheorie: Zu den Themen Schema, Ressourcen und Kommunikation

<br />In vielen kleinen Unternehmen besteht ...

JavaScript realisiert Lupen-Spezialeffekte

Der zu erzielende Effekt: Wenn die Maus auf das k...

So exportieren Sie MySQL-Abfrageergebnisse in CSV

Um MySQL-Abfrageergebnisse in CSV zu exportieren,...

Ausführliche Erklärung der Iteratoren in ECMAScript

Inhaltsverzeichnis Vorwort Frühere Iterationen It...

Detaillierte Erklärung zur Interpretation der Nginx-Konfigurationsdatei

Die Nginx-Konfigurationsdatei ist hauptsächlich i...