[{"data":1,"prerenderedAt":1199},["ShallowReactive",2],{"article-fr-\u002Fdevops\u002Fbackup-and-restore-mongodb-in-docker-environment":3,"article-sibling-fr-\u002Fdevops\u002Fbackup-and-restore-mongodb-in-docker-environment":645,"surround-fr-\u002Fdevops\u002Fbackup-and-restore-mongodb-in-docker-environment":1175,"related-fr-\u002Fdevops\u002Fbackup-and-restore-mongodb-in-docker-environment":1179},{"id":4,"title":5,"body":6,"date":625,"description":626,"extension":627,"img":628,"meta":629,"navigation":630,"path":631,"seo":632,"slug":633,"stem":634,"tags":635,"topics":641,"__hash__":644},"content\u002Fdevops\u002F3.backup-and-restore-mongodb-in docker-environment.fr.md","Sauvegarder et restaurer MongoDB dans un environnement Docker",{"type":7,"value":8,"toc":605},"minimark",[9,14,31,35,38,42,49,56,63,70,77,81,84,90,96,102,105,109,114,117,121,124,205,209,216,219,251,266,289,292,297,301,307,310,328,338,341,345,348,351,355,365,368,372,375,403,407,410,427,435,439,445,472,481,484,488,492,498,504,517,523,529,535,539,546,553,557,601],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17,18,25,26,30],"p",{},"Dans notre précédent article, on a vu comment faire tourner une base MongoDB dans un conteneur\nDocker, et on a appris à créer un replica set à 3 nœuds avec Docker Compose. Si tu l'as raté,\ntu peux le consulter ",[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Fdenisakp.me\u002Fblog\u002Fdevops\u002Fset-up-mongodb-replica-with-docker",[23],"nofollow","ici",".\nDans cet article, on couvre un sujet essentiel : ",[27,28,29],"strong",{},"sauvegarder et restaurer MongoDB dans un\nenvironnement Docker",". Je vais te guider à travers le process de création d'une sauvegarde\ncomplète d'une base MongoDB qui tourne dans un conteneur Docker, puis sa restauration dans un\nnouveau conteneur MongoDB.",[10,32,34],{"id":33},"limportance-des-sauvegardes-dans-un-environnement-conteneurisé","L'importance des sauvegardes dans un environnement conteneurisé",[15,36,37],{},"Les conteneurs sont conçus pour être éphémères, c'est-à-dire qu'ils peuvent être créés,\ndétruits et recréés à tout moment. Si ça offre de la flexibilité, ça signifie aussi que toute\ndonnée stockée dans un conteneur risque d'être perdue quand le conteneur est supprimé, ou\nperdue à cause de corruption ou d'autres soucis. Il est donc crucial d'avoir une stratégie de\nsauvegarde et de restauration robuste pour protéger tes données de la perte ou la corruption\net garantir disponibilité et continuité d'activité.",[10,39,41],{"id":40},"pourquoi-les-sauvegardes-sont-importantes","Pourquoi les sauvegardes sont importantes",[15,43,44,45,48],{},"1- ",[27,46,47],{},"Prévention de la perte de données"," : les sauvegardes sont essentielles pour prévenir la\nperte de données due à une suppression accidentelle, corruption, panne matérielle ou autre\névénement inattendu. Avoir une sauvegarde garantit de pouvoir récupérer tes données en cas\nd'événement de ce type.",[15,50,51,52,55],{},"2- ",[27,53,54],{},"Continuité d'activité"," : les sauvegardes sont cruciales pour maintenir la continuité\nd'activité en cas de perte de données. Une stratégie de sauvegarde fiable garantit que tu\npeux rapidement récupérer tes données et reprendre les opérations sans temps d'arrêt\nsignificatif, particulièrement dans les environnements conteneurisés.",[15,57,58,59,62],{},"3- ",[27,60,61],{},"Reprise après sinistre"," : les sauvegardes sont une partie essentielle de tout plan de\nreprise après sinistre. Une stratégie de sauvegarde fiable garantit que tu peux récupérer\nrapidement tes données et reprendre les opérations en cas de sinistre.",[15,64,65,66,69],{},"4- ",[27,67,68],{},"Conformité et exigences légales"," : de nombreuses industries ont des exigences strictes\nde conformité et légales concernant les données.",[15,71,72,73,76],{},"5- ",[27,74,75],{},"Tranquillité d'esprit"," : avoir une stratégie de sauvegarde fiable en place te donne la\ntranquillité d'esprit en sachant que tes données sont protégées et peuvent être récupérées\nen cas d'événement.",[10,78,80],{"id":79},"stratégies-de-sauvegarde-mongodb","Stratégies de sauvegarde MongoDB",[15,82,83],{},"MongoDB propose plusieurs options pour sauvegarder tes données : sauvegardes incrémentales,\ncomplètes et différentielles.",[15,85,44,86,89],{},[27,87,88],{},"Sauvegardes incrémentales"," : capturent uniquement les changements faits depuis la\ndernière sauvegarde, ce qui réduit la quantité de données à sauvegarder et accélère le\nprocess. En revanche, elles peuvent être complexes à gérer et restaurer.",[15,91,51,92,95],{},[27,93,94],{},"Sauvegardes complètes"," : capturent toute la base, données et index inclus. Bien que les\nsauvegardes complètes soient plus longues et plus gourmandes en ressources que les\nincrémentales, elles fournissent un snapshot complet de la base qui peut être utilisé pour\nla restaurer à un point précis dans le temps.",[15,97,58,98,101],{},[27,99,100],{},"Sauvegardes différentielles"," : capturent uniquement les changements faits depuis la\ndernière sauvegarde complète, ce qui réduit la quantité de données à sauvegarder par\nrapport à une complète. Ça peut être un bon compromis entre complète et incrémentale, mais\nça peut aussi être complexe.",[15,103,104],{},"Dans cet article, on se concentre sur la stratégie de sauvegarde complète puisque c'est la\nméthode la plus simple et fiable pour sauvegarder ta base.",[10,106,108],{"id":107},"réaliser-une-sauvegarde-complète-de-mongodb","Réaliser une sauvegarde complète de MongoDB",[110,111,113],"h3",{"id":112},"prérequis","Prérequis",[15,115,116],{},"1- Docker et Docker Compose installés sur ton système.\n2- Connaissance basique des concepts Docker comme les volumes.\n3- Temps pour compléter le tutoriel : 6 à 10 minutes.",[110,118,120],{"id":119},"étape-1-démarrer-un-conteneur-mongodb","Étape 1 : démarrer un conteneur MongoDB",[15,122,123],{},"D'abord, on tire l'image MongoDB depuis Docker Hub et on démarre un conteneur MongoDB.",[125,126,131],"pre",{"className":127,"code":128,"language":129,"meta":130,"style":130},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker pull mongo:7.0-jammy # Pull the MongoDB image\ndocker volume create mongo-data # Create a volume to persist the MongoDB data\ndocker run -d --name mongodb -v mongo-data:\u002Fdata\u002Fdb -p 27017:27017 mongo:7.0-jammy # Start a MongoDB container\n","shell","",[132,133,134,154,171],"code",{"__ignoreMap":130},[135,136,139,143,147,150],"span",{"class":137,"line":138},"line",1,[135,140,142],{"class":141},"sBMFI","docker",[135,144,146],{"class":145},"sfazB"," pull",[135,148,149],{"class":145}," mongo:7.0-jammy",[135,151,153],{"class":152},"sHwdD"," # Pull the MongoDB image\n",[135,155,157,159,162,165,168],{"class":137,"line":156},2,[135,158,142],{"class":141},[135,160,161],{"class":145}," volume",[135,163,164],{"class":145}," create",[135,166,167],{"class":145}," mongo-data",[135,169,170],{"class":152}," # Create a volume to persist the MongoDB data\n",[135,172,174,176,179,182,185,188,191,194,197,200,202],{"class":137,"line":173},3,[135,175,142],{"class":141},[135,177,178],{"class":145}," run",[135,180,181],{"class":145}," -d",[135,183,184],{"class":145}," --name",[135,186,187],{"class":145}," mongodb",[135,189,190],{"class":145}," -v",[135,192,193],{"class":145}," mongo-data:\u002Fdata\u002Fdb",[135,195,196],{"class":145}," -p",[135,198,199],{"class":145}," 27017:27017",[135,201,149],{"class":145},[135,203,204],{"class":152}," # Start a MongoDB container\n",[110,206,208],{"id":207},"étape-2-exécuter-la-commande-mongodump","Étape 2 : exécuter la commande mongodump",[15,210,211,212,215],{},"Pour créer une sauvegarde complète de ta base MongoDB, tu vas utiliser la commande\n",[132,213,214],{},"mongodump",", un utilitaire fourni par MongoDB. Cette commande crée un export binaire de ta\nbase qui pourra servir à restaurer les données plus tard.",[15,217,218],{},"Lance la commande suivante depuis ta machine hôte pour créer une sauvegarde complète de ta\nbase MongoDB :",[125,220,222],{"className":127,"code":221,"language":129,"meta":130,"style":130},"docker exec -it mongodb mongodump --uri mongodb:\u002F\u002Flocalhost:27017\u002Ftest --gzip --archive=test.archive\n",[132,223,224],{"__ignoreMap":130},[135,225,226,228,231,234,236,239,242,245,248],{"class":137,"line":138},[135,227,142],{"class":141},[135,229,230],{"class":145}," exec",[135,232,233],{"class":145}," -it",[135,235,187],{"class":145},[135,237,238],{"class":145}," mongodump",[135,240,241],{"class":145}," --uri",[135,243,244],{"class":145}," mongodb:\u002F\u002Flocalhost:27017\u002Ftest",[135,246,247],{"class":145}," --gzip",[135,249,250],{"class":145}," --archive=test.archive\n",[15,252,253,254,257,258,261,262,265],{},"Dans mon exemple, mon conteneur s'appelle ",[132,255,256],{},"mongo",", et ma base s'appelle ",[132,259,260],{},"test"," — tu dois la\nremplacer par le nom de ta base. Note aussi le flag ",[132,263,264],{},"--gzip",", qui compresse le fichier de\nsauvegarde pour économiser de l'espace disque. Ma base de test pèse environ 18 Mo, et le\nfichier de sauvegarde environ 627 Ko. Réduction significative.",[15,267,268,269,272,273,276,277,280,281,284,285,288],{},"Autre chose importante : le flag ",[132,270,271],{},"--uri",", qui spécifie la chaîne de connexion à la base\nMongoDB. Ici, on se connecte à la base MongoDB qui tourne sur ",[132,274,275],{},"localhost"," au port ",[132,278,279],{},"27017",". Si\ntu as suivi l'article précédent, tu as peut-être un replica set qui tourne sur\n",[132,282,283],{},"localhost:27017,localhost:27018,localhost:27019",". Dans ce cas, remplace la chaîne de\nconnexion par la version appropriée :\n",[132,286,287],{},"mongodb:\u002F\u002Fusername:passwor@localhost:27017,username:passwor@locahost:27018,username:passwor@localhost:27019\u002F?replicaSet=rs0",".",[15,290,291],{},"Si tout se passe bien, tu devrais voir un message indiquant que la sauvegarde a réussi.\nQuelque chose comme :",[293,294],"post-image",{"alt":295,"source":296},"Sauvegarde MongoDB réussie","https:\u002F\u002Fres.cloudinary.com\u002Fdpdwhd6ka\u002Fimage\u002Fupload\u002Ff_auto,q_auto\u002Fv1\u002FBlog\u002Farticles\u002Fhow-to\u002Fsuccess-backup-mongo",[110,298,300],{"id":299},"étape-3-copier-le-fichier-de-sauvegarde-sur-ta-machine-hôte","Étape 3 : copier le fichier de sauvegarde sur ta machine hôte",[15,302,303,304,306],{},"La commande ",[132,305,214],{}," crée un fichier de sauvegarde à l'intérieur du conteneur MongoDB. On\ndoit le copier sur notre machine hôte parce que le conteneur est éphémère et peut être détruit\nà tout moment.",[15,308,309],{},"Lance la commande suivante pour copier le fichier de sauvegarde sur ta machine hôte :",[125,311,313],{"className":127,"code":312,"language":129,"meta":130,"style":130},"docker cp mongodb:\u002Ftest.archive \u002Fpath\u002Fto\u002Fbackup\u002Fyourdatabase.archive\n",[132,314,315],{"__ignoreMap":130},[135,316,317,319,322,325],{"class":137,"line":138},[135,318,142],{"class":141},[135,320,321],{"class":145}," cp",[135,323,324],{"class":145}," mongodb:\u002Ftest.archive",[135,326,327],{"class":145}," \u002Fpath\u002Fto\u002Fbackup\u002Fyourdatabase.archive\n",[329,330,331],"blockquote",{},[15,332,333,334,337],{},"Remplace ",[132,335,336],{},"\u002Fpath\u002Fto\u002Fbackup\u002Fyourdatabase.archive"," par le chemin où tu veux stocker le fichier\nde sauvegarde sur ta machine hôte.",[15,339,340],{},"Si tout se passe bien, tu devrais voir un message indiquant que le fichier a été copié avec\nsuccès. Quelque chose comme :",[293,342],{"alt":343,"source":344},"Archive copiée avec succès","https:\u002F\u002Fres.cloudinary.com\u002Fdpdwhd6ka\u002Fimage\u002Fupload\u002Ff_auto,q_auto\u002Fv1\u002FBlog\u002Farticles\u002Fhow-to\u002Fsuccess-copy-archive",[15,346,347],{},"Bravo ! Tu as créé avec succès une sauvegarde complète de ta base MongoDB. Tu peux maintenant\nstocker ce fichier dans un endroit sûr et l'utiliser pour restaurer tes données si besoin.\nQuand je dis « endroit sûr », je veux dire un endroit différent de ta machine locale ou de\nton serveur, parce que, si ta machine ou ton serveur tombe, tu perds à la fois la base et la\nsauvegarde.",[15,349,350],{},"Une autre option est d'utiliser un service de stockage cloud comme AWS S3, Google Cloud\nStorage, Azure Blob Storage ou MinIO pour stocker tes sauvegardes. Comme ça, tes sauvegardes\nsont en sécurité même si ta machine ou ton serveur tombe. Tu peux aussi prendre soin de la\nsécurité de tes sauvegardes en les chiffrant avant de les stocker dans le cloud. Ainsi, tu\ngarantis l'intégrité et la confidentialité de la base.",[10,352,354],{"id":353},"réaliser-une-restauration-mongodb","Réaliser une restauration MongoDB",[15,356,357,358,361,362,364],{},"Aussi importante que la création de sauvegardes, la capacité à les restaurer quand nécessaire.\nLa commande ",[132,359,360],{},"mongorestore"," est utilisée pour restaurer une sauvegarde MongoDB créée avec\n",[132,363,214],{},". Dans cette section, on parcourt le process de restauration d'une sauvegarde\nMongoDB dans un environnement conteneurisé.",[15,366,367],{},"Pour ce tutoriel, on suppose que notre conteneur MongoDB a été supprimé sans le vouloir 😏,\net que le volume attaché est parti avec. On utilise le fichier de sauvegarde qu'on a créé\nplus tôt pour restaurer les données.",[110,369,371],{"id":370},"étape-1-démarrer-un-nouveau-conteneur-mongodb","Étape 1 : démarrer un nouveau conteneur MongoDB",[15,373,374],{},"D'abord, démarre un nouveau conteneur MongoDB avec la même image et le même volume utilisés\npour créer la sauvegarde.",[125,376,378],{"className":127,"code":377,"language":129,"meta":130,"style":130},"docker run -d --name mongodb -v mongo-data:\u002Fdata\u002Fdb -p 27017:27017 mongo:7.0-jammy\n",[132,379,380],{"__ignoreMap":130},[135,381,382,384,386,388,390,392,394,396,398,400],{"class":137,"line":138},[135,383,142],{"class":141},[135,385,178],{"class":145},[135,387,181],{"class":145},[135,389,184],{"class":145},[135,391,187],{"class":145},[135,393,190],{"class":145},[135,395,193],{"class":145},[135,397,196],{"class":145},[135,399,199],{"class":145},[135,401,402],{"class":145}," mongo:7.0-jammy\n",[110,404,406],{"id":405},"étape-2-copier-le-fichier-de-sauvegarde-dans-le-nouveau-conteneur","Étape 2 : copier le fichier de sauvegarde dans le nouveau conteneur",[15,408,409],{},"Ensuite, copie le fichier de sauvegarde depuis ta machine hôte ou récupère-le depuis le\nstockage cloud vers le nouveau conteneur MongoDB. Pour cet exemple, on utilise le fichier\nqu'on a créé plus tôt.",[125,411,413],{"className":127,"code":412,"language":129,"meta":130,"style":130},"docker cp \u002Fpath\u002Fto\u002Fbackup\u002Ftest.archive mongodb:\u002Ftest.archive\n",[132,414,415],{"__ignoreMap":130},[135,416,417,419,421,424],{"class":137,"line":138},[135,418,142],{"class":141},[135,420,321],{"class":145},[135,422,423],{"class":145}," \u002Fpath\u002Fto\u002Fbackup\u002Ftest.archive",[135,425,426],{"class":145}," mongodb:\u002Ftest.archive\n",[329,428,429],{},[15,430,333,431,434],{},[132,432,433],{},"\u002Fpath\u002Fto\u002Fbackup\u002Ftest.archive"," par le chemin vers le fichier de sauvegarde sur ta\nmachine hôte.",[110,436,438],{"id":437},"étape-3-exécuter-la-commande-mongorestore","Étape 3 : exécuter la commande mongorestore",[15,440,441,442,444],{},"Enfin, utilise la commande ",[132,443,360],{}," pour restaurer le fichier de sauvegarde dans le\nnouveau conteneur MongoDB.",[125,446,448],{"className":127,"code":447,"language":129,"meta":130,"style":130},"docker exec -it mongodb mongorestore --uri mongodb:\u002F\u002Flocalhost:27017 --gzip --archive=test.archive\n",[132,449,450],{"__ignoreMap":130},[135,451,452,454,456,458,460,463,465,468,470],{"class":137,"line":138},[135,453,142],{"class":141},[135,455,230],{"class":145},[135,457,233],{"class":145},[135,459,187],{"class":145},[135,461,462],{"class":145}," mongorestore",[135,464,241],{"class":145},[135,466,467],{"class":145}," mongodb:\u002F\u002Flocalhost:27017",[135,469,247],{"class":145},[135,471,250],{"class":145},[15,473,474,475,477,478,480],{},"Cette commande restaure les données du fichier de sauvegarde vers la base MongoDB qui tourne\ndans le nouveau conteneur. Note qu'on n'a pas besoin de spécifier le nom de la base parce\nqu'il est inclus dans le fichier de sauvegarde. Le flag ",[132,476,264],{}," sert à indiquer à\n",[132,479,360],{}," que le fichier de sauvegarde est compressé.",[15,482,483],{},"Si tout se passe bien, tu devrais voir un message indiquant que la restauration a réussi.\nQuelque chose comme :",[293,485],{"alt":486,"source":487},"Sauvegarde restaurée avec succès","https:\u002F\u002Fres.cloudinary.com\u002Fdpdwhd6ka\u002Fimage\u002Fupload\u002Ff_auto,q_auto\u002Fv1\u002FBlog\u002Farticles\u002Fhow-to\u002Fsuccess-restore",[10,489,491],{"id":490},"bonnes-pratiques-pour-les-sauvegardes-mongodb-en-environnement-conteneurisé","Bonnes pratiques pour les sauvegardes MongoDB en environnement conteneurisé",[15,493,44,494,497],{},[27,495,496],{},"Utiliser les volumes"," : stocke tes données MongoDB sur un volume pour les persister même\nsi le conteneur est détruit. Ça garantit que tes données sont en sécurité et peuvent être\nsauvegardées et restaurées facilement.",[15,499,51,500,503],{},[27,501,502],{},"Sauvegardes régulières"," : planifie des sauvegardes régulières de ta base MongoDB pour\ngarantir que tes données sont toujours à jour et peuvent être rapidement restaurées en cas\nd'événement. Selon tes données, tu peux avoir besoin de sauvegardes :",[505,506,507,511,514],"ul",{},[508,509,510],"li",{},"Quotidiennes : idéal pour les bases avec des changements fréquents.",[508,512,513],{},"Hebdomadaires : adapté pour les bases modérément actives, avec des changements moins\nfréquents.",[508,515,516],{},"Mensuelles : pour les bases avec des changements peu fréquents.",[15,518,58,519,522],{},[27,520,521],{},"Sauvegardes hors site"," : stocke tes sauvegardes dans un emplacement hors site, comme un\nservice de stockage cloud, pour garantir que tes données sont en sécurité même si ta machine\nou ton serveur tombe. Souviens-toi de traiter les sauvegardes de ta base comme des données\nsensibles : tu devrais les chiffrer avant de les stocker dans le cloud, et en restreindre\nl'accès au personnel autorisé seulement.",[15,524,58,525,528],{},[27,526,527],{},"Automatiser les sauvegardes"," : mets en place des jobs de sauvegarde automatisés qui\ntournent à intervalles réguliers pour garantir que tes données sont sauvegardées de manière\nrégulière et cohérente.",[15,530,65,531,534],{},[27,532,533],{},"Tester les restaurations"," : teste régulièrement ton process de sauvegarde et de\nrestauration pour garantir que tes sauvegardes sont valides et peuvent être restaurées avec\nsuccès. Ça t'aidera à identifier les soucis de ta stratégie de sauvegarde et à faire les\najustements nécessaires. Après une sauvegarde, tu devrais tester le process de restauration\ndans un environnement sandbox pour garantir que la sauvegarde est valide et peut être\nrestaurée avec succès. Une chose importante : tu devrais documenter le process de\nrestauration, pour garantir que tout personnel autorisé peut restaurer la base en cas\nd'événement.",[10,536,538],{"id":537},"conclusion","Conclusion",[15,540,541,542,545],{},"Dans cet article, on a couvert l'importance des sauvegardes dans un environnement\nconteneurisé et on t'a guidé à travers le process de création d'une sauvegarde complète d'une\nbase MongoDB qui tourne dans un conteneur Docker. Je t'ai également montré comment restaurer\nla sauvegarde dans un nouveau conteneur MongoDB. En suivant ces étapes et bonnes pratiques,\ntu peux garantir que tes données MongoDB sont sûres, sécurisées et toujours disponibles, même\nen cas de perte ou corruption. ",[27,543,544],{},"Souviens-toi : avoir une sauvegarde est essentiel, mais\npouvoir la restaurer est encore plus important",". Donc, assure-toi de tester tes process de\nsauvegarde et de restauration régulièrement pour garantir que tes données sont protégées et\npeuvent être récupérées quand nécessaire.",[15,547,548,549,552],{},"Dans un futur article, on couvrira un sujet intéressant : ",[27,550,551],{},"automatiser les sauvegardes\nMongoDB dans un environnement conteneurisé",". Je suis sûr que tu vas adorer, parce que ça va\nt'économiser du temps et des efforts. Reste à l'écoute !",[10,554,556],{"id":555},"références","Références",[505,558,559,566,573,580,587,594],{},[508,560,561],{},[19,562,565],{"href":563,"rel":564},"https:\u002F\u002Fdocs.mongodb.com\u002Fmanual\u002Fcore\u002Fbackups\u002F",[23],"Sauvegarde MongoDB",[508,567,568],{},[19,569,572],{"href":570,"rel":571},"https:\u002F\u002Fdocs.mongodb.com\u002Fdatabase-tools\u002Fmongorestore\u002F",[23],"Restauration MongoDB",[508,574,575],{},[19,576,579],{"href":577,"rel":578},"https:\u002F\u002Fdocs.docker.com\u002Fstorage\u002Fvolumes\u002F",[23],"Volumes Docker",[508,581,582],{},[19,583,586],{"href":584,"rel":585},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Freference\u002Fcommandline\u002Fcp\u002F",[23],"Commande Docker Copy",[508,588,589],{},[19,590,593],{"href":591,"rel":592},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Freference\u002Fcommandline\u002Fexec\u002F",[23],"Commande Docker Exec",[508,595,596],{},[19,597,600],{"href":598,"rel":599},"https:\u002F\u002Fhub.docker.com\u002F_\u002Fmongo",[23],"Image Docker MongoDB",[602,603,604],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":130,"searchDepth":156,"depth":156,"links":606},[607,608,609,610,611,617,622,623,624],{"id":12,"depth":156,"text":13},{"id":33,"depth":156,"text":34},{"id":40,"depth":156,"text":41},{"id":79,"depth":156,"text":80},{"id":107,"depth":156,"text":108,"children":612},[613,614,615,616],{"id":112,"depth":173,"text":113},{"id":119,"depth":173,"text":120},{"id":207,"depth":173,"text":208},{"id":299,"depth":173,"text":300},{"id":353,"depth":156,"text":354,"children":618},[619,620,621],{"id":370,"depth":173,"text":371},{"id":405,"depth":173,"text":406},{"id":437,"depth":173,"text":438},{"id":490,"depth":156,"text":491},{"id":537,"depth":156,"text":538},{"id":555,"depth":156,"text":556},"2024-07-18","Comment créer une sauvegarde complète d'une base MongoDB qui tourne dans un conteneur Docker et restaurer la sauvegarde dans un nouveau conteneur MongoDB.","md",null,{},true,"\u002Fdevops\u002Fbackup-and-restore-mongodb-in-docker-environment.fr",{"title":5,"description":626},"backup-restore-mongodb-docker-environment","devops\u002F3.backup-and-restore-mongodb-in docker-environment.fr",[636,637,638,639,640],"MongoDB","Docker","Docker-compose","Backup","Restore",[642,142,643],"devops","mongodb","y2upkEz4qakxdgMK0BMXEZ3QEYE5SD0FZKpDQt6bzUA",{"id":646,"title":647,"body":648,"date":625,"description":1167,"extension":627,"img":628,"meta":1168,"navigation":630,"path":1169,"seo":1170,"slug":633,"stem":1171,"tags":1172,"topics":1173,"__hash__":1174},"content\u002Fdevops\u002F3.backup-and-restore-mongodb-in docker-environment.md","Backup and Restore MongoDB in a Docker Environment",{"type":7,"value":649,"toc":1147},[650,652,663,667,670,674,680,686,692,698,704,708,711,717,723,729,732,736,740,743,747,750,800,804,810,813,837,846,863,866,869,873,879,882,896,904,907,910,913,916,920,929,932,936,939,965,969,972,986,993,997,1003,1027,1036,1039,1042,1046,1052,1058,1069,1075,1081,1087,1089,1096,1103,1107,1145],[10,651,13],{"id":12},[15,653,654,655,659,660,662],{},"In our previous post, we discussed how to run a MongoDB database in a Docker container. And we learned how to create a\n3-node replica set using Docker Compose. If you missed it, you can check it out ",[19,656,658],{"href":21,"rel":657},[23],"here",".\nIn this post, we'll cover an essential topic: ",[27,661,647],{},". I'll walk you\nthrough the process of creating a full backup of a MongoDB database running in a Docker container and restoring the\nbackup to a new MongoDB container.",[10,664,666],{"id":665},"the-importance-of-backups-in-a-containerized-environment","The importance of Backups in a Containerized Environment",[15,668,669],{},"Containers are designed to be ephemeral, meaning they can be created, destroyed and recreated at any time. While this\noffers flexibility, it also means that any data stored within a container is at risk of being lost when the container\nis removed, or lost due to corruption or other issues. Therefore, it's crucial to have a robust backup and restore\nstrategy to protect your data from loss or corruption and ensure data availability and business continuity.",[10,671,673],{"id":672},"why-backups-matter","Why backups matter",[15,675,44,676,679],{},[27,677,678],{},"Data Loss Prevention",": Backups are essential for preventing data loss due to accidental deletion, corruption, or\nhardware failure, or other unexpected events. Having a backup ensures that you can recover your data in case of any\nsuch event.",[15,681,51,682,685],{},[27,683,684],{},"Business Continuity",": Backups are crucial for maintaining business continuity in the event of data loss. Having a\nreliable backup strategy ensures that you can quickly recover your data and resume operations without significant\ndowntime, especially in containerized environments.",[15,687,58,688,691],{},[27,689,690],{},"Disaster Recovery",": Backups are an essential part of any disaster recovery plan. Having a reliable backup strategy\nensures that you can quickly recover your data and resume operations in the event of a disaster.",[15,693,65,694,697],{},[27,695,696],{},"Compliance and Legal Requirements",": Many industries have strict compliance and legal requirements regarding data",[15,699,72,700,703],{},[27,701,702],{},"Peace of Mind",": Having a reliable backup strategy in place gives you peace of mind knowing that your data is\nprotected and can be recovered in case of any event.",[10,705,707],{"id":706},"backup-strategies-for-mongodb","Backup strategies for MongoDB",[15,709,710],{},"MongoDB provides several options for backing up your data, including incremental backups, full backups, and\ndifferential backups.",[15,712,44,713,716],{},[27,714,715],{},"Incremental Backups",": Incremental backups capture only the changes made since the last backup, reducing the amount\nof data that needs to be backed up and speeding up the backup process, but can be complex to manage and restore.",[15,718,51,719,722],{},[27,720,721],{},"Full Backups",": Full backups capture the entire database, including all data and indexes. While full backups are more\ntime-consuming and resource-intensive than incremental backups, they provide a complete snapshot of the database that\ncan be used to restore the database to a specific point in time.",[15,724,58,725,728],{},[27,726,727],{},"Differential Backups",": Differential backups capture only the changes made since the last full backup, reducing the\namount of data that needs to be backed up compared to a full backup. This can be a good compromise between full and\nincremental backups, but can be also complex.",[15,730,731],{},"In this post, we'll focus on the full backup strategy as it's the simplest and most reliable method for backing up your\ndatabase.",[10,733,735],{"id":734},"performing-a-full-backup-of-mongodb","Performing a Full Backup of MongoDB",[110,737,739],{"id":738},"prerequisites","Prerequisites",[15,741,742],{},"1- Docker and Docker Compose installed on your system.\n2- Basic knowledge of Docker concepts such as volumes.\n3- Time to complete the tutorial: 6 to 10 minutes.",[110,744,746],{"id":745},"step-1-start-a-mongodb-container","Step 1: Start a MongoDB container",[15,748,749],{},"First, we'll pull the MongoDB image from Docker Hub and start a MongoDB container.",[125,751,752],{"className":127,"code":128,"language":129,"meta":130,"style":130},[132,753,754,764,776],{"__ignoreMap":130},[135,755,756,758,760,762],{"class":137,"line":138},[135,757,142],{"class":141},[135,759,146],{"class":145},[135,761,149],{"class":145},[135,763,153],{"class":152},[135,765,766,768,770,772,774],{"class":137,"line":156},[135,767,142],{"class":141},[135,769,161],{"class":145},[135,771,164],{"class":145},[135,773,167],{"class":145},[135,775,170],{"class":152},[135,777,778,780,782,784,786,788,790,792,794,796,798],{"class":137,"line":173},[135,779,142],{"class":141},[135,781,178],{"class":145},[135,783,181],{"class":145},[135,785,184],{"class":145},[135,787,187],{"class":145},[135,789,190],{"class":145},[135,791,193],{"class":145},[135,793,196],{"class":145},[135,795,199],{"class":145},[135,797,149],{"class":145},[135,799,204],{"class":152},[110,801,803],{"id":802},"step-2-run-the-mongodump-command","Step 2: Run the mongodump command",[15,805,806,807,809],{},"To create a full backup of your MongoDB database, you'll use the ",[132,808,214],{}," command, which is a utility provided by\nMongoDB. This command will create a binary export of your database that can be used to restore the data later.",[15,811,812],{},"Run the following from your host machine to create a full backup of your MongoDB database:",[125,814,815],{"className":127,"code":221,"language":129,"meta":130,"style":130},[132,816,817],{"__ignoreMap":130},[135,818,819,821,823,825,827,829,831,833,835],{"class":137,"line":138},[135,820,142],{"class":141},[135,822,230],{"class":145},[135,824,233],{"class":145},[135,826,187],{"class":145},[135,828,238],{"class":145},[135,830,241],{"class":145},[135,832,244],{"class":145},[135,834,247],{"class":145},[135,836,250],{"class":145},[15,838,839,840,842,843,845],{},"In my example my container is named mongo, and my database is named ",[132,841,260],{},", you should replace it with your database\nname. Also, notice the ",[132,844,264],{}," flag, which compresses the backup file to save disk space. My test database is about\n18MB, and the backup file is about 627KB. This is a significant reduction in size.",[15,847,848,849,851,852,854,855,857,858,860,861,288],{},"Another important thing is the ",[132,850,271],{}," flag, which specifies the connection string to the MongoDB database. In this case, we're connecting to the\nMongoDB database running on ",[132,853,275],{}," on port ",[132,856,279],{},". If you followed the previous post, you may have a replica set\nrunning on ",[132,859,283],{},". In this case, you should replace the connection string\nwith the appropriate one: ",[132,862,287],{},[15,864,865],{},"And if everything goes well, you should see a message indicating that the backup was successful. Something like this:",[293,867],{"alt":868,"source":296},"Successful backup of MongoDB",[110,870,872],{"id":871},"step-3-copy-the-backup-file-to-your-host-machine","Step 3: Copy the backup file to your host machine",[15,874,875,876,878],{},"The ",[132,877,214],{}," command will create a backup file inside the MongoDB container. But we should copy it to our host\nmachine because the container is ephemeral and can be destroyed at any time.",[15,880,881],{},"Run the following command to copy the backup file to your host machine:",[125,883,884],{"className":127,"code":312,"language":129,"meta":130,"style":130},[132,885,886],{"__ignoreMap":130},[135,887,888,890,892,894],{"class":137,"line":138},[135,889,142],{"class":141},[135,891,321],{"class":145},[135,893,324],{"class":145},[135,895,327],{"class":145},[329,897,898],{},[15,899,900,901,903],{},"Replace ",[132,902,336],{}," with the path where you want to store the backup file on your host machine.",[15,905,906],{},"If everything goes well, you should see a message indicating that the file was copied successfully. Something like this:",[293,908],{"alt":909,"source":344},"Successful copied archive",[15,911,912],{},"Congratulations! You've successfully created a full backup of your MongoDB database. You can now store this backup file\nin a safe location and use it to restore your data if needed. When I say safe location, I mean a location different\nfrom your local or server, because, if your local machine or server fails, you will lose both the database and the backup.",[15,914,915],{},"Another option is to use a cloud storage service like AWS S3, Google Cloud Storage, Azure Blob Storage, or MinIo to\nstore your backups. This way, your backups will be safe even if your local machine or server fails. You may also take\ncare of the security of your backups by encrypting them before storing them in the cloud. This way, you ensure the\ndatabase integrity and confidentiality.",[10,917,919],{"id":918},"performing-a-mongodb-restore","Performing a MongoDB Restore",[15,921,922,923,925,926,928],{},"Just as important as creating backups is the ability to restore them when needed. The ",[132,924,360],{}," command is used to\nrestore a MongoDB backup created with ",[132,927,214],{},". In this section, we'll walk you through the process of restoring a\nMongoDB backup in a containerized environment.",[15,930,931],{},"For this tutorial, we'll assume that our MongoDB container has been deleted unintentionally 😏, and the attached volume\nhas gone with it. We'll use the backup file we created earlier to restore the data.",[110,933,935],{"id":934},"step-1-start-a-new-mongodb-container","Step 1: Start a new MongoDB container",[15,937,938],{},"First, start a new MongoDB container using the same image and volume you used to create the backup.",[125,940,941],{"className":127,"code":377,"language":129,"meta":130,"style":130},[132,942,943],{"__ignoreMap":130},[135,944,945,947,949,951,953,955,957,959,961,963],{"class":137,"line":138},[135,946,142],{"class":141},[135,948,178],{"class":145},[135,950,181],{"class":145},[135,952,184],{"class":145},[135,954,187],{"class":145},[135,956,190],{"class":145},[135,958,193],{"class":145},[135,960,196],{"class":145},[135,962,199],{"class":145},[135,964,402],{"class":145},[110,966,968],{"id":967},"step-2-copy-the-backup-file-to-the-new-container","Step 2: Copy the backup file to the new container",[15,970,971],{},"Next, copy the backup file from your host machine or get it from the cloud storage to the new MongoDB container. For this\nexample, we will use the backup file we created earlier.",[125,973,974],{"className":127,"code":412,"language":129,"meta":130,"style":130},[132,975,976],{"__ignoreMap":130},[135,977,978,980,982,984],{"class":137,"line":138},[135,979,142],{"class":141},[135,981,321],{"class":145},[135,983,423],{"class":145},[135,985,426],{"class":145},[329,987,988],{},[15,989,900,990,992],{},[132,991,433],{}," with the path to the backup file on your host machine.",[110,994,996],{"id":995},"step-3-run-the-mongorestore-command","Step 3: Run the mongorestore command",[15,998,999,1000,1002],{},"Finally, use the ",[132,1001,360],{}," command to restore the backup file to the new MongoDB container.",[125,1004,1005],{"className":127,"code":447,"language":129,"meta":130,"style":130},[132,1006,1007],{"__ignoreMap":130},[135,1008,1009,1011,1013,1015,1017,1019,1021,1023,1025],{"class":137,"line":138},[135,1010,142],{"class":141},[135,1012,230],{"class":145},[135,1014,233],{"class":145},[135,1016,187],{"class":145},[135,1018,462],{"class":145},[135,1020,241],{"class":145},[135,1022,467],{"class":145},[135,1024,247],{"class":145},[135,1026,250],{"class":145},[15,1028,1029,1030,1032,1033,1035],{},"This command will restore the data from the backup file to the MongoDB database running in the new container. Notice\nthat we don't need to specify the database name because it's included in the backup file. The ",[132,1031,264],{}," flag is used to\ntell ",[132,1034,360],{}," that the backup file is compressed.",[15,1037,1038],{},"If everything goes well, you should see a message indicating that the restore was successful. Something like this:",[293,1040],{"alt":1041,"source":487},"Successful restored backup",[10,1043,1045],{"id":1044},"best-practices-for-mongodb-backups-in-a-containerized-environment","Best Practices for MongoDB Backups in a Containerized Environment",[15,1047,44,1048,1051],{},[27,1049,1050],{},"Use Volumes",": Store your MongoDB data on a volume to persist it even if the container is destroyed. This\nensures that your data is safe and can be easily backed up and restored.",[15,1053,51,1054,1057],{},[27,1055,1056],{},"Regular Backups",": Schedule regular backups of your MongoDB database to ensure that your data is always up-to-date\nand can be quickly restored in case of any event. Depending on your data, you may need to back up:",[505,1059,1060,1063,1066],{},[508,1061,1062],{},"Daily: ideal for databases with frequent changes.",[508,1064,1065],{},"weekly: suitable for moderately active databases; with less frequent changes.",[508,1067,1068],{},"monthly: for databases with infrequent changes.",[15,1070,58,1071,1074],{},[27,1072,1073],{},"Offsite Backups",": Store your backups in an offsite location, such as a cloud storage service, to ensure that your\ndata is safe even if your local machine or server fails. Remember to treat your database backups as sensitive data,\nmeaning you should encrypt them before storing them in the cloud, and restrict access to them to authorized staff only.",[15,1076,58,1077,1080],{},[27,1078,1079],{},"Automate Backups",": Set up automated backup jobs to run at regular intervals to ensure that your data is backed up\nregularly and consistently.",[15,1082,65,1083,1086],{},[27,1084,1085],{},"Test Restores",": Regularly test your backup and restore process to ensure that your backups are valid and can be restored\nsuccessfully. This will help you identify any issues with your backup strategy and make the necessary adjustments.\nAfter a backup, you should test the restore process in a sandbox environment to ensure that the backup is valid and can\nbe restored successfully. And one more important thing, you should document the restore process, to ensure that any\nauthorized staff can restore the database in case of any event.",[10,1088,538],{"id":537},[15,1090,1091,1092,1095],{},"In this article, we've covered the importance of backups in a containerized environment and walked you through the\nprocess of creating a full backup of a MongoDB database running in a Docker container. I've also shown you how to\nrestore the backup to a new MongoDB container. By following these steps and best practices, you can ensure that your\nMongoDB data is safe, secure, and always available, even in the event of data loss or corruption. ",[27,1093,1094],{},"Remember, having a\nbackup is essential, but being able to restore it is even more important",". So, make sure to test your backup and restore\nprocesses regularly to ensure that your data is protected and can be recovered when needed.",[15,1097,1098,1099,1102],{},"In a future post, we'll cover an interesting topic: ",[27,1100,1101],{},"Automating MongoDB Backups in a Containerized Environment",". I'm\npretty sure you'll love it, because it will save you time and effort. Stay tuned!",[10,1104,1106],{"id":1105},"references","References",[505,1108,1109,1115,1121,1127,1133,1139],{},[508,1110,1111],{},[19,1112,1114],{"href":563,"rel":1113},[23],"MongoDB Backup",[508,1116,1117],{},[19,1118,1120],{"href":570,"rel":1119},[23],"MongoDB Restore",[508,1122,1123],{},[19,1124,1126],{"href":577,"rel":1125},[23],"Docker Volumes",[508,1128,1129],{},[19,1130,1132],{"href":584,"rel":1131},[23],"Docker Copy Command",[508,1134,1135],{},[19,1136,1138],{"href":591,"rel":1137},[23],"Docker Exec Command",[508,1140,1141],{},[19,1142,1144],{"href":598,"rel":1143},[23],"Docker MongoDB Image",[602,1146,604],{},{"title":130,"searchDepth":156,"depth":156,"links":1148},[1149,1150,1151,1152,1153,1159,1164,1165,1166],{"id":12,"depth":156,"text":13},{"id":665,"depth":156,"text":666},{"id":672,"depth":156,"text":673},{"id":706,"depth":156,"text":707},{"id":734,"depth":156,"text":735,"children":1154},[1155,1156,1157,1158],{"id":738,"depth":173,"text":739},{"id":745,"depth":173,"text":746},{"id":802,"depth":173,"text":803},{"id":871,"depth":173,"text":872},{"id":918,"depth":156,"text":919,"children":1160},[1161,1162,1163],{"id":934,"depth":173,"text":935},{"id":967,"depth":173,"text":968},{"id":995,"depth":173,"text":996},{"id":1044,"depth":156,"text":1045},{"id":537,"depth":156,"text":538},{"id":1105,"depth":156,"text":1106},"How to create a full backup of a MongoDB database running in a Docker container and restore the backup to a new MongoDB container.",{},"\u002Fdevops\u002Fbackup-and-restore-mongodb-in-docker-environment",{"title":647,"description":1167},"devops\u002F3.backup-and-restore-mongodb-in docker-environment",[636,637,638,639,640],[642,142,643],"kjPwqgCekHliQLvQ0fhcPt1l7vGkHFN8pvW95Ud2iu4",[1176,628],{"title":1177,"path":1178},"Mettre en place un cluster MongoDB Replica Set à 3 nœuds avec Docker Compose","\u002Fdevops\u002Fset-up-mongodb-replica-with-docker.fr",[1180,1186],{"path":1178,"title":1177,"description":1181,"date":1182,"tags":1183,"topics":1185},"Comment mettre en place un cluster MongoDB replica set à 3 nœuds avec Docker Compose. Apprends ce qu'est un replica set MongoDB, les prérequis, et les étapes pour créer un fichier Docker Compose qui le configure.","2024-07-17",[636,1184,637,638],"Replica-Set",[642,142,643],{"path":1187,"title":1188,"description":1189,"date":1190,"tags":1191,"topics":1197},"\u002Fdevops\u002Fdeploy-expressjs-api-using-docker.fr","Déployer une API Express.js avec Docker","Comment déployer une API REST Express.js avec Docker, avec un focus sur les performances MongoDB, les builds Docker multi-stage, Jest pour les tests, et Nginx comme reverse proxy.","2024-04-11",[1192,1193,1194,1195,1196,637],"Express.JS","API","Node.js","Mongo","CI\u002FCD",[1198,642],"backend",1780074485754]