Benutzer-Werkzeuge

Webseiten-Werkzeuge


infrastruktur:rz:docker:best-practices

Best Practices Docker Images

Versionen

Version Bearbeiter Änderungsdatum Änderungsbemerkung
0.1 hase 11-09-2020 Seite angelegt
0.2 hase 12-09-2020 Resourcenplanung/ Netzwerkmode / Git Secret
0.3 hase 12-09-2020 Trennung nach Compose File und Docker Image

Best Practices für Docker Images im shack

Hi, hier sollen alle Best Practices für shack Docker Images oder Compose Files aufgeschrieben werden.

Compose Files

Must-Haves

Healthcheck

Ein Docker Container sollte einen Healthcheck definiert haben. Siehe hierzu

Resourcenplanung

Ein Docker Container sollte immer eine Begrenzung der CPU und RAM Resourcen bekommen. Ohne Resourcensteuerung werden dem Container alle CPUs und jeglicher RAM angezeigt; diesen kann er dann auch allokieren (z.B. bei einem Memory Leak wird er das tun)

services:
  autoheal:
    cpu_count: 1
    mem_limit: 256m

Passwörter / Secrets

Passwörter müssen in ein zweites Compose File (docker-compose.secret.yml) eingetragen und mit

git secret hide

vor git versteckt werden.

Siehe dazu auch die allgemeine Anleitung zu Git Secrets unter …

Optional

Container ohne Netzwerk

Wenn ein Container kein Netzwerk braucht (watchtower oder autoheal) kann mit Hilfe des Parameters network_mode das Netzwerk ausgeschaltet werden. Dann wird kein „containername_default“ Netzwerk angelegt.

services:
  autoheal:
    network_mode: "none"

Docker Image

Must-Haves

docker-compose Example File

Es muss ein docker-compose.yml Beispiel existieren.

Externe Abhängigkeiten

Wenn ein Container eine externe Abhängigkeit hat darf diese nicht hart ausgelegt sein. Crashed der Container in Abwesenheit der Abhängigkeit muss das Design überarbeitet werden.

Optional

Registry

Die Docker Images sollten alle unter einem Ort verfügbar sein. Momentan existiert eine Gruppe auf gitlab.com https://gitlab.com/shackspace/docker-images

CI

Die Docker Images sollten alle über eine CI Pipeline automatisch über Gitlab Runner gebaut werden. In jedem Git Repo für ein Docker Image muss daher eine .gitlab-ci.yml vorhanden sein.

Service-Handling

Das Service-Handling in Containern kann über viele Wege abgehandelt werden. Empfohlen ist als Entrypoint entweder

  • direkt den Befehlsaufruf mit Parametern oder
  • ein Shell-Skript, welches unter /entrypoint.sh auffindbar sein soll.
infrastruktur/rz/docker/best-practices.txt · Zuletzt geändert: 2020-09-18 21:08 von hase