GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So halten Sie Docker-Container am Laufen, wenn der Daemon stoppt

Wenn Docker beendet wird, werden alle Ihre Container gestoppt. Die Standardinstallation lässt keine Container laufen, es sei denn, der Daemon ist ebenfalls aktiv. So minimieren Sie die Workload-Ausfallzeit, indem Sie Container während eines Daemon-Ausfalls am Leben erhalten.

Warum ist das wichtig?

Docker hat sich als zuverlässiges System erwiesen, das Lösungen in der Produktion unterstützen kann. Das heißt nicht, dass es unfehlbar ist. Es kann immer noch zu einem Absturz kommen, der den Daemon außer Gefecht setzt und Ihre Container offline nimmt.

In einem anderen Szenario aktualisiert der Paketmanager Ihres Betriebssystems Docker möglicherweise automatisch, was zu einem Neustart des Daemons und einer kurzen Ausfallzeit führt. Im Idealfall könnten diese Situationen ohne Auswirkungen auf Ihre Workloads gelöst werden. Da der Daemon nur verwaltet Container, die Befehle wie docker run implementieren und docker rm , ist es nicht unbedingt erforderlich, dass es die dazwischen liegenden Zeiträume im Lebenszyklus eines Containers überdauert.

Container-Live-Wiederherstellung

Docker unterstützt ein System namens „Live Restore“, das dies ermöglicht. Anstatt Container während des Herunterfahrens des Daemons zu beenden, hält Docker sie am Laufen. Es macht dort weiter, wo es nach dem Neustart aufgehört hat.

Die Live-Wiederherstellung muss manuell aktiviert werden. Sie können es einmalig verwenden, indem Sie dockerd ausführen mit dem --live-restore flag :

sudo dockerd --live-restore

Um die Live-Wiederherstellung dauerhaft zu aktivieren, fügen Sie sie Ihrer Docker-Daemon-Konfigurationsdatei hinzu. Diese befindet sich normalerweise unter /etc/docker/daemon.json . Sie müssen die Datei erstellen, falls sie noch nicht vorhanden ist.

{
    "live-restore": true
}

Als nächstes müssen Sie Docker anweisen, seine Konfiguration neu zu laden. Ein Neuladen wirkt sich im Gegensatz zu einem vollständigen Daemon-Neustart nicht auf Ihre Container aus.

sudo systemctl reload docker

Die Live-Wiederherstellung sollte jetzt aktiviert sein. Sie können es testen, indem Sie den Docker-Daemon stoppen.

sudo systemctl stop docker

Alle laufenden Container sollten aktiv bleiben, auch wenn der Daemon heruntergefahren wird. Sie können docker nicht verwenden Befehle, da die Daemon-Verbindung weg ist, aber die Container weiterlaufen und ihre Netzwerkverbindungen beibehalten.

Docker erkennt die vorhandenen Container automatisch, wenn es neu gestartet wird. Sie können dort weitermachen, wo Sie aufgehört haben, ohne Ausfallzeiten zu erleiden.

Handhabung anhaltender Ausführung ohne Daemon

Das Ausführen von Containern ohne aktive Daemon-Verbindung sollte auch über einen längeren Zeitraum keine schwerwiegenden Folgen haben. Sie werden jedoch feststellen, dass Protokolle während eines längeren Daemon-Ausfalls verloren gehen.

Docker-Container leiten ihre Protokolle in einen First-In-First-Out-Puffer (FIFO). Der Docker-Daemon liest den Pufferinhalt, um die persistenten Protokolldateien zu erstellen, die Sie mit docker logs anzeigen .

Die Standardpuffergröße beträgt nur 64 KB, sodass sie erschöpft sein kann, wenn der Daemon seinen Inhalt nicht aktiv liest. Wenn sich der Puffer füllt, können keine weiteren Protokolle verarbeitet werden, bis der Daemon eine Pufferleerung abgeschlossen hat. Sie können die Puffergröße erhöhen, indem Sie den Wert von /proc/sys/fs/pipe-max-size bearbeiten .

Warnhinweise zur Live-Wiederherstellung

Die Live-Wiederherstellung sollte die meisten Szenarien abdecken, in denen der Docker-Daemon heruntergefahren und später wiederhergestellt wird. Dies schließt Docker-Updates ein, jedoch nur zwischen kleineren Patch-Veröffentlichungen. Wenn Sie eine neue Hauptversion von Docker installieren (z. B. 19.03 bis 20.10 ), Live Restore wird nicht verwendet und der Docker-Daemon wird immer neu gestartet.

Sie sollten sich davor hüten, Live Restore als Möglichkeit zu verwenden, Docker-Daemon-Einstellungen im Handumdrehen zu bearbeiten. Das Ändern einiger Optionen, wie z. B. Bridge-IP-Adressen, verhindert, dass Container ordnungsgemäß wiederhergestellt werden, wenn der Daemon neu gestartet wird. In diesem Fall müssen Sie alle betroffenen Container manuell stoppen und durch neue ersetzen. Diese Situation kann auch auftreten, wenn Ihr Betriebssystem nach einem Neustart eine andere Netzwerkkonfiguration zuweist.

Live Restore ist für die Verwendung während Docker-Updates und ungeplanten Daemon-Ausfällen vorgesehen. Wenn Sie Daemon-Einstellungen bearbeiten müssen, versuchen Sie stattdessen, Ausfallzeiten einzuplanen. Sie können auch systemctl reload docker verwenden um Konfigurationsdateien neu zu laden, ohne den Daemon komplett neu zu starten.

Es gibt noch keine Live-Wiederherstellung für Windows-basierte Container. Sie können Verwenden Sie die Live-Wiederherstellung ein Windows mit Linux-basierten Containern. Es ist in Docker Desktop integriert und wird über Einstellungen> Daemon> Erweitert aktiviert.

Schlussfolgerung

Mit Live Restore können Sie störende Ausfallzeiten minimieren, indem Container in Abwesenheit des Docker-Daemons weiterlaufen. Wenn Sie ein dringendes Docker-Update installieren müssen oder einen überraschenden Absturz erleiden, sollten Ihre Workloads betriebsbereit bleiben, während der Daemon neu gestartet wird.

Die Aktivierung der Live-Wiederherstellung ist ein bewährter Schritt beim Ausführen von Docker in der Produktion. Tools zur Konfigurationsanalyse können Installationen kennzeichnen, bei denen dies nicht aktiviert ist.

Neben der Verwendung von Live Restore sollten Sie sicherstellen, dass Ihre Container auch über geeignete Neustartrichtlinien verfügen. Verwendung von restart: always bewirkt, dass einzelne Container nach einem Neustart des Betriebssystems oder einem anderen Daemon-Start, bei dem Live Restore nicht verwendet werden konnte, wiederhergestellt werden.


Docker
  1. So aktualisieren Sie laufende Docker-Container automatisch

  2. So verwenden Sie Docker Compose

  3. So verbinden Sie Docker-Container

  4. So führen Sie einen Befehl in einem laufenden Docker-Container aus

  5. Wie wird der Hostname für den laufenden Container angegeben?

So aktualisieren Sie Docker-Container automatisch beim Aktualisieren von Docker-Web-Apps

So führen Sie Docker-Container aus

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So benennen oder umbenennen Sie Docker-Container

So konfigurieren Sie Netzwerk-Namespaces in Docker-Containern