Mise à jour automatiques des services Docker Swarm avec Shepherd

Il peut s’avérer utile pour certains services de reposer sur une image « up to date ». Pour cela, nous allons mettre en place le service Shepherd qui va automatiser ce processus de mise à jour.

Pour son fonctionnement, Shepherd utilise un certain nombre de variables d’environnement:

– SLEEP_TIME: par défaut, Shepherd recherche les mises à jour d’image toutes les 5 minutes. C’est un rythme un peu élevé à mon gout et je vais adopter une mise à jour toutes les heures en définissant la variable à « 60m »

– BLACKLIST_SERVICES: Shepherd ne fera pas la mise à jour des services définis dans cette variable d’environnement. Par exemple, la mise à jour de Plex en plein visionnage d’un film peut-être énervante. Pour l’instant, je vais black-lister le service « shepherd »

– IMAGE_AUTOCLEAN_LIMIT: Shepherd procèdera au nettoyage des anciennes images qui peuvent représenter une taille non négligeable. Je vais fixer la limite à « 5 »

– APPRISE_SIDECAR_URL: active un système de notifications lors de la mise à jour de services. Ce système de notification utilise le microservice « apprise ».

Nous allons maintenant ouvrir un terminal sur le manager de notre Docker Swarm et créer le service:

sudo docker service create --name shepherd \
                    --constraint "node.role==manager" \
                    --env SLEEP_TIME="60m" \
                    --env BLACKLIST_SERVICES="shepherd" \
                    --env WITH_REGISTRY_AUTH="true" \
                    --env WITH_INSECURE_REGISTRY="true" \
                    --env WITH_NO_RESOLVE_IMAGE="true" \
                    --env APPRISE_SIDECAR_URL="apprise-microservice:5000" \
                    --env IMAGE_AUTOCLEAN_LIMIT="5" \
                    --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock,ro \
                    mazzolino/shepherd