Après avoir lu les documents, je me suis retrouvé quelque peu confus quant à la meilleure façon de gérer les données productives des applications / services.
Il semble y avoir 3 options:
- Mappez simplement le volume au répertoire hôte (c'est-à-dire l'
-v
argument pourdocker run
) - Créer une image de conteneur Docker pour les données (c.-à-d. Conteneur séparé et
--volumes-from
) - Créer un volume docker (ie
docker volume create
)
Maintenant, il semble que la pratique acceptée soit l'option n ° 2, mais je me demande alors quel est le but de la n ° 3.
Surtout comment gérez-vous correctement ces scénarios docker volume
et est-il préférable d'utiliser un conteneur de volume de données ou cela pour chaque situation?
- Vous avez besoin de données d'application dans un volume et / ou un niveau de stockage distinct sur votre serveur
- Sauvegarde
- Restauration des données
btrfs scrub
pour trouver et corriger les fichiers endommagés. Je ne suis pas sûr de savoir comment les choses ancrées fonctionnent, mais je suppose que cela ne protège pas contre la pourriture des données, j'ai donc toujours besoin d'une restauration complète en cas de problème au lieu de simplement restaurer des fichiers individuels. Un autre a pensé qu'il ajoute une autre couche d'abstraction, ce qui ralentit encore plus la lecture et l'écriture des fichiers. Je ne vois pas en quelque sorte les avantages des n ° 2 et n ° 3, mais je ne suis pas expérimenté avec docker, donc cela pourrait changer.Réponses:
Je pense que # 2 et # 3 sont à peu près la même chose, la principale différence est qu'il n'y a pas de conteneur arrêté avec # 3 (c'est littéralement, juste un volume nommé). Par exemple, vous pouvez créer un volume nommé et faire à la place ce que vous feriez avec # 2
-v
.Créez un volume nommé:
Montez et écrivez des données sur ce volume à partir d'un conteneur:
Vous pouvez ensuite monter ce même
test
volume dans un autre conteneur et lire les données:L'avantage ici est que le volume ne disparaîtra pas accidentellement si vous supprimez le conteneur de données uniquement. Vous le gérez maintenant avec la
docker volume
sous-commande.Il ouvre également les possibilités pour les pilotes de volume sur la route afin que vous puissiez être en mesure de faire des volumes partagés entre les hôtes (c'est-à-dire les volumes nommés sur NFS). Des exemples de cela pourraient être Flocker et Convoy . En ce qui concerne spécifiquement le déplacement ou la sauvegarde des données, Convoy a des sous-commandes spécifiques pour la sauvegarde des données et permet le stockage sur NFS ou EBS externe à votre hôte.
Pour cette raison, je pense que la méthode la plus nouvelle (Docker 1.9+) consiste à utiliser un volume nommé plutôt qu'un conteneur de données uniquement.
la source
the volume won't accidentally disappear if you remove the data-only container
. Pourriez-vous élaborer? Merci.Depuis Docker 1.9, la création de volumes nommés avec l' API Volumes (
docker volume create --name mydata
) est préférable à un conteneur de volume de données. En février 2016, la documentation des volumes Docker est malheureusement obsolète. Les gens de Docker eux-mêmes suggèrent que les conteneurs de volumes de données « ne sont plus considérés comme un modèle recommandé », «les volumes nommés devraient être en mesure de remplacer les volumes de données uniquement dans la plupart (sinon tous) les cas » et « aucune raison que je vois d'utiliser conteneurs de données uniquement . "la source