Bei der Bereitstellung von Anwendungen auf Servern besteht normalerweise eine Trennung zwischen dem, was die Anwendung mit sich selbst bündelt, und dem, was von der Plattform (Betriebssystem und installierte Pakete) erwartet wird. Ein Punkt dabei ist, dass die Plattform unabhängig von der Anwendung aktualisiert werden kann. Dies ist beispielsweise nützlich, wenn Sicherheitsupdates dringend auf Pakete angewendet werden müssen, die von der Plattform bereitgestellt werden, ohne die gesamte Anwendung neu zu erstellen.
Üblicherweise wurden Sicherheitsupdates einfach durch Ausführen eines Paketmanagerbefehls angewendet, um aktualisierte Versionen von Paketen auf dem Betriebssystem zu installieren (z. B. "yum update" auf RHEL). Doch wie lässt sich mit der Einführung der Containertechnologie wie Docker, bei der Container-Images im Wesentlichen sowohl die Anwendung als auch die Plattform bündeln , ein System mit Containern auf dem neuesten Stand halten? Sowohl der Host als auch die Container verfügen über eigene, unabhängige Paketsätze, die aktualisiert werden müssen. Durch die Aktualisierung auf dem Host werden keine Pakete in den Containern aktualisiert. Mit der Veröffentlichung von RHEL 7, in dem Docker-Container besonders vorgestellt werden, wäre es interessant zu erfahren, wie Redhat Sicherheitsupdates von Containern handhaben soll.
Gedanken zu einigen Optionen:
- Wenn Sie den Paketmanager Pakete auf dem Host aktualisieren lassen, werden die Pakete in den Containern nicht aktualisiert.
- Das erneute Generieren aller Container-Images zum Anwenden von Updates scheint die Trennung zwischen der Anwendung und der Plattform aufzuheben (das Aktualisieren der Plattform erfordert Zugriff auf den Anwendungserstellungsprozess, der die Docker-Images generiert).
- Das Ausführen manueller Befehle in jedem der ausgeführten Container ist mühsam und es besteht die Gefahr, dass Änderungen überschrieben werden, wenn Container das nächste Mal von den Artefakten der Anwendungsfreigabe aktualisiert werden.
Keiner dieser Ansätze scheint also zufriedenstellend zu sein.
docker pull debian/jessie
Aktualisieren Sie das Image, erstellen Sie die vorhandenen Images neu, halten Sie die Container an und führen Sie sie erneut aus ( mit dem neuen Bild). Die von mir erstellten Bilder haben denselben Namen wie die vorherigen, daher erfolgt der Start über das Skript. Ich entferne dann "unbenannte" Bilder. Ich würde mich sicher über einen besseren Workflow freuen.Antworten:
Ein Docker-Image bündelt Anwendung und "Plattform", das ist richtig. In der Regel besteht das Image jedoch aus einem Basisimage und der eigentlichen Anwendung.
Die kanonische Möglichkeit, mit Sicherheitsupdates umzugehen, besteht darin, das Basisimage zu aktualisieren und anschließend das Anwendungsimage neu zu erstellen.
quelle
Die Behälter sollen leicht und austauschbar sein. Wenn Ihr Container ein Sicherheitsproblem aufweist, erstellen Sie eine Version des Containers neu, die gepatcht ist, und stellen den neuen Container bereit. (Viele Container verwenden ein Standard-Basisimage, das Standard-Paketverwaltungstools wie apt-get verwendet, um ihre Abhängigkeiten zu installieren. Bei der Neuerstellung werden die Aktualisierungen aus den Repositorys abgerufen.)
Sie könnten zwar in Containern patchen, aber das wird nicht gut skalieren.
quelle
Dies wird in SUSE Enterprise Linux mithilfe von zypper-docker (1) automatisch erledigt.
SUSE / Zypper-Docker
Docker-Schnellstart
quelle
Erstens sind viele Ihrer Updates, die Sie in der Vergangenheit traditionell ausgeführt haben, einfach nicht im Container selbst enthalten. Der Container sollte eine relativ kompakte und kleine Teilmenge des gesamten Dateisystems sein, das Sie in der Vergangenheit gesehen haben. Die Pakete, die Sie aktualisieren müssen, sind Teil Ihrer DockerFile, und da Sie die DockerFile haben, sollten Sie in der Lage sein, die Pakete und Container-IDs zu verfolgen, die aktualisiert werden müssen. Cloudsteins Benutzeroberfläche, die in Kürze veröffentlicht wird, verfolgt diese DockerFile-Inhaltsstoffe für Sie, sodass Sie das für ihre Container am besten geeignete Aktualisierungsschema erstellen können. Hoffe das hilft
quelle
Es ist in der Regel sogar noch schlimmer als die drei von Ihnen bereitgestellten Optionen. Die meisten Docker-Images werden nicht mit Paket-Managern erstellt, daher können Sie das Docker-Image nicht einfach mit einer Shell versehen und ein Update ausgeben. Sie müssen das Docker-Image entweder neu erstellen oder neu erhalten.
In den meisten Fällen ist es unvernünftig, dass Sie für die Neuerstellung von Sicherheitspatches eine Neuerstellung durchführen müssen oder andere Personen beaufsichtigen.
Ich überlegte, Sonarr und Radarr in Docker-Containern einzusetzen, aber zu wissen, dass sie nicht die regelmäßigen Sicherheitsupdates erhalten, die mein Container erhält, ist ein Deal Breaker. Das Verwalten von Sicherheitsupdates für meinen Container ist ausreichend mühsam, ohne dass Sicherheitsupdates manuell auf jedes Docker-Image einzeln angewendet werden müssen.
quelle