Pour la suite on part du principe qu'on a accès en SSH à notre serveur sous Linux avec un terminal sous bash, que l'utilisateur s'appelle bob et que Docker est installé et configuré.
1. Préambule
Les images docker de Dotclear ont la particularité de mettre tout ce qui est utile (configuration, media, etc) dans un seul répertoire facilement montable en volume, cela facilite grandement la manipulation (mise à jour, redémarrage, etc) de l'image elle-même. Dans les exemples qui suivent on va prendre en compte que les volumes doivent toujours rester intactes.
2. Mise à jour
On commence par créer 2 répertoires dans la home de l'utilisateur, et on édite notre composition :
mkidr -p /home/bob/dcunstable/{volume,backup} && nano /home/bob/dcunstable/docker-compose.yml
Dans laquelle on configure notre composition Dotclear :
services:
dcunstableapp:
image: jcpd/docker-dotclear:dev
container_name: dcunstableapp
restart: unless-stopped
volumes:
- /home/bob/dcunstable/volume:/var/www/dotclear
ports:
- 80:80
environment:
DC_DBDRIVER: sqlite
DC_DBNAME: \var\www\dotclear\sqlite.db
DC_ADMINMAILFROM: contact@exemple.com
Différents exemples de composition sont disponibles sur le dépôt.
On exécute la composition pour voir si le container fonctionne bien :
docker compose -f /home/bob/dcunstable/docker-compose.yml up -d
Puis on édite notre premier script nommé update.sh
qui servira à faire la mise à jour du container :
nano /home/bob/dcunstable/update.sh
Et on y met notre script bash :
#!/bin/sh -x
DP=dcunstable
DC="${DP}app"
DF=/home/bobo/$DP/docker-compose.yml
docker compose -f $DF pull $DC \
&& docker compose -f $DF stop $DC \
&& docker compose -f $DF up -d \
&& docker image prune -af
Pour explication des commandes docker compose :
- Télécharge la dernière image
- Arrête le container
- Relance le container (avec la nouvelle image)
- Nettoie les images inutilisées
NLDR: J'utilise le même script pour mes différentes versions de test, et je n'ai qu'à changer le nom du dossier principal dans la variable DP.
Une fois modifié, on rend le fichier exécutable et on le test.
sudo chmod +x /home/bob/dcunstable/update.sh && sudo /home/bob/dcunstable/update.sh
On devrait voir la magie opérer.
Maintenant on va ajouter une tâche cron pour mettre à jour automatiquement la version unstable tous les jours à 6h de matin.
On edite le cron root. (si vous n'avez pas crontab il faut l'installer.)
sudo crontab -e
Et on ajoute à la fin :
0 6 * * * /home/bob/dcunstable/update.sh
Et voila, notre installation de développement sera toujours à jour.
3. Sauvegarde
Maintenant il est vrai qu'utiliser une version dev c'est pour y mettre le bazar et donc risquer de tout planter, on va donc refaire la même manipulation pour faire un script de sauvegarde. On devine la démarche pour créer le fichier backup.sh
, le rendre exécutable et éventuellement l'ajouter au cron. Voila seulement le contenu de ce fichier :
#!/bin/sh -x
DP=dcunstable
DF=/home/bob/$DP/docker-compose.yml
docker compose -p $DP stop \
&& rm -Rf /home/bob/$DP/backup \
&& mkdir /home/bob/$DP/backup/ \
&& cp -rf /home/bob/$DP/volume/* /home/bob/$DP/backup \
&& docker compose -p $DP start
Ici, on arrête le container, on efface la sauvegarde de la veille, on copie la nouvelle sauvegarde et on redémarre le container.
4. Restauration
On peut aussi faire un fichier reset.sh
pour revenir à la dernière sauvegarde, le contenu du fichier sera :
#!/bin/sh -x
DP=dcunstable
DF=/home/bob/$DP/docker-compose.yml
DC="${DP}app"
docker compose -f $DF pull $DC \
&& docker compose -p $DP stop \
&& rm -Rf /home/bob/$DP/volume \
&& mkdir /home/bob/$DP/volume \
&& cp -rf /home/bob/$DP/backup/* /home/bob/$DP/volume \
&& docker compose -f $DF up -d
Ici on a un exemple avec fichier docker-compose.yml
qui aurait deux services, un pour la base de données nommé dcunstabledb
et un pour l'application Dotclear nommé dcsuntableapp
. On voit ainsi qu'on peut à travers docker compose travaillé sur qu'une seule partie de la composition.
5. Conclusion
Voila trois exemples d'utilisation des commandes docker compose et de la simplicité de manipuler les containers et volumes Docker. A vous de les adapter à vos besoins, si vous désirez mettre à jour tous les services du container, sauvegarder que certains volumes, etc...
La discussion continue ailleurs
URL de rétrolien : https://docker.dotclear.watch/trackback/253