980 votes

Comment gérer le stockage persistant (par exemple les bases de données) dans le docker

Comment faites-vous affaire avec la persistance de stockage pour les conteneurs docker? Je suis actuellement en utilisant cette approche: construire l'image, par exemple pour Postgres, et puis commencer le récipient avec

docker run --volumes-from c0dbc34fd631 -d app_name/postgres

À mon humble avis, qui a l'inconvénient, que je ne doit pas (par hasard) supprimer le conteneur "c0dbc34fd631".

Une autre idée serait de monter hôte volumes "-v" dans le conteneur, cependant, le nom d'utilisateur à l'intérieur du conteneur ne doit pas nécessairement correspondre à l'identifiant de l'hôte, puis sur autorisations peut être foiré.

Curieux d'entendre vos suggestions. Merci!

edit: mise à jour "je ne jamais supprimer" pour "je ne dois pas jamais supprimer"

edit: au lieu de "--des volumes, de la cryptic_id'" vous pouvez également utiliser "--volumes-de mon-données-container" où "mon-données-container" est un nom que vous avez attribué à un seul contenant, par exemple, "docker run nom-de-mon-données-conteneur ..." (voir accepté de répondre)

979voto

tommasop Points 5692

L'approche qui semble la meilleure pour la production est d'utiliser uniquement les données de conteneur.

Les données seulement un conteneur est exécuté sur un barebone image et ne fait rien, à l'exception de l'exposer un volume de données.

Ensuite, vous pouvez exécuter tout autre conteneur d'avoir accès aux données des volumes de conteneurs:

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
  • Ici il y a un bon aperçu de la façon dont les volumes de travail

Mise à JOUR:

Dans ce blog il y a une bonne description de ce qui est appelé conteneur de volume motif qui clarifie le principal point d'avoir des données uniquement des emballages.

Mise à JOUR 2:

Le panneau de la documentation a maintenant la description DÉFINITIVE du conteneur de volume/s modèle.

Mise à JOUR 3:

Mise à jour de documents avec procédure de sauvegarde/restauration

SAUVEGARDE:

sudo docker run -rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
  • -rm: supprimer le conteneur quand il sort
  • --des volumes de DONNÉES: fixer les volumes partagés par le conteneur de DONNÉES
  • -v $(pwd):/sauvegarde: lier monter le répertoire courant dans le récipient; pour écrire le fichier tar
  • busybox: un petit plus simple de l'image - bon pour une maintenance rapide
  • tar cvf /backup/sauvegarde.tar /données: crée un non compressé tar fichier de tous les fichiers dans le répertoire " /data

RESTAURATION:

# 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

72voto

amitmula Points 16

À partir de la version v1.0 de Docker, vous pouvez lier le montage d'un volume en utilisant

 docker run -v /host:/container ...
 

et en utilisant ce volume en tant que stockage persistant sur le docker d'exécution de l'hôte. J'utilise généralement un tel moyen de persister mes journaux d'application.

13voto

Tim Dorr Points 861

Alors que c'est encore une partie de docker qui a besoin de quelques travaux, vous devez mettre le volume dans le Dockerfile avec le VOLUME d'instruction de sorte que vous n'avez pas besoin de copier les volumes à partir d'un autre conteneur. Qui feront de vos contenants de moins inter-dépendants et vous n'avez pas à vous soucier de la suppression d'un conteneur en affecter un autre.

5voto

ben schwartz Points 1027

Cela dépend de votre scénario (ce n'est pas vraiment adapté à un environnement prod) mais voici un moyen: http://txt.fliglio.com/2013/11/creating-a-mysql-docker-container/

Dans ce cas, utilisez un répertoire sur votre hôte pour la persistance des données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X