Script serveur

Billet

Pour les utilisateurs des images Docker unstable de Dotclear, il peut être pratique de mettre en place des scripts de mise à jour d'image, de sauvegarde et même pour les bricoleurs des script de remise à zéro.

Script bash 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...

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : https://docker.dotclear.watch/trackback/253