Ubuntu 18.04 LTS – Mise à jour des images Docker avec Docker-Compose
Les images Docker que vous rapatriez sur votre serveur sont régulièrement mises à jour par les développeurs. Si vous avez une dizaine de containers avec des fichiers docker-compose.yml éparpillés sur votre filesystem, la mise à jour des images et le redémarrage des containers associés peuvent s’avérer vite fastidieux…
Mettre à jour manuellement les images de votre docker-compose.yml
- Placez-vous tout d’abord dans le répertoire contenant votre fichier docker-compose.yml et mettez à jour l’image associée en exécutant la commande suivante :
1$ docker-compose pull - Relancez les containers :
1$ docker-compose up -d --remove-orphans - Supprimez les images obsolètes :
1$ docker image prune
Mettre à jour automatiquement les images de votre docker-compose.yml avec une tâche planifiée
Nous allons automatiser les deux commandes précédentes en les exécutant via une règle crontab. Celle-ci sera planifiée pour exécution tous les jours à 23h42. Les traces liées à l’exécution de ces commandes seront enregistrées dans un fichier /var/log/docker-updater.log.
- Éditez la crontab :
1$ sudo crontab -e - Ajoutez la ligne suivante en remplaçant /path/absolu (sans docker-compose.yml) par le répertoire de votre fichier docker-compose.yml :
142 23 * * * cd /path/absolu && /usr/local/bin/docker-compose pull && /usr/local/bin/docker-compose up -d --remove-orphans && /usr/bin/docker image prune -f > /var/log/docker-updater.log 2>&1 - Sauvegardez et quittez.
Mettre à jour automatiquement les images de tous les fichiers docker-compose.yml de votre système avec une tâche planifiée
Comme vous pouvez le constater, mettre à jour une image nécessite de se rendre dans le répertoire de chaque docker-compose.yml et d’exécuter la commande de mise à jour et d’exécution de docker-compose. Nous allons automatiser cette tâche grâce à un script bash avec son fichier de configuration associé contenant l’ensemble des emplacements de vos fichiers docker-compose.yml. Nous allons créer une règle crontab où le script de mise à jour sera planifié pour exécution tous les jours à 23h42. Les traces liées à l’exécution du script seront enregistrées dans un fichier /var/log/docker-updater.log
- Créez le fichier /opt/docker-updater/docker-updater contenant les lignes suivantes :
1234567891011121314151617181920212223#!/bin/bash# List of docker-compose configsDCOMPOSE=containers-to-update.conf# Update all docker compose scriptsDIR_SCRIPT=`dirname $0`if [ -e "$DIR_SCRIPT/$DCOMPOSE" ]thencat "$DIR_SCRIPT/$DCOMPOSE" | /bin/grep -v '^#' |while read confdoif [ -e "$conf" ]thendir=$(dirname "$conf")compfile=$(basename "$conf")cd "$dir"/usr/local/bin/docker-compose pull && /usr/local/bin/docker-compose -f "$compfile" up -d --remove-orphans && /usr/bin/docker image prune -f 2>&1elseecho "docker compose file $conf does not exist..."fidonefi - Ajoutez les droits d’exécution sur le script /opt/docker-updater/docker-updater :
1$ sudo chmod ugo+x /opt/docker-updater/docker-updater - Créez le fichier de configuration containers-to-update.conf dans le répertoire /opt/docker-updater et ajoutez le path absolu de chaque fichier docker-compose.yml :
123/path1/absolu/docker-compose.yml/path2/absolu/docker-compose.yml/path3/absolu/docker-compose.yml - Éditez la crontab :
1$ sudo crontab -e - Ajoutez la ligne suivante :
142 23 * * * /opt/docker-updater/docker-updater > /var/log/docker-updater.log 2>&1 - Sauvegardez et quittez.
Ubuntu 18.04 Server LTSDocker 18.06.0-ce
Docker Compose 1.21.2