Die Verwendung von root innerhalb des Containers ist in Ordnung, weil der Container viele gelöschte Privilegien hat. Es kann nicht auf Hardware oder Mount-Pfade zugreifen. Es ist im Wesentlichen ein nicht-privilegierter Benutzer.
Die Installation der Anwendung sollte unbedingt im Container erfolgen. Die Dockerfile
, die das Image erstellt, muss die Anwendung zunächst installieren, und zwar innerhalb des Containers. Wenn Sie einen Container verwenden, um eine benutzerdefinierte Anwendung (z. B. php7) auszuführen, die mit Knoten und dergleichen erstellt wird, ist ein Buildcontainer, der die Installation durchführt, der richtige Weg, um das Aktualisierungs- und Installationsverhalten der Anwendung vom Hostsystem zu isolieren.
Im Wesentlichen sollte nichts außerhalb eines Containers ausgeführt werden, wenn eine Anwendung mit Docker bereitgestellt wird. Beliebige cron
Skripts sollten eine docker exec container script.sh
oder ähnliche ausführen, um beispielsweise periodische Jobs innerhalb des Containers auszuführen.
Im Allgemeinen, wenn die Anwendung Root-Berechtigungen benötigt, um etwas wie Update-Module basierend auf einer Konfiguration zu tun, verwende ich docker-compose
, um einen build
Container, der das alles als root und dann beendet. Ich verwende einen Abschnitt cap-drop
für den eigentlichen Anwendungscontainer, um so viele Funktionen wie möglich zu entfernen.
Viele Anwendungen erfordern setuid
oder setgid
, um Berechtigungen zu löschen, z. nginx
erfordert diese, so dass es von root
zu www-data:www-data
wechseln kann. nginx
schlägt fehl, wenn es als Benutzer www-data
erscheint. Die Anwendung sollte diese Funktionen fallen lassen, nachdem die Änderung selbst vorgenommen wurde.
dockerisierte Anwendungen sollten eigenständig sein und nicht von der Host-Umgebung abhängen, um sie auszuführen –
Jetzt ist die Frage: Wie wird ein Container erstellt, einschließlich der Anwendung innerhalb. Sollte dieser Container sich selbst erschaffen? Wer aktualisiert alle enthaltenen Systembibliotheken, die möglicherweise Updates erhalten, häufig kritische Sicherheitsupdates? Sie benötigen weiterhin etwas, das einen Andockcontainer außerhalb dieses Containers erstellt. Warum legt dieses "Etwas" die Anwendung nicht auch in einem lauffähigen Zustand in den Container? – Sven