Mehr als ein Anwender hat bereits eine unschöne Überraschung erlebt, wenn in einem öffentlichen Github-Repository die Zugangsdaten für einen wichtigen Server gelandet sind. Aus diesem Grund wird davon abgeraten, Passwort- und andere sensible Daten in Dateien zu hinterlegen. Dies gilt auch für Docker-Images, deren Build-Dateien (Dockerfiles) häufig Passwörter in Form von Umgebungsvariablen enthielten, die ein Container beim Start übergeben bekam. Eine Möglichkeit, zumindest einen Teil des Problems zu lösen, sind separate Dateien für Umgebungsvariablen, die in ein Docker-Compose-File mit der Anweisung "env_file" eingebunden werden.
Mit der Docker-Version 1.13 entstand eine bessere Lösung für das Problem: die sogenannten Secrets [1], die Docker eigenständig im Hintergrund verwaltet und soweit möglich verschlüsselt speichert und transportiert. Damit lassen sich Passwörter, Zertifikate und andere geheimzuhaltende Daten halbwegs sicher speichern und an Container weitergeben.
Secrets stehen nur im Swarm-Mode zur Verfügung, dem Betriebsmodus für Docker-Cluster. Allerdings ist es ja auch möglich, einzelne Container mit Swarm zu betreiben. Sie müssen dabei nur etwas umdenken und von einem Dienst mit einer Skalierung von 1 ausgehen statt von einem einzelnen Container. Dementsprechend passen Sie die Konfiguration des Containers in einem Compose-File als Service an. Im einfachsten Fall starten Sie den Swarm-Mode mit dem Befehl docker swarm init. Dieser Rechner ist dann der einzige Swarm-Manager und es gibt keine anderen Nodes. Ein Secret legen Sie dann mit dem folgende Befehl an (Bild 1):
$ echo T0pS3cret | docker secret create mysecret -
Mit dem Bindestrich liest der Befehl die Daten von der Standardeingabe, alternativ geben Sie hier eine Datei an. Ein Aufruf von docker secret ls zeigt, dass Docker das Secret gespeichert
...Der komplette Artikel ist nur für Abonnenten des ADMIN Archiv-Abos verfügbar.