So ändern Sie die Konfiguration von ausgeführten Docker-Containern

0
1428

Docker-Container werden normalerweise als unveränderlich behandelt, sobald sie gestartet wurden . Sie können jedoch einige Konfigurationsparameter dynamisch aktualisieren, z. B. den Namen des Containers und seine Hardwareressourcenbeschränkungen.

In diesem Handbuch zeigen wir Ihnen, wie Sie integrierte Docker-Befehle verwenden um ausgewählte Parameter von laufenden Containern zu ändern. Wir werden uns auch ansehen, was Sie nicht ändern sollten und eine Problemumgehung, die Sie verwenden können, wenn Sie glauben, dass Sie müssen.

Umbenennen eines Containers

Die einfachste Änderung besteht darin, einen erstellten Container umzubenennen. Namen werden über das Flag –name für den Docker-Lauf zugewiesen. Wenn kein Name angegeben wird, weist der Docker-Daemon einen zufälligen Namen zu. Sie können Namen verwenden, um Container in Docker-CLI-Befehlen zu referenzieren. Durch die Auswahl eines geeigneten einprägsamen Namens wird vermieden, dass docker ps ausgeführt wird, um den automatisch zugewiesenen Namen oder die ID eines Containers zu finden.

Der Befehl docker rename wird verwendet, um Containernamen nach der Erstellung zu ändern. Es braucht zwei Argumente, die ID oder den aktuellen Namen des Zielcontainers und den neuen Namen, der zugewiesen werden soll:

# docker rename <Ziel-ID oder Name> <neuer Name> docker rename old_name new_name

Ändern der Neustartrichtlinie

Neustartrichtlinien legen fest, ob Container nach dem Neustart Ihres Hosts oder dem Start des Docker-Daemons automatisch gestartet werden sollen. Mit den vier verfügbaren Richtlinien können Sie das Starten des Containers erzwingen, ihn anhalten lassen oder bedingt starten, basierend auf dem vorherigen Exit-Code oder Ausführungsstatus des Containers.

Werbung

Docker unterstützt das spontane Ändern von Neustartrichtlinien. Dies ist nützlich, wenn Sie Ihren Host oder den Docker-Daemon neu starten möchten und möchten, dass ein bestimmter Container gestoppt bleibt – oder automatisch starten – nach dem bestimmten Ereignis.

docker update –restart without-stopped demo_container

Das obige Beispiel ändert die Neustart-Policy von demo_container auf else-stopped. Diese Richtlinie lässt den Container mit dem Daemon starten, es sei denn, er wurde manuell gestoppt, bevor der Daemon das letzte Mal beendet wurde.

Ändern von Hardwareressourcenlimits

Der Befehl docker update kann auch verwendet werden, um die auf Container angewendeten Ressourcengrenzen zu ändern. Sie müssen eine oder mehrere Container-IDs oder -Namen zusammen mit einer Liste von Flags übergeben, die die Grenzwerte für diese Container definieren.

Flags sind für alle Ressourcenlimits verfügbar, die von Docker Run unterstützt werden. Hier ist eine komprimierte Liste der Optionen, die Sie verwenden können:

  • –blkio-weight – Ändern Sie die relative Gewichtung der Block-IO des Containers.
  • –cpus – Legen Sie die Anzahl der für den Container verfügbaren CPUs fest.
  • –cpu-shares– Legen Sie die relative Gewichtung des CPU-Anteils fest.
  • –memory – Ändern Sie das Speicherlimit des Containers (z. B. 1024 M).
  • –memory-swap – Konfigurieren Sie die Speichermenge, die der Container auf die Festplatte auslagern kann; Verwenden Sie eine Größe wie 1024 M, um ein bestimmtes Limit festzulegen, oder -1 für unbegrenzten Austausch.
  • –kernel-memory – Ändern Sie das Kernel-Speicherlimit des Containers. Container, denen der Kernel-Speicher fehlt, können sich negativ auf andere Workloads auf dem Host-Rechner auswirken.
  • –pids-limit – Konfigurieren Sie die maximale Anzahl von Prozess-IDs, die innerhalb des Containers zulässig sind, und begrenzen Sie die Anzahl der Prozesse, die gestartet werden können.

Hier ein Beispiel für die Verwendung von Docker Update zum Ändern des Speicherlimits und CPU-Anzahl für zwei Ihrer Container:

docker update –cpus 4 –memory 1024M first_container second_container

Alle verfügbaren Flags außer –kernel-memory können mit laufenden Linux-Containern verwendet werden. Um das Kernel-Speicherlimit zu ändern, müssen Sie den Container zuerst mit docker stop stoppen.

Werbung

Beachten Sie, dass keines dieser Flags derzeit für Windows-basierte Container unterstützt wird. Sie funktionieren jedoch mit Linux-Containern, die auf einem Windows-Hostcomputer ausgeführt werden.

Wann sollten diese Befehle nicht verwendet werden?

Die Befehle docker update und docker rename sollten mit Containern verwendet werden, die Sie manuell über docker run erstellt haben. Seien Sie vorsichtig, wenn Sie sie mit Containern verwenden, die von anderen Tools wie docker-compose stammen.

Das Ändern des Namens eines Containers kann dazu führen, dass er vom Quelltool nicht erkannt wird und möglicherweise andere Komponenten Ihres Stapels beschädigt werden. Wenn Sie außerdem Ressourcengrenzen deklarativ in einer docker-compose.yml-Datei definieren, werden diese ursprünglichen Grenzen durch erneutes Ausführen des Befehls docker-compose up wieder auf Ihren Container angewendet.

