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.