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