Inhaltsverzeichnis
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.