Docker
Notes
- Dockerfile :
ADD --chown=user:group my-backup.tar.gz /var/www
: chown n'a aucun effet sur les fichiers et dossiers extrait d'un fichier compressé et c'est normal…- Dans un Dockerfile appelé depuis un fichier docker-compose.yml où des volumes nommées sont créés, la commande chown n'aura aucun effet car les volumes sont créés préalablement…
Sauvegarde et restauration
- Pour la restauration, créer un fichier
docker-compose-restore.yml
semble être une solution intéressante. À lancer avecdocker-compose -f docker-compose-restore.yml up
- Exemple de méthode fonctionnelle pour sauvegarder & restaurer : https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/
- Exemple de commande :
docker run -it --rm -v bookmarksclapasorg_data-shaarli-storage:/var/www/shaarli/data -v ${PWD}/backup/:/backup alpine sh -c "rm -rf /var/www/shaarli/data/* /var/www/shaarli/data/..?* /var/www/shaarli/data/.[!.]* ; tar -C /var/www/shaarli/data/ -xjf /backup/2019-10-29_shaarli_data_backup.tar.bz2 ; chown -R 100: /var/www/shaarli/data/"
- Utilisation d'une image Docker correspondant à l'article : https://github.com/loomchild/volume-backup
- Solutions basées sur Duplicity : https://github.com/blacklabelops/volumerize et un exemple d'utilisation avec Docker Compose
- Solution CampToCamp → Bivac : https://hub.docker.com/r/camptocamp/bivac
- Solution embarqué dans un container (cron, backup) : https://hub.docker.com/r/futurice/docker-volume-backup
- Exemple avec une image contenant Shaarli :
- Toutes les données sont stockées dans :
/usr/share/nginx/shaarli/data
- Récupérer le nom du container contenant les données avec la commande
ps
(ex.: shaarli_data_1) :docker ps
- Utiliser ensuite la commande
cp
pour copier les données :docker cp shaarli_data_1:/usr/share/nginx/shaarli/data/ ~/backup_dir
- Pour restaurer les données :
- Récupérer le nom du container (ex.: shaarli_data_1) :
docker ps
- Utiliser ensuite la commande
cp
pour restaurer les données :docker cp ~/backup_dir shaarli_data_1:/usr/share/nginx/shaarli/data/
Renommer un volume
- Pas de solution évidente. Il faut aussi créer les volumes avec Docker Compose sinon nous avons un message d'avertissement.
- Arrêter les containers :
docker compose down
- Renommer le dossier et vérifier le contenu du fichier
docker-compose.yml
- Créer le nouveau volume
new_volume
associé à la stack Docker Compose avec :docker compose up -d; docker compose down
- Copier les données de l'ancien
old_volume
vers le nouveau volumenew_volume
avec :docker run --rm -it -v old_volume:/from -v new_volume:/to alpine ash -c 'cd /from ; cp -av . /to'
- Relancer le container et vérifier que tout fonctionne correctement :
docker compose up -d
- Si tout est ok, supprimer l'ancien volume :
docker volume rm old_volume
Commandes utiles
- Copier un fichier dans un volume nommé depuis l'hôte :
- Se placer dans le dossier contenant les fichiers à copier sur l'hôte :
cd <mon-dossier>
- Copier le fichier :
docker run --rm -v $PWD:/src -v my-volume:/dest -u user:group -w /src busybox cp /src/my-file.txt /dest/my-file.txt
- Exemple :
docker run --rm -v $PWD:/src -v amandine-cuircom_wordpress-storage:/dest -u www-data:www-data -w /src busybox cp /src/favicon.ico /dest/favicon.ico