Zunächst einmal ist dieser Beitrag Docker-Neulingen gewidmet. Wenn Sie ein Veteran sind, ist die Vorgehensweise nach der Trennlinie im Artikel natürlich auch eine Idee. Lassen Sie uns zunächst darüber sprechen, wie der Docker-Vorgang des Hostcomputers in Docker ausgeführt wird, was wir Docker in Docker nennen. Warum Sie den Docker des Hostcomputers in Docker betreiben müssen, liegt auf der Hand. Sie können Ihre spezifischen Anforderungen in Containern bereitstellen, ohne sie direkt auf dem Hostcomputer installieren zu müssen (vorausgesetzt, wir haben keine Möglichkeit, den Docker des Hostcomputers in Docker zu betreiben, dann können wir solche Softwareprogramme nur direkt auf dem Hostcomputer installieren, was der Verwaltung und Wartung offensichtlich nicht förderlich ist). Um diese Anforderung zu erfüllen, ist es eigentlich ganz einfach. Sie müssen nur die Docker-Datei und die Docker.sock-Datei des Docker-Hosts in den Container einbinden. Genauer gesagt:
Sie müssen zuerst den Speicherort von Docker und Docker.sock auf Ihrem Hostcomputer finden. Mounten Sie sie nicht falsch. Standard-Linux verwendet normalerweise den oben genannten Speicherort. Wenn Sie den Docker-Container starten, können Sie nach dem normalen Mounten der beiden oben genannten Dateien Befehle wie Docker-Images in Docker ausführen. Wenn es ein Problem mit verweigerter Berechtigung gibt
Problemumgehung Geben Sie auf dem Host, auf dem sich der Container befindet, docker.sock direkt die Berechtigung 777, mit dem Befehl chmod 777 docker.sock Wunderschöne Trennlinie Das Folgende gilt für das Qunhui-System. Sie müssen sich nicht allzu viele Gedanken darüber machen, was dieses System ist. Kurz gesagt, dieses System weist einige einzigartige Probleme in Docker auf, die es schwierig machen, damit zu tun, was Sie möchten. Daher habe ich einen Workaround gewählt, um damit umzugehen (eine Denkweise, nur um eine Diskussion zu beginnen). Lassen Sie mich zunächst die aktuelle Situation beschreiben: Das System bietet ein UI-Verwaltungstool für Docker. Wir können mit diesem Tool normale Mount-Vorgänge durchführen, aber wenn wir die oben genannten Docker- und Docker.sock-Dateien mounten möchten, funktioniert dies nicht. Schauen wir uns zunächst den Screenshot an: Lassen Sie uns über die Einschränkungen der UI-Operationen im Bild sprechen! Qunhui hat die Auswahl der Dateien offiziell eingeschränkt. Es ist nicht möglich, Dateien auf Systemebene wie /usr/<yyyy-mm-sock>/va/<yyyy-mm-sock> auszuwählen. Das bedeutet, dass wir Docker- und Docker.sock-Dateien nicht direkt mounten können. Ist es möglich, einen ln -s-Softlink durchzuführen? Nach einigen Versuchen habe ich zunächst über die SSH-Befehlszeile zwei Softverbindungen im Jenkins-Ordner erstellt (Docker und Docker.sock sanft verbunden) und bin dann zur Qunhui-UI-Oberfläche zurückgekehrt, konnte sie aber immer noch nicht auswählen (da Qunhui die Softverbindungsdatei direkt blockiert hat, kann man sie nicht sehen). Wie kann man das Problem also lösen? Meine Methode ist (Softlink-Methode ist geändert): 1. Erstellen Sie zwei Dateien „docker“ und „docker.sock“ im Jenkins-Verzeichnis (benennen Sie sie korrekt). 2. Klicken Sie dann im Docker auf die Schaltfläche „Datei hinzufügen“, wählen Sie diese beiden Dateien wie gewohnt aus und mounten Sie sie. Sie können sie wie gewohnt mounten und andere Konfigurationen abschließen. Starten Sie den Docker-Container nach Abschluss der Konfiguration vorerst nicht. 3. Melden Sie sich über SSH bei Qunhui an, löschen Sie die beiden gerade erstellten Dateien im Jenkins-Verzeichnis und erstellen Sie dann Softlinks für die Docker- und Docker.sock-Quelldateien zu Jenkins. root@test:cd /volume1/docker/jenkins/ root@test:rm -rf docker docker.sock root@test:ln -s /run/docker.sock /volume1/docker/jenkins/docker.sock root@test:ln -s /usr/local/bin/docker /volume1/docker/jenkins/docker root@test:/volume1/docker/jenkins#ll insgesamt 8 drwxrwxrwx+ 1 Nuggets-Benutzer 96 6. Juni 11:22 . drwxr-xr-x+ 1 root root 188 30. Mai 19:29 .. lrwxrwxrwx 1 root root 21 Juni 6 11:22 docker -> /usr/local/bin/docker lrwxrwxrwx 1 root root 16 Juni 6 11:21 docker.sock -> /run/docker.sock drwxrwxrwx+ 1 shanhongyu-Benutzer 24. Juni 1 11:07 java_home drwxrwxrwx+ 1 Nuggets-Benutzer 4476 6. Juni 11:00 jenkins_home drwxrwxrwx+ 1 shanhongyu Benutzer 82 1. Juni 11:12 maven_home 4. Gehen Sie dann zurück zur Qunhui-Benutzeroberfläche und starten Sie den Container. Alles ist perfekt. (Qunhui erlaubt Ihnen nicht, Softlinks auszuwählen, aber Linux und Docker können Softlinks grundsätzlich direkt mounten) Zusatzwissen: Mit Docker Host-Programme in Images ausführen Der Befehl „Docker Run“ wird verwendet, um Befehle in einem neuen Container auszuführen. Der Befehl „Docker Run“ erstellt zunächst eine beschreibbare Containerebene auf dem angegebenen Image und startet diese dann mit dem angegebenen Befehl. Mit anderen Worten: Docker Run entspricht den APIs /containers/create und /containers/(id)/start. Ein angehaltener Container kann mit Docker Start mit allen vorherigen Änderungen neu gestartet werden. Siehe docker ps -a, um eine Liste aller Container anzuzeigen. Verwendung
Hülse Beispiel Vergabe eines Namens und Zuordnung eines Pseudo-TTY (-name, -it) $ docker run --name test -it debian root@d6c0fe130dba:/# Ausfahrt 13 $ echo $? 13 $ docker ps -a | grep-Test d6c0fe130dba debian:7 "/bin/bash" vor 26 Sekunden Beendet (13) vor 17 Sekunden test Hülse Dieses Beispiel führt einen Container mit dem Namen „Test“ unter Verwendung des Images „debian:latest“ aus. - es weist Docker an, ein Pseudo-TTY zuzuordnen, das mit dem Standarddin des Containers verbunden ist. Dadurch wird eine interaktive Bash-Shell im Container erstellt. In diesem Beispiel wird die Bash-Shell durch Eingabe von exit 13 beendet. Dieser Exit-Code wird an den Aufrufer von Docker Run übergeben und in den Metadaten des Testcontainers aufgezeichnet. Container-ID erfassen (-cidfile)
Hülse Dadurch wird ein Container erstellt und Tests auf der Konsole gedruckt. Das Flag --cidfile veranlasst Docker, eine neue Datei zu erstellen und die Container-ID darin zu schreiben. Wenn die Datei bereits vorhanden ist, gibt Docker einen Fehler zurück. Docker schließt diese Datei, wenn der Docker-Lauf beendet wird. Volle Containerfunktionalität (-privilegiert) $ docker run -t -i --rm Ubuntu Bash root@bc338942ef20:/# mount -t tmpfs keine /mnt mount: Berechtigung verweigert Hülse Dies funktioniert nicht, da die meisten potenziell gefährlichen Kernelfunktionen standardmäßig gelöscht werden, einschließlich cap_sys_admin (das zum Mounten von Dateisystemen erforderlich ist). Mit dem Flag --privileged kann es jedoch ausgeführt werden: $ docker run -t -i --privileged Ubuntu Bash root@50e3f57e16e6:/# mount -t tmpfs keine /mnt root@50e3f57e16e6:/# df -h Verwendete Dateisystemgröße Verfügbare Nutzung% Eingebunden auf keine 1,9G 0 1,9G 0 % /Monat Hülse Arbeitsverzeichnis festlegen [-w]
Hülse -w ermöglicht die Ausführung von Befehlen in einem Verzeichnis, hier /Pfad/zum/Verzeichnis/. Wenn der Pfad nicht existiert, wird er innerhalb des Containers erstellt. Legen Sie Speichertreiberoptionen für jeden Container fest
Hülse Tmpfs einhängen (-tmpfs)
Hülse Das Flag --tmpfs mountet ein leeres tmpfs in den Container mit den Optionen rw, noexec, nosuid, size=65536k. Volumes mounten (-v, --read-only)
Hülse Das Flag -v mountet das aktuelle Arbeitsverzeichnis in den Container. -w ermöglicht die Ausführung von Befehlen im aktuellen Arbeitsverzeichnis und ändert das Verzeichnis auf den von pwd zurückgegebenen Wert. Diese Kombination führt den Befehl also mithilfe des Containers, aber im aktuellen Arbeitsverzeichnis aus.
Hülse Wenn das Hostverzeichnis für ein gebundenes Volume nicht vorhanden ist, erstellt Docker dieses Verzeichnis automatisch auf dem Host. Im obigen Beispiel erstellt Docker den Ordner /doesnt/exists, bevor der Container gestartet wird.
Hülse Volumes können in Kombination mit --read-only verwendet werden, um zu steuern, wohin der Container Dateien schreibt. Das Flag --read-only mountet das Root-Dateisystem des Containers schreibgeschützt und untersagt das Schreiben an Speicherorte außerhalb des angegebenen Volumes des Containers. Der obige Artikel über das Aufrufen und Ausführen der Docker-Operationen des Hosts im Docker-Container ist alles, was ich mit Ihnen teilen kann. Ich hoffe, er kann Ihnen als Referenz dienen, und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen. Das könnte Sie auch interessieren:
|
<<: Umfassende Übersicht über die verschiedenen Abhörmethoden von Vue3.0
1. Installieren Sie das systemübergreifende Datei...
Binlog ist eine binäre Protokolldatei, die alle M...
Binlog ist eine binäre Protokolldatei, die zum Au...
Docker installieren Aktualisieren Sie das Yum-Pak...
Vorwort Heute habe ich MySQL installiert und fest...
1. Konfiguration Die ersten beiden sind standardm...
HTML-Semantik scheint ein alltägliches Problem zu...
Inhaltsverzeichnis 1. Unterschiede zwischen den b...
Inhaltsverzeichnis Problemanalyse Warum Kapselung...
1. Hintergrund Verwenden Sie LDAP, um betriebs- u...
In diesem Artikel erfahren Sie, wie Sie das Probl...
Inhaltsverzeichnis 1. Einleitung 2. Nutzung 3. En...
Inhaltsverzeichnis 1. Datenbank-Master-Slave-Klas...
Die von MySQL erstellte Optimierung besteht im Hi...
Diese Woche war so arbeitsreich wie ein Krieg. Ic...