Docker Host
Dieses Kapital betrachtet eher die Docker Internas.
cgroups
Mit cgroups lassen sich Ressourcen (CPU, Memory) einschrÀnken, die ein Container nutzen darf.
Remote Docker Host
Die Standard-Konfiguration ist, daĂ der Docker Host (der fĂŒhrt die Docker-Kommandos wie docker ps aus) die lokale Maschine ist. Ăber export DOCKER_HOST=tcp://<IP_ADDRESS>:<PORT> können die Kommandos an einen entfernten Docker-Host umgeleitet werden (sog. Remote Docker API).
Diese Konzept verwenden vermutlich auch die Docker-Wrapper, die auf nicht-nativen Docker-Umgebungen wie Windows und MacOS eingesetzt werden.
StandardmĂ€Ăig ist die Remote Docker API aus SicherheitsgrĂŒnden abgteschaltet. Ăber export DOCKER_OPTS="-H tcp://0.0.0.0:2375 auf dem Docker-Host-Server kann die Remote API auf Port 2375 fĂŒr ALLE clients verfĂŒgbar gemacht werden (will man diese Einstellung dauerhaft machen: /etc/default/docker anpassen), so daĂ ein export DOCKER_HOST=tcp://<IP_ADDRESS>:2375 auf dem Client den Remote-Docker-Host konfiguriert.
Linux Containers
Permissions - User
Der Docker Daemon lÀuft als root User und erzeugt somit auch Log-Files, die root zugeordnet sind:
root@workbench:/var/lib/docker/containers/bfaca06879908db6b54e0cc06bbc6ecc67923aff85b70fb911f1461ec8ca5f81>ls -al *.log
-rw-r----- 1 root root 1,2K Dez 16 14:23 bfaca06879908db6b54e0cc06bbc6ecc67923aff85b70fb911f1461ec8ca5f81-json.logDas macht die Sache recht schwierig, wenn Logs beispielsweise von einem Fluentd gelesen werden sollen, um sie dann an Graylog oder ElasticSearch zur nodeĂŒbergreifenden Sammlung weitergeleitet werden sollen. Den Fluentd-Prozess lĂ€Ăt man natĂŒrlich nicht als root laufen (auch nicht in der root Gruppe).
Das Problem könnte umgangen werden, indem man Fluentd in einem Docker-Container laufen lĂ€Ăt und die Docker-Host-Log-Files per volume mounted.
BTW: Die Verwendung von
USER myuserimDockerfileĂ€ndert an den Berechtigungen des Log-Files nichts, da der Docker-Daemon noch immer fĂŒr die Erstellung der Log-Files zustĂ€ndig ist.
Mit
könnte man der Gruppe loggroup Leseberechtigungen auf alle unterhalb von /var/lib/docker/containers/ erstellten Dateien einrÀumen und wenn Fluentd in dieser Gruppe ist, dann Voila.
Dockerfile USER
Per Default lÀuft der Entrypoint-Prozess im Docker-Container mit dem User root. Somit kann der Docker-Container alles im Filesystem des Containers machen. Auch der Docker-Prozess auf dem Docker-Host (ps -ef) lÀuft als User root.
Es gibt unandliche Diskussionen, ob man das per USER Kommando im Dockerfile Àndern sollte:
In diesem Beispiel lĂ€uft der Entrypoint-Prozess im Docker-Container mit dem User pfh. Das hat zur Folge, daĂ die Berechtigungen eingeschrĂ€nkt sind und beispielsweise eine Ănderung von /etc/hosts nicht möglich ist, weil nur der root User hier Berechtigungen hat.
Das hat also zumindest mal Nachteile. Ob es Vorteile hat ist strittig, denn eigentlich ist der root User in seinem Container eingesperrt. Aber gemÀà dem Least-possible-Permissions-Ansatz sollte man das vermeiden - die Docker-Implementierung könnte SicherheitslĂŒcken enthalten und dem root User im Container Zugriff als root auf dem Docker Host ermöglichen.
Filesystem
Das Filesystem des Docker Containers liegt unter /var/lib/docker/containers/. Wann man beispielsweise bei docker ps -a folgendes Ergebnis bekommt:
dann findet man das Filesystem des Docker-Containers unter /var/lib/docker/containers/87f9102cf87a571ea26e38994d57700e3a4e30b339d7347 (der Zugriff ist vermutlich auf root beschrÀnkt). Darunter findet sich dann folgende Verzeichnisstruktur:
Hier findet man also beispielsweise auch das Consolen-Log, die Docker-Engine bei docker logs 87f9102cf87a571ea26e38994d57700e3a4e30b339d734798d3017d2a1bd4377 liefert.
Das ist ĂŒbrigens ein Ansatzpunkt, um containerĂŒbergreifendes Logging mit dem ELK Stack zu ermöglichen - siehe auch
Last updated
Was this helpful?