Tl; dr
Pour ceux qui connaissent le fonctionnement des volumes MongoDB et Docker et aussi pour ceux qui veulent juste un extrait rapide de Docker-Compose.YML pour leur projet sans beaucoup de détails en profondeur, voici un fichier de composition qui fera l'affaire. Faire un nouveau répertoire nommé MongoDB et à l'intérieur, créez un fichier nommé Docker-Compose.YML et mettez le contenu suivant à l'intérieur:
Version: '3'
prestations de service:
My-MongoDB:
Image: Mongo: Dernière
Volumes:
- dat-data: / data / db
- Mongo-Config: / Data / ConfigDB
Volumes:
DB-Data:
Mongo-Config:
Enregistrez le fichier et exécutez à partir du même répertoire:
$ docker-compose up -d
Cela commencera un service MongoDB avec deux volumes nommés DB-Data et Mongo-Config la prochaine fois qu'une nouvelle version de MonogDB se déroule:
$ docker-compose
Supprimez l'image actuelle docker rmi mongo télécharger le nouveau docker pull Mongo: dernier et run:
$ docker-compose up -d
Aucune de vos données ne sera perdue tant que vous ne supprimez pas intentionnellement les volumes Docker pour les données DB et Mongo-Config. Vous voudrez peut-être ajouter des services pour votre serveur Web frontal et d'autres services divers ainsi que le service My-MongoDB, bien sûr.
Qu'avons-nous fait?
Eh bien, je peux juste vous dire où MongoDB s'attend à ce que les volumes soient montés et pourquoi j'ai écrit le service de cette manière particulière. Cependant, cela ne vous aiderait pas à rédiger votre propre fichier de composition pour votre propre application personnalisée. Peut-être que vous n'utilisez pas MongoDB, mais Mariadb ou Postgres. Prenons un pas en arrière et allons enquêter sur un conteneur MongoDB et comprenons le processus de réflexion derrière la façon dont le fichier de composition a été écrit.
Commençons par une installation de Docker en ardoise propre. Pas de conteneur en cours d'exécution, pas de réseaux définis par l'utilisateur, pas de volumes. Exécutons un conteneur MongoDB à l'aide de CLI:
$ docker run -d --name mydb mongo: dernier
Maintenant, si nous énumérons les conteneurs, les volumes et les réseaux comme indiqué ci-dessous, nous verrons de nouveaux membres:
$ docker ps
Commande d'image d'ID de conteneur Image Créé les noms de ports d'état
F22758A73BA0 MONGO: Dernier "Docker-Entrypoint.s… "il y a 9 secondes en haut de 7 secondes 27017 / TCP MyDB
$ volume docker ls
Nom du volume du conducteur
Local C5F99E7D82894C1A1DEF4C48EDFDF43220EEBF6B92FCD49A15C0CAFE0325D369
DAA36A6F496075F30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233
$ docker réseau ls
Étendue du pilote de nom d'identification du réseau
C41B287F67AB Bridge Bridge Local
A49b31643fa9 hôte hôte local
A69138357C76 Aucun Null Local
Rien de nouveau n'a été ajouté à la section Networks (seules les valeurs par défaut sont affichées), mais deux nouveaux volumes ont été créés avec de longs hachages comme leur nom.
Le nouveau conteneur est nommé MyDB et expose le port 27017. C'est là qu'un client Mongo peut se connecter et lire ou écrire dans la base de données. Inspectons ce conteneur davantage:
$ docker inspecter mydb
…
"Monte": [
"Type": "Volume",
"Nom": "DAA36A6F496075EF30BAF99B6AF9F6B6CFB9C60E96CED88C102E27381C243233",
"Source": "/ var / lib / docker / volumes / daa36a6f496075ef30baf99b6af9f6b6cfb9c60e96ced88c102e273
81C243233 / _data ",
"Destination": "/ data / configdb",
"Driver": "local",
"Mode": "",
"RW": vrai,
"Propagation": ""
,
"Type": "Volume",
"Nom": "C5F99E7D82894C1A1DEF4C48EDFDF43220EEBF6B92FCD49A15C0CAFE0325D369",
"Source": "/ var / lib / docker / volumes / c5f99e7d82894c1a1def4c48edfdf43220eebf6b92fcd49a15c0cafe
0325
d369 / _data ",
"Destination": "/ data / db",
"Driver": "local",
"Mode": "",
"RW": vrai,
"Propagation": ""
]],
…
À l'intérieur de cette longue sortie JSON qui en résulterait après avoir exécuté la commande Inspecte, vous remarquerez qu'il y a deux montures. Ce sont les volumes Docker que nous avons énumérés plus tôt étant montés à l'intérieur du conteneur. Les points de montage sont / data / configdb et / data / db.
En retirant le conteneur:
Les volumes sont toujours intacts, et vous pouvez toujours les voir répertoriés (Docker Volumes LS). Ainsi, toute information stockée par le conteneur MongoDB est sûre avec nous. Cependant, si nous essayons d'exécuter encore un conteneur MongoDB.
$ docker run -d --name mydb2 Mongo: dernier
Puis énumérer les volumes (Docker Volume LS) Vous remarquerez que deux nouveaux volumes sont créés et montés. Les informations que nous pourrions avoir conservées dans les anciens volumes ne sont pas utilisées. Nous devons contourner ce problème en nommant nous-mêmes des volumes, puis en les montant à l'intérieur du conteneur à leurs points de montage respectifs. De cette façon, lorsqu'un nouveau conteneur MongoDB de remplacement est tourné vers le haut et demande des volumes avec des noms particuliers, Docker montera gracieusement les anciens volumes au lieu de créer de nouveaux.
Pour y parvenir, nous nous référons au docker-compose.Fichier YML mentionné dans la section TL; DR et cela a un peu plus de sens pour nous maintenant.
Connexion à MongoDB
Vous n'avez peut-être pas encore de demande frontale. Si vous le souhaitez, vous pouvez toujours vous connecter au serveur MongoDB, créez une nouvelle base de données à l'intérieur et ajoutez quelques paires de valeur de clé. Ce n'est pas une sorte de base de données SQL typique, mais plutôt une boutique de valeur clé. Pour voir cela en action, installez MongoDB Compass qui est un programme client que vous pouvez exécuter sur votre bureau ou votre ordinateur portable pour vous connecter au serveur de base de données.
Vous n'avez pas besoin de le faire à des fins de production, les conteneurs sur le même réseau peuvent se parler, mais pour l'expérimentation, exposons le port 27017, qui est le port par défaut sur lequel le serveur MongoDB écoute. Pour ce faire, modifiez votre docker-compose.Fichier YML comme indiqué:
Version: '3'
prestations de service:
My-MongoDB:
Image: Mongo: Dernière
PORTS:
- 27017: 27017
Volumes:
- dat-data: / data / db
- Mongo-Config: / Data / ConfigDB
Volumes:
DB-Data:
Mongo-Config:
Récupérez le déploiement en fonctionnant, cela recréera le déploiement si vous en avez déjà un en cours d'exécution:
$ docker-compose up -d
La prochaine chose que vous voulez faire est d'ouvrir la boussole MongoDB sur votre machine locale et de vous connecter à l'hôte Docker. C'est peut-être l'adresse localhost: 27017 Si vous utilisez un conteneur Mongo sur votre machine locale. S'il s'exécute ailleurs, utilisez l'adresse IP ou le nom de domaine de cette machine avec le même numéro de port.
Cliquez sur Connecter dans le bas du coin et vous serez connecté à la base de données.
Créons une nouvelle base de données et appelons-la mydatabase et à l'intérieur de Mycollection.
À l'intérieur Mydatabase> mycollection cliquer sur Insérer un document. Ici, nous pouvons ajouter quelques données factices:
Vous pouvez maintenant essayer de faire baisser le déploiement et vous débarrasser des conteneurs éphémères. Ramenez-le avec des conteneurs plus récents et vous remarquerez que les données que nous avons créées sont toujours là.
Ici, nous avons vu comment exécuter et utiliser un conteneur MongoDB pour votre application. Il reste encore beaucoup à ne pas avoir été dit, par exemple, la sécurisation de la base de données avec un mot de passe, l'interrogation des données et la mise à l'échelle de la base de données.
Vous pouvez en savoir plus ici ou parcourir les documents à votre guise ici.