Anwendungsaktualisierungen in Docker-Containern?

9

In der Regel werden auf einem Server automatische Updates sicherheitsrelevanter Patches konfiguriert. Wenn ich MySQL 5.5 ausführe und ein neuer Sicherheitspatch veröffentlicht wird, wendet Ubuntu Server das Upgrade an und startet MySQL neu, um mich automatisch zu schützen. Natürlich kann dies deaktiviert werden, aber es ist hilfreich für diejenigen von uns, die ein bisschen faul sind;)

Gibt es ein solches Konzept in einem Docker-Container? Wenn ich MySQL in einem Docker-Container ausführe, muss ich den Container ständig stoppen, eine Shell darin öffnen und dann MySQL aktualisieren und aktualisieren?

Naftuli Kay
quelle
Dies ist Docker und keine LXC-Frage. Da LXC-Container selbst nur eine weitere Linux-Distribution sind, die unter demselben Kernel ausgeführt wird, würden Sie nur dieselben Befehle verwenden, um das LXC-Containersystem zu aktualisieren.
Phoops

Antworten:

13

Ich bin mit der akzeptierten Antwort nicht einverstanden. Zunächst sollten Sie Ihre Container unter Berücksichtigung der Trennung des Zustands entwerfen (im Fall von MySQL bedeutet dies, dass zumindest /var/lib/mysqlein eigenes Volume vorhanden ist ). Zweitens sollten Sie eine Strategie für Upgrades festlegen. Stand der Technik wäre es, versionierte Images für jeden Satz von apt-Paket-Upgrades zu erstellen und diese testen zu lassen, bevor das Datenvolumen vom laufenden Container auf einen neuen umgestellt wird. Dies kann entweder eine Ausfallzeit oder gar keine Ausfallzeit beinhalten, wenn Sie so etwas wie Hipache verwenden .

Diese Einrichtung ist zwar teurer als die anfängliche Einrichtung, wird jedoch von Unternehmen mit einer großen Anzahl von Containern verwendet und ist im Laufe der Zeit billiger zu warten.

Darüber hinaus können Paket-Upgrades Ihre laufenden Container beschädigen. Daher ist es keine bewährte Methode, sie auf laufende Container anzuwenden, da keine veraltete Software ausgeführt werden soll.

Deim0s
quelle
+1 Dies ist eine bewährte Methode. Das Speichern von Daten auf einem Servercontainer erfordert nur Probleme.
Booyaa
4

TL; DR : Wenn Sie es nicht in sich selbst bauen, wird es nicht passieren.

Der effektive Weg, dies zu tun, besteht darin, einfach ein benutzerdefiniertes Startskript für Ihren Container zu schreiben, das CMDin Ihrem angegeben ist Dockerfile. Führen apt-get update && apt-get upgrade -qqySie in dieser Datei ein aus, bevor Sie das starten, was Sie gerade ausführen .

Sie haben dann einige Möglichkeiten, um sicherzustellen, dass Aktualisierungen in den Container gelangen:

  1. Definieren Sie einen Cron-Job in Ihrem Host-Betriebssystem, um den Container nach einem Zeitplan neu zu starten und ihn nach einem Zeitplan aktualisieren und aktualisieren zu lassen.
  2. Abonnieren Sie Sicherheitsupdates für die Software und starten Sie den Container beim Aktualisieren eines betroffenen Pakets neu.

Es ist nicht die einfachste Sache zu optimieren und zu automatisieren, aber es ist möglich.

Naftuli Kay
quelle
1
Lesen Sie die Seite weiter. deim0s hat eine bessere Antwort.
mc0e