J'utilise Docker pour déployer certains services sur un serveur CentOS 6.4, et j'essaie de comprendre comment sauvegarder correctement les données qu'ils génèrent.
Par exemple, l'un des services est une application Web où les utilisateurs peuvent télécharger des fichiers. Pour ce conteneur, j'ai un /files
volume que je veux sauvegarder. Les supports d'hôte semblent être quelque peu désapprouvés, car un tel support n'est en aucun cas portable - comme dit dans ce billet de blog et dans la documentation du docker pour les volumes .
Je sais du même article de blog que je n'ai pas besoin d' un montage hôte pour accéder aux fichiers d'un volume, je peux utiliser docker inspect
pour savoir où se trouvent les fichiers.
Mais voici mon problème: je pensais à sauvegarder uniquement les fichiers dockerfiles nécessaires pour créer les conteneurs et les volumes qui leur sont associés. Dans le cas probable où je devrais tout restaurer à partir de la sauvegarde, comment pourrais-je savoir quel répertoire de volume correspond à quel conteneur? La reconstruction du conteneur entraîne la modification de l'ID et du chemin du volume, j'ai donc besoin d'informations supplémentaires pour les faire correspondre. Quoi d'autre, le cas échéant, dois-je sauvegarder pour pouvoir tout restaurer?
docker inspect
s construit en Templating comme ceci:VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" )
. Il est probablement également judicieux de rappeler aux gens de ne pas s'attendre à sauvegarder des fichiers de cette manière lorsqu'ils sont activement utilisés (par exemple, des bases de données).Volumes
ont disparu et il existe à laMounts
place avec une structure différente. Nous devons travailler un peu plusrange
pour trouver le point de montage qui nous intéresseVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
Dans Docker plus récent (testé dans
1.9.1, build 9894698
), vous pouvez utiliser lacp
commande .Voici un exemple de copie d'un répertoire du conteneur vers l'hôte:
Voici un exemple de copie d'un répertoire du conteneur vers un
tar
fichier:Dernier exemple mais non le moindre, comment copier un répertoire du conteneur vers un
tar.gz
fichier:la source
docker cp
envoie tout sur le réseau. C'est quelque chose que vous voulez éviter, surtout si votre volume Docker est déjà un volume btrfs.docker cp
serait bien.