====== Best Practices Docker Images ====== {{tag> storage-server infrastructure shackoperations }} ====== 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 - [[https://docs.docker.com/compose/compose-file/#healthcheck|Compose Reference Healthcheck]] - [[https://gitlab.com/shackspace/docker-images/dnsmasq-resolver/-/blob/master/docker-compose-example.yml|dnsmasq resolver with healthcheck in compose file]] ==== 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.