Lorsqu’on dispose d’un VPS Linux actif en ligne 24/7, et que l’on fait tourner dessus moulte services docker ou docker compose, se pose la question du maintien à jour de ces images et services.
En effet, de nombreuses images docker font l’objet d’un MCO dynamique de la part des équipes qui les maintiennent. Du coup, les questions légitimes à se poser pour son VPS sont :
- Quelles sont mes images qui font l’objet d’une mise à jour ?
- Comment minimiser l’énergie que ces mises à jour vont me prendre (surtout si l’on a plusieurs VPS) ?
- Comment purger automatiquement les anciennes images qui sont toujours sur le disque mais qui ne servent plus ?
- Comment minimiser le délai de perte de services pendant ces maintenances ?
En amont de ces questions il y en a une plus fondamentale encore, mais hors scope de cet article, dois-je effectuer les mises à jour ? Il n’est en effet pas rare qu’une mise à jour d’image docker amène des régressions, voire casse carrément la prod. Ce problème s’adresse normalement par des tests préalables en environnement de pré-prod.
Quel outil choisir pour le MCO des images et conteneurs ?
On peut utiliser le classique WatchTower, ou What’s up docker (WUD), mais je préfère utiliser Tugtainer.
Son principe est simple : on fait tourner sur le VPS un agent Tugtainer sous forme de conteneur docker, et un client web également en conteneur docker sur la machine distante qu’on utilise pour la maintenance du VPS (un laptop par exemple).
Sur l’interface web du laptop on déclare comme machine l’agent distant qui tourne sur tous les VPS qu’on veut maintenir. Depuis cette interface web laptop on peut alors demander à chacun des agents Tugtainer distants de réaliser seul les tâches fondamentales suivantes :
- Nous dire quelles sont les images docker qui disposent d’une mise à jour à télécharger (individuellement ou pour toutes les images du VPS)
- Mettre à jour les images docker disposant d’une mise à jour à télécharger, individuellement ou pour toutes les images du VPS, en arrêtant et relançant les services sur les nouvelles images tout en optimisant le délai d’arrêt du service
- Purger toutes les images docker du VPS devenues inutiles
Avec un tel outil, il n’y a presque plus besoin de se connecter à la mano au VPS pour y faire ces travaux. Presque car Tugtainer ne sait pas mettre à jour … Tugtainer ! (Pour tugtainer lui-même, et ses agents, il faudra se connecter et le faire à la mano. Mais il est capable de nous dire si des mises à jour de ces images sont disponibles).
Tugtainer est un outil performant qui est régulièrement mis à jour.
Installation de l’agent Tugtainer sur le VPS
Dans un répertoire dédié, créer un fichier docker-compose.yml qui contient (remplacer votre_mot_de_passe par le mot de passe que vous choisissez) :
networks:
tugtainer_agent:
driver: bridge
services:
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: socket-proxy
environment:
CONTAINERS: 1
EVENTS: 1
IMAGES: 1
INFO: 1
LOG_LEVEL: warning
PING: 1
NETWORKS: 1
POST: 1
TZ: Europe/Paris
VERSION: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
read_only: true
tmpfs:
- /run
networks:
- tugtainer_agent
labels:
dev.quenary.tugtainer.protected: True
agent:
depends_on:
- socket-proxy
container_name: tugtainer-agent
image: quenary/tugtainer-agent:latest
restart: unless-stopped
environment:
AGENT_SECRET: votre_mot_de_passe
DOCKER_HOST: tcp://socket-proxy:2375
DOCKER_TIMEOUT: 60
read_only: true
tmpfs:
- /run
networks:
- tugtainer_agent
ports:
- '9413:8001'
labels:
dev.quenary.tugtainer.protected: True
Lancer ce service d’agent en tapant :
docker compose up -d
Installation du client web sur le laptop
Dans un répertoire dédié, créer le fichier docker-compose.yml avec le contenu suivant (remplacer adresse_ip_vps par l’adresse IP de votre VPS) :
networks:
tugtainer:
driver: bridge
volumes:
tugtainer_data:
services:
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: socket-proxy
environment:
CONTAINERS: 1
EVENTS: 1
IMAGES: 1
INFO: 1
LOG_LEVEL: warning
PING: 1
NETWORKS: 1
POST: 1
TZ: Europe/Moscow
VERSION: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
read_only: true
tmpfs:
- /run
networks:
- tugtainer
labels:
dev.quenary.tugtainer.protected: True
app:
depends_on:
- socket-proxy
container_name: tugtainer
image: quenary/tugtainer:latest
volumes:
- ./tugtainer_data:/tugtainer
restart: unless-stopped
environment:
- DOCKER_HOST=tcp://socket-proxy:2375
- AGENT_ALLOW_ENDPOINTS=adresse_ip_VPS:9413
networks:
- tugtainer
ports:
- '9412:80'
labels:
dev.quenary.tugtainer.protected: True
Pour lancer le service web sur le laptop, taper :
docker compose up -d
docker compose logs
Dans les logs qui s’affichent à l’écran, repérer le setup code qui est donné et qui n’est valable que 5 minutes :

Utilisation de Tugtainer
Sur le laptop, connecter votre navigateur web sur http://localhost:9412
La page d’accueil permet à la première personne à se connecter de créer le mot de passe permettant l’accès. Dans setup code mettre le setup code lu dans les logs.

Cliquer sur « Save ». Il faut alors se connecter avec le mot de passe qu’on vient de définir :

On arrive alors sur la page d’accueil, avec un hôte sur 127.0.0.1 déjà déclaré, qui se met en erreur puisqu’on n’a pas installé d’agent sur 127.0.0.1.

En cliquant sur le bouton « Edit » sur cet hôte (à droite), on accède à sa page de paramétrage et on peut le supprimer en cliquant sur le bouton rouge « Delete » en bas à droite.

Nous allons maintenant déclarer notre VPS en cliquant sur le bouton « + Add new » sur la page d’accueil. Voici comment nous allons paramétrer cette page :

Dans Name on met le nom qu’on veut.
Dans Agent address on met http://adresse_ip_du_vps:9413
Dans Agent secret on met le votre_mot_de_passe choisi sur l’agent du VPS (voir ci-dessus).
Dans les 2 champs du bas (Agent timeout et Container healthcheck timeout) on met 60 (c’est en secondes)
On clique sur « Save » et le VPS est déclaré. Désormais on peut gérer le MCO des conteneurs depuis le laptop. En cliquant sur le serveur déclaré, on accède à 3 vues : les conteneurs docker, les images docker, et l’état de santé des conteneurs :

En cliquant sur Containers, on peut voir la liste des conteneurs qui tournent sur le VPS, et vérifier individuellement (Check) si une nouvelle image est disponible sur Internet, et même la mettre à jour directement (Update).

En ce qui me concerne, je n’utilise que les 3 boutons du haut à droite :
- Check all : pour vérifier d’un coup toutes les mises à jour d’images disponibles
- Update all : pour faire la mise à jour globale des images docker
- Prune : pour effacer sur le VPS les vieilles images puisqu’elles sont inutilisées après une mise à jour
Tugtainer est un outil comme je les aime : simple, efficace 😎