Daher sollten Sie bei Ihrer bestehenden Container-Management-Lösung bleiben, falls Sie eine verwenden. Für Compose bedeutet dies, dass Sie Containernamen und Ressourcengrenzen in Ihrer docker-compose.yml-Datei ändern und dann docker-compose up -d ausführen, um die Änderung automatisch anzuwenden. Dadurch wird sichergestellt, dass Container nicht unbeabsichtigt verwaisen oder unbeabsichtigte Nebenwirkungen verursachen.

Was ist mit anderen Eigenschaften (Image/Ports/Volumen)?

Hardwarelimits, Ressourcenrichtlinien und Containernamen sind die einzigen Konfigurationsparameter, die Sie mit der Docker-CLI ändern können. Sie können das Image eines laufenden Containers nicht ändern. Sie können auch keine anderen Optionen wie Portbindungen und Volumes einfach ändern.

Sie sollten einen anderen Container erstellen, wenn diese Werte veraltet sind. Zerstöre deine aktuelle Instanz und verwende Docker Run, um eine Ersetzung mit deinem neuen Image und den korrigierten Einstellungen zu starten.

Werbung

Da Container zustandslos und kurzlebig sein sollen, sollten Sie sie jederzeit ersetzen können. Verwenden Sie Volumes, um persistente Containerdaten zu speichern; Mit diesem Mechanismus können Sie zustandsbehaftete Dateien erneut an den neuen Container anhängen, indem Sie die -v Flags wiederholen, die an den ursprünglichen docker run-Befehl übergeben wurden:

docker run -v config-volume:/usr/lib/config –name demo example-image :v1 docker rm demo # Vorhandene Daten in /usr/lib/config behalten docker run -v config-volume:/usr/lib/config –name demo2 example-image:v2

Gefahrenzone: Andere Containereigenschaften ändern

Obwohl Sie Container nach Möglichkeit ersetzen sollten, ist es möglich, die Eigenschaften vorhandener Container zu ändern, indem Sie die Konfigurationsdateien von Docker direkt bearbeiten. Seien Sie vorsichtig, wenn Sie diese Methode verwenden: Sie wird vollständig nicht unterstützt und eine falsch platzierte Änderung könnte Ihren Container beschädigen.

Diese Option bietet zwar eine Möglichkeit, vorhandene Container willkürlich zu bearbeiten, funktioniert jedoch nicht, solange sie laufen. Verwenden Sie den Befehl docker stop my-container, um den Container zu stoppen, den Sie bearbeiten möchten, und fahren Sie dann mit Ihren Änderungen fort.

Container-Konfigurationsdateien haben den folgenden Pfad auf Ihrem Host:

/var/lib/docker/containers/<container id>/config.v2.json

Sie müssen die vollständige ID des Containers kennen , nicht die verkürzte Version, die von docker ps angezeigt wird. Sie können den Befehl docker inspect verwenden, um dies abzurufen:

docker inspect <short id or name> | jq | grep-ID

Sobald Sie die config.v2.json eines Containers erreicht haben, können Sie ihn in einem Texteditor öffnen, um erforderliche Änderungen vorzunehmen. Der JSON speichert die Containerkonfiguration, die beim Ausführen von docker run erstellt wurde. Sie können den Inhalt ändern, um Eigenschaften wie Portbindungen, Umgebungsvariablen, Volumes und den Container-Einstiegspunkt und Befehl zu ändern.

Werbung

Um eine Portbindung hinzuzufügen, suchen Sie den PortBindings-Schlüssel in der Datei, dann fügen Sie ein neues Element in das Objekt ein:

{ “PortBindings”: { “80/tcp”: { “HostIp”: “”, “HostPort”: “8080” } } }

Hier ist Port 80 im Container an Port 8080 auf dem Host gebunden. Es ist ähnlich einfach, Umgebungsvariablen hinzuzufügen – Suchen Sie den Env-Schlüssel und fügen Sie dann neue Elemente in das Array ein:

{ “Env”: [ “FOO=bar”, “CUSTOM_VARIABLE=example” ] }

Wenn Sie mit der Bearbeitung fertig sind, starten Sie den . neu Docker-Dienst und Ihr Container:

sudo service docker restart docker start my-container

Der Container wird nun mit seiner aktualisierten Konfiguration ausgeführt.

Schlussfolgerung

< p>Docker-Container sind als kurzlebige Einheiten gedacht, die Sie ersetzen, wenn ihre Konfiguration veraltet ist. Trotz dieser Absicht gibt es Szenarien, in denen es erforderlich ist, einen vorhandenen Container zu ändern. Docker behandelt die häufigsten Anwendungsfälle – Namensänderungen und Anpassungen der Ressourcengrenzen in Echtzeit – über integrierte CLI-Befehle wie docker update.

Wenn Sie eine andere Eigenschaft ändern möchten, versuchen Sie immer zuerst, den Container zu ersetzen. Dies minimiert das Risiko, Dinge zu beschädigen, und entspricht dem Docker-Modell der Unveränderlichkeit. Wenn Sie in eine Situation geraten, in der ein vorhandener Container bearbeitet werden muss, können Sie die internen Konfigurationsdateien von Docker wie oben beschrieben manuell ändern.

Denken Sie zum Schluss daran, dass Container von anderen Ökosystem-Tools verwaltet werden wie Docker Compose sollten mit diesen Mechanismen modifiziert werden. Andernfalls werden Container möglicherweise unerwartet verwaist oder überschrieben, wenn das Tool die von Ihnen vorgenommenen Änderungen nicht erkennt.