Docker 1.9.0 et supérieur
Utilisez 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é en faveur 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é par l'intermédiaire du
docker volume ls
- Être identifié par le biais du
docker volume inspect volume_name
- Sauvegardé comme un répertoire normal
- Sauvegardé comme avant à travers un
--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 ensuite le supprimer par son nom :
docker volume rm <volume name>
Comme le souligne @mpugach dans les commentaires, vous pouvez vous débarrasser de tous les volumes pendants avec une belle ligne unique :
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 est d'utiliser un fichier conteneur de données uniquement .
Le conteneur de données uniquement est exécuté sur une image de base et ne fait rien d'autre que d'exposer un volume de données.
Vous pouvez ensuite 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 avoir une bonne idée de la façon dont vous devez disposer les différents récipients.
-
Ici il y a un bon aperçu de la façon dont les volumes fonctionnent.
Sur cet article de blog il y a une bonne description de ce que l'on appelle conteneur comme modèle de volume ce qui clarifie le point principal d'avoir conteneurs de données uniquement .
La documentation de Docker contient désormais la description DÉFINITIVE de la fonction conteneur en volume/s modèle.
Voici la procédure de sauvegarde/restauration pour Docker 1.8.x et inférieur.
BACKUP :
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- --rm : retirer le conteneur lorsqu'il sort
- --volumes-from DATA : attacher aux volumes partagés par le conteneur DATA
- -v $(pwd):/backup : lier le montage du répertoire actuel dans le conteneur ; écrire le fichier tar dans le conteneur.
- 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
RESTORE :
# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new containers 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 une belle 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.
0 votes
Désolé, je me suis mal exprimé, je voulais dire : toutes mes futures instances de cette image dépendent de ce conteneur. Si je supprime ce conteneur par accident, j'ai des problèmes.
0 votes
@AntonStrogonoff - ouaip, erreur de formulation - je voulais dire : Je dois m'assurer que je ne supprimerai jamais cet ancien conteneur (éventuellement), car alors la référence au stockage "persistant" disparaîtrait également.
0 votes
Il devrait l'être
--name
. vous avez-name
0 votes
Related stackoverflow.com/a/35598694/1824361