====== 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 avec ''docker-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 [[https://jlelse.blog/dev/docker-volume-backups/|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 volume ''new_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 '' * 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 ''