Docker 1.9.0 et supérieur
Utiliser l' API de volume
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
Cela signifie que le modèle de conteneur de données uniquement doit être abandonné au profit des nouveaux volumes.
En fait, l'API de volume n'est qu'un meilleur moyen de réaliser ce qui était le modèle de conteneur de données.
Si vous créez un conteneur avec un -v volume_name:/container/fs/path
Docker créera automatiquement un volume nommé pour vous qui peut:
- Être répertorié via le
docker volume ls
- Être identifié par le
docker volume inspect volume_name
- Sauvegardé en tant que répertoire normal
- Sauvegardé comme auparavant via une
--volumes-from
connexion
La nouvelle API de volume ajoute une commande utile qui vous permet d'identifier les volumes pendants:
docker volume ls -f dangling=true
Et puis supprimez-le par son nom:
docker volume rm <volume name>
Comme le souligne @mpugach dans les commentaires, vous pouvez vous débarrasser de tous les volumes suspendus avec un joli one-liner:
docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune
Docker 1.8.x et inférieur
L'approche qui semble fonctionner le mieux pour la production consiste à utiliser un conteneur de données uniquement .
Le conteneur de données uniquement est exécuté sur une image barebones et ne fait rien, sauf exposer un volume de données.
Ensuite, vous pouvez exécuter n'importe quel autre conteneur pour avoir accès aux volumes du conteneur de données:
docker run --volumes-from data-container some-other-container command-to-execute
- Ici, vous pouvez obtenir une bonne image de la façon d'organiser les différents conteneurs.
- Voici un bon aperçu du fonctionnement des volumes.
Dans ce billet de blog, il y a une bonne description du soi-disant conteneur en tant que modèle de volume qui clarifie le point principal d'avoir uniquement des conteneurs de données .
La documentation Docker a maintenant la description DEFINITIVE du conteneur en tant que modèle de volume / s .
Voici la procédure de sauvegarde / restauration pour Docker 1.8.x et versions antérieures.
SAUVEGARDE:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm: retirer le conteneur à sa sortie
- --volumes-from DATA: attache aux volumes partagés par le conteneur DATA
- -v $ (pwd): / backup: bind monte le répertoire courant dans le conteneur; pour écrire le fichier tar dans
- busybox: une petite image plus simple - bonne pour une maintenance rapide
- tar cvf /backup/backup.tar / data: crée un fichier tar non compressé de tous les fichiers du répertoire / data
RESTAURER:
# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
Voici un bel article de l'excellent Brian Goff expliquant pourquoi il est bon d'utiliser la même image pour un conteneur et un conteneur de données.