Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Best Practices
Versionen
Version | Bearbeiter | Änderungsdatum | Änderungsbemerkung |
0.1 | hase | 11-09-2020 | Seite angelegt |
0.2 | hase | 12-09-2020 | Resourcenplanung/ Netzwerkmode / Git Secret |
Best Practices für Docker Images im shack
Hi, hier sollen alle Best Practices für shack Docker Images aufgeschrieben werden.
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 …
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
docker-compose Example File
Es muss ein docker-compose.yml Beispiel existieren.
Optional
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.
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.
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"