Docker Configs
Das wohl dümmste Feature im Docker Swarm (erst recht wenn man das Kubernets Pendant dazu kennt):
Die Idee liest sich super, die Einbindung auch. Sogar direkt ins Stack Compose File🖹.
Der Grundgedanke: Eine Konfiguration, z.B. ein Konfig-File, wird nicht in ein Volume gelegt oder direkt in das Container Image eingebaut, sondern liegt in einem "Config Object" irgendwo im Swarm. Alle Container können dieses dann direkt nutzen, da die Datei ganz normal als Datei in den Conainer gemounted wird.
Bis dahin nützlich.
Nun ist die IT-Welt nicht dafür bekannt, dauerhaft etwas unverändert zu lassen. Vor allem keine Konfigurationen und deren Dateien. Es liegt ja schon in der Natur von Konfigurationsdateien, dass sie verändertlich sind - ansonsten wären die Werte fest in einem Programm eingebaut.
Leider hat Docker Configs das nicht mitbekommen. Eine einmal erzeugte Docker Config ist unverändertlich. Man kann sie nur löschen.
Und damit nicht genug: Sie lassen sich auch wunderbar in einem docker stack einbauen. Direkt ins YAML kann man auf eine Datei verweisen, die dann die Docker Config Magie in einen Container mounted.
Aber auch das geht nur solange, wie die Datei nicht verändert wird: Ändert man die Datei und lässt den stack dann einfach nochmal starten, also ohne ihn zu stoppen, weil das wäre ja ansonsten ein Ausfall der Services, verweigert sich der Stack - weil ja die Config böserweise verändert wurde. What?!
Workaround: Stack stoppen und neu starten. Super! Da ist es dann doch besser, die Datei in ein Volume zu legen oder gleich in das Image zu bauen und per Stack ein rolling Update zu starten. Das geht dann sogar ohne Ausfall.
Docker Configs: nutzlos! Bitte löschen!
Btw: Da gibt es tolle Ideen mit Workarounds, bei denen über Variablen der Name des Docker Configs hochgezählt wird, so dass man so um das Update herum kommt. Dann hat man halt am Ende hunderte von Config-Objekten im System. Neustarten muss man das Image ja aber trotzdem. Und dazu dann irgendwie die Variable in Stack-File und dafür sorgen, dass diese auch verändert wird. Da ist ein docker build und docker push aber einfacher. Oder eben das File auf ein Volume kopieren.