Vorausgesetzt, Sie haben einen Dienst myapp
und eine Geheimdatei secrets.yml
:
Erstellen Sie eine Erstellungsdatei:
version: '3.1'
services:
myapp:
build: .
secrets:
secrets_yaml
Stellen Sie mit diesem Befehl ein Geheimnis bereit:
docker secret create secrets_yaml secrets.yml
Stellen Sie Ihren Dienst mit diesem Befehl bereit:
docker deploy --compose-file docker-compose.yml myappstack
Jetzt kann Ihre App unter auf die geheime Datei zugreifen /run/secrets/secrets_yaml
. Sie können diesen Pfad entweder in Ihrer Anwendung fest codieren oder einen symbolischen Link erstellen.
Die andere Frage
Diese Antwort bezieht sich wahrscheinlich auf die Frage "Wie stellen Sie Ihre Geheimnisse Ihrem Docker-Schwarm-Cluster zur Verfügung?".
Die ursprüngliche Frage "Wie verwalten Sie geheime Werte mit Docker Compose?" Impliziert, dass die Docker-Compose-Datei geheime Werte enthält. Das tut es nicht.
Es gibt eine andere Frage: "Wo speichern Sie die kanonische Quelle der secrets.yml
Datei?" Es liegt an dir. Sie können es in Ihrem Kopf speichern, auf ein Blatt Papier drucken, einen Passwort-Manager verwenden und eine spezielle Geheimdienstanwendung / Datenbank verwenden. Sie können sogar ein Git-Repository verwenden, wenn es selbst sicher gesichert ist. Speichern Sie es natürlich niemals in dem System, das Sie damit sichern :)
Ich würde Tresor empfehlen . So speichern Sie ein Geheimnis:
# create a temporary secret file
cat secrets.yml | vault write secret/myappsecrets -
So holen Sie ein Geheimnis ab und legen es in Ihren Hafenschwarm:
vault read -field=value secret/myappsecrets | docker secret create secrets_yaml -
Natürlich können Sie Docker-Cluster selbst als eine einzige Quelle der Wahrheit für Ihre Geheimnisse verwenden, aber wenn Ihr Docker-Cluster kaputt geht, haben Sie Ihre Geheimnisse verloren. Stellen Sie also sicher, dass Sie an anderer Stelle ein Backup haben.
Die Frage, die niemand gestellt hat
Die dritte Frage (die niemand gestellt hat) ist, wie Geheimnisse für die Maschinen der Entwickler bereitgestellt werden können. Dies kann erforderlich sein, wenn es einen externen Dienst gibt, der lokal nicht verspottet werden kann, oder eine große Datenbank, die nicht kopiert werden kann.
Auch hier hat Docker (noch) nichts damit zu tun. Es gibt keine Zugriffssteuerungslisten, die angeben, welche Entwickler auf welche Geheimnisse zugreifen können. Es gibt auch keinen Authentifizierungsmechanismus.
Die ideale Lösung scheint folgende zu sein:
- Ein Entwickler öffnet eine Webanwendung.
- Authentifiziert sich mithilfe eines Single Sign-On-Mechanismus.
- Kopiert eine lange Liste von
docker secret create
Befehlen und führt sie im Terminal aus.
Wir müssen noch sehen, ob eine solche Anwendung auftaucht.
docker-compose
dass Sie bereits Geheimnisse unterstützen? Welchedocker-compose
Version laufen Sie?