Docker ist ein Verwaltungstool, das Prozesse als Kern verwendet, um Systemressourcen zu isolieren. Die Isolierung wird durch die Funktion cgroups (Kontrollgruppen) des Betriebssystemkernels erreicht. Dazu gehören Benutzerparameterbeschränkungen, Kontoverwaltung und Isolierung der Ressourcennutzung (CPU, Speicher, Festplatten-E/A, Netzwerk). Docker kann Benutzer und Gruppen für Prozesse im Container angeben, wenn dieser ausgeführt wird. Wenn nicht angegeben, wird standardmäßig root verwendet. Durch die Isolierung geht die Sicherheit jedoch nicht verloren. Traditionell werden bestimmte Anwendungen als bestimmte Benutzer ausgeführt, und der Benutzer oder die Gruppe, für die der Prozess im Container das Programm angibt, muss nicht im Voraus auf dem Host erstellt werden. Prozesssteuerungsgruppen (cgroups) können im Wesentlichen folgende Dinge tun:
Mit cgroups (Control Process Groups) verwandt ist das Konzept der Namespaces (Befehlsraum). Es gibt sechs Haupttypen der Namensisolierung in Namespaces:
Obwohl der neue Namespace von seinen Peers isoliert ist, sehen Prozesse in seinem „übergeordneten“ Namespace weiterhin alle Prozesse im untergeordneten Namespace (wenn auch mit unterschiedlichen PID-Nummern).
Normaler Docker-Benutzer führt Root im Container aus Beispielsweise kann busybox Software als Root in einem Docker-Container ausführen. Der Docker-Container selbst wird jedoch weiterhin als normaler Benutzer ausgeführt. Betrachten Sie diese Situation Echotest | Docker-Ausführung -i Busybox Cat Ersterer ist der aktuelle Systemprozess des aktuellen Benutzers und letzterer wird zur Ausführung an den Benutzer und den Prozess im Container übertragen. Wenn Linux als PID 1 in einem Container ausgeführt wird, ignoriert es das Standardverhalten des Signalsystems und der Prozess wird nicht beendet, wenn er ein SIGINT- oder SIGTERM-Signal empfängt, es sei denn, Ihr Prozess ist entsprechend codiert. Sie können ein Stoppsignal über das Dockerfile-Signal STOPSIGNAL angeben. wie: STOPSIGNAL SIGKILL Erstellen einer Docker-Datei VON alpin:latest Führen Sie den Befehl apk add --update htop && rm -rf /var/cache/apk/* aus. CMD ["htop"] $ docker build -t myhtop . #Image erstellen $ docker run -it --rm --pid=host myhtop #Im selben Namespace wie der Hostprozess ausführen Der normale Benutzer docker run gibt verschiedene Benutzer demo_user im Container an docker run --user=demo_user:group1 --group-add group2 <image_name> <befehl> Hier sind demo_user, group1 (primäre Gruppe) und group2 (sekundäre Gruppe) nicht der Benutzer und die Gruppe des Hosts, sondern werden beim Erstellen des Container-Image erstellt. Wenn der ausgeführte Benutzer nicht durch die USER-Anweisung in der Docker-Datei angegeben ist, führt der Container den Prozess als Root-Benutzer aus. So geben Sie einen Benutzer im Docker an Geben Sie im Dockerfile einen Benutzer an, um einen bestimmten Befehl auszuführen USER <Benutzer>[:<Gruppe>] #oder USER <UID>[:<GID>] docker run -u(--user)[user:group] oder --group-add Parametermethode $ docker run busybox cat /etc/passwd root:x:0:0:root:/root:/bin/sh ... www-data:x:33:33:www-data:/var/www:/bin/false niemand:x:65534:65534:niemand:/home:/bin/false $ docker run --user www-data busybox id uid=33(www-Daten) gid=33(www-Daten) Berechtigungen von Benutzern im Docker-Container Vergleichen Sie die folgenden Situationen. Die von normalen Benutzern auf dem Host erstellten Dateien werden dem Root-Benutzerbesitzer im Docker-Container zugeordnet: $ mkdir test && touch test/a.txt && cd test $ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c 'ls -al /mnt/*' -rw-r--r-- 1 Wurzel Wurzel 0 22. Okt. 15:36 /mnt/a.txt Die im Volume-Verzeichnis des Containers erstellten Dateien entsprechen dem Benutzer, der Docker aktuell auf dem Host ausführt: $ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c 'touch b.txt' $ ls -al -rw-r--r-- 1 xwx Mitarbeiter 0 10 22 23:36 a.txt -rw-r--r-- 1 xwx Mitarbeiter 0 10 22 23:54 b.txt Dateizugriffsberechtigungen für Docker-Volumes Volumes erstellen und verwenden. Docker unterstützt keine relativen Pfad-Mount-Punkte. Mehrere Container können gleichzeitig dasselbe Volume verwenden. $ Docker-Volume erstellen Hallo #Volume erstellen Hallo $ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'touch /world/a.txt && ls -al' #Insgesamt 8 Dateien in den Container integriert drwxr-xr-x 2 root root 4096 22. Okt. 16:38 . drwxr-xr-x 1 root root 4096 22. Okt. 16:38 .. -rw-r--r-- 1 root root 0 Okt 22 16:38 a.txt $ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'rm /world/a.txt && ls -al' #Lösche insgesamt 8 aus dem Container drwxr-xr-x 2 root root 4096 22. Okt. 16:38 . drwxr-xr-x 1 root root 4096 22. Okt. 16:38 .. Dateien extern erstellen und als angegebene Benutzer im Container löschen $ berühren Sie c.txt und sudo chmod root:wheel c.txt $ docker run -u 100 -it --rm -v `pwd`:/Welt -w /world busybox /bin/sh -c 'rm /world/c.txt && ls -al' Es kann tatsächlich gelöscht werden rm: '/world/c.txt' entfernen? y insgesamt 4 drwxr-xr-x 4 100 root 128 23. Okt. 16:09 . drwxr-xr-x 1 root root 4096 23. Okt. 16:09 .. -rw-r--r-- 1 100 root 0 Okt 22 15:36 a.txt -rw-r--r-- 1 100 root 0 Okt 22 15:54 b.txt Portberechtigungen für normale Docker-Benutzer unter 1024 $ docker run -u 100 -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80' nc: bind: Berechtigung verweigert #Wenn die Benutzer-ID 100 ist, kann Port 80 nicht geöffnet werden$ docker run -u 100 -it --rm -p 70:8800 busybox /bin/sh -c 'nc -l -p 8800' #Wenn der Container-Port größer als 1024 ist, können Sie... $ docker run -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80' #Sie können im Container auch root verwenden … 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:
|
<<: JavaScript implementiert die H5-Goldmünzenfunktion (Beispielcode)
>>: Eine kurze Diskussion über das Problem des vergessenen MySQL-Passworts und des Anmeldefehlers
Vorwort Ich wollte schon immer wissen, wie eine S...
Vue-Router-Übergänge sind eine schnelle und einfa...
Datenträgerbezeichnung, Eigenschaftsname, Beschre...
Allerdings ist die Häufigkeit des Shell-Starts se...
Problembeschreibung Der Schaltflächenstil ist Sym...
Inhaltsverzeichnis 1. Subunternehmer für Miniprog...
Beim Anpassen der Softwareinstallation müssen Sie...
Inhaltsverzeichnis Linux - Verwenden Sie MyCat, u...
Herzattribute opacity: .999 erstellt einen Stapel...
Neuling, nimm es selbst auf 1. Supervisor install...
Lassen Sie uns zunächst darüber sprechen, warum w...
Was sind HTTP-Header HTTP ist eine Abkürzung für ...
Schritt 1: Überprüfen Sie die lokalen Ethernet-Ei...
Situationsbeschreibung: Die Datenbank wurde abnor...
Finden Sie das Problem Als ich kürzlich die vorhe...