2016-03-08 8 views
6

Ich habe eine grundlegende Frage beim Ausführen einer Composer in einem Docker-Container.Root-Benutzer in Composer Container

Ist es in Ordnung, die composer als Benutzer root im Container zu betreiben? Ich bin verwirrt, dass der Besitzer der erstellten Dateien (zum Beispiel bei Verwendung composer require) root ist.

Wird als root im Container ausgeführt OK Best Practice?

Antwort

7

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.

-6

Ein Andock-Container sollte wahrscheinlich nur zum Ausführen einer Anwendung verwendet werden. Alles, was die Anwendung installiert, sollte außerhalb des Containers erfolgen.

Normalerweise stellen Sie eine Konfiguration bereit, die den Container auf Produktionsdateien verweist, die irgendwo gespeichert sind. Das wäre der Einstiegspunkt für alles, was auch von Composer installiert wurde. Der Container selbst sollte nirgendwo Schreibrechte haben, mit Ausnahme eines Cache-Verzeichnisses.

+0

dockerisierte Anwendungen sollten eigenständig sein und nicht von der Host-Umgebung abhängen, um sie auszuführen –

+1

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