Secret

Qu’est-ce qu’un secret et pourquoi en auriez-vous besoin ?

Docker Secret permet de partager des informations sensibles entre services d’un cluster Swarm.

Ces infos sensibles sont des infos qui n’ont rien à faire dans des Dockerfiles ou des docker-compose.yml, et qui ne doivent surtout pas être posées sur des dépôts Git.

  • Logins/Phrases de passe
  • Certificats TLS
  • Clés TLS, SSH, GPG, Tokens d’APIs
  • Infos sensibles : Noms des serveurs, des bases de données, …

Créer et partager un secret

A la base, le secret peut être écrit dans un fichier ou venir de la sortie standard :

# Commande générique
docker secret create <nom> [fichier|-]
# Secret venant de la sortie standard
echo "Je mange des oignons crus" |docker secret create miam -
# Secret venant d'un fichier
docker secret create miam /tmp/mon-secret-gastronomique

Quand vous créez un service, vous pouvez lui partager ce secret qu’il récupèrera dans /run/secrets/miam :

docker service create --name salade-web --secret miam nginx:latest
docker service create --name salade-db --secret miam mariadb:latest

Déclarer les secrets dans un fichier Docker-Compose

Avec un fichier docker-compose, ça donne ceci :

version: "3.7"

services:

  salade-web:
    image: nginx:latest
    deploy:
      replicas: 1
    secrets:
      - miam
       
secrets:
  miam:
    file: /tmp/mon-secret-gastronomique

Dans ce cas aussi, les secrets vont atterrir dans /run/secrets/.

Pour aller plus loin, vous pouvez lire la documentation officielle de secret.