Main /

Docker Speicher

Docker Speicher

Docker Speicher (Verbrauch, Ort, Logs)

Docker frisst Speicher, ok bei 64bit gibt es heutzutage Speicher satt.

Aber um den Verbrauch etwas einzuschränken, gibt es eine Datei im Docker Environment /etc/docker/daemon.json die nicht jeder auf dem Schirm hat. Und die per Default meist nicht dabei ist.

Das ist eine simple JSON-Datei. Hier zeige ich nur ein paar Einstellungen, die einem das Leben leichter machen sollten. Wer mehr darüber wissen möchte, mag die längliche Docker-Dokumentation zu Rate ziehen.

Speicher-Ort, wo Docker seine Images ablegt

 "data-root": "/var/lib/docker"

Dieser Ort kann beliebig verschoben werden, dorthin, wo gerade viel Platz ist. Heutzutage haben viele eine SSD, die evtl. nicht groß genug ist um mal eben etliche GB von Docker aufzunehmen. Diese enthält das Root-System, damit sich das System schnell anfühlt.

Sollte Docker gerade laufen, alle Container runterfahren, den Docker Service stoppen, den Ort anpassen, alles was in dem alten Verzeichnis ist in das neue Verzeichnis verschieben, Docker Service neu startet und evtl. die Container wieder hoch fahren. Nagelt mich nicht fest, habe es selbst noch nicht probiert.

Speicher beschränken

Sollte ein Java-Service in Docker ausgeführt werden, sollte man tunlichst dessen Speicher verbrauch beschränken mittels -Xmx und -Xms Parameter Stackoverflow Artikel zu den Parametern

Java hat nämlich die Angewohnheit so viel Speicher an sich zu ziehen, wie das System ihm bietet und Docker gibt im halt alles. Und das sollte man tunlichst verhindern/einschränken.

Speicher für Logs beschränken

 "log-driver": "json-file",
 "log-opts": {
    "max-size":"100m",
    "max-file":"2"
 }

Einer Konvention zu Folge soll der Output von Services, wenn diese im Docker Container laufen nach Stdout/Stderr geschrieben werden. Das landet im Docker dann in einer Log-Datei innerhalb von "data-root" (siehe oben) /var/lib/docker/containers/<uuid>/<uuid>-json.log. Sollte der Service viel Output erzeugen, kann das über die Zeit schnell in die GB gehen. Docker hat hier per default keine Einschränkung, diese muss man selbst setzen. Hier im Beispiel mal 100m(egabyte) und max. 2 Dateien. Das geschieht mit Docker-like logrotate. Leider wird die rotatierende Log-Datei nicht komprimiert. (Stand Docker version 18.03)

TL;DR

Der Inhalt meiner /etc/docker/daemon.json einmal komplett, um den Speicherverbrauch/Ort zu manipulieren.

 {
   "data-root": "/data/docker",
   "log-driver": "json-file",
   "log-opts": {
     "max-size":"100m",
     "max-file":"2"
   }
 }

Wer mehr Logs braucht, sollte über einen ELK-Stack nachdenken. Elasticsearch, Logstach, Kibana, Filebeat, ... Aber das ist ein anderes Thema.

Frische Änderungen | Menü editieren
zuletzt geändert am 26.05.2020 09:55 Uhr von Lars
Edit Page | Page History