Skip to content

Instantly share code, notes, and snippets.

@taichunmin
Created September 13, 2017 05:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taichunmin/9557907eb61c9c9df941d30c18c2af0f to your computer and use it in GitHub Desktop.
Save taichunmin/9557907eb61c9c9df941d30c18c2af0f to your computer and use it in GitHub Desktop.

用 Docker 來製作優雅的 MongoDB Seeder

本篇是原文 Delightful Database Seeding with Docker 的摘要

流程總共區分為三個階段:

  • 複製正式伺服器的資料並清理
  • 打包並發佈 Seeder
  • 使用 Seeder 匯入資料

清理正式伺服器的資料

  1. 首先,假設我們正式伺服器的 dump 資料為 prod-dump.tar.gz
  2. 啟動一個 MongoDB Docker 並將 prod-dump.tar.gz 以 volumn 掛載入 container
  3. 於 container 中執行清除資料用腳本 clean.js
  4. 將清理過的資料再 dump 到 clean-dump.tar.gz

Imgur

打包並發佈 Seeder

  1. 撰寫一個 Seeder 的 Dockerfile 如下

    FROM mongo:3.0.1
    ADD clean-dump.tar.gz /work
    ADD attachments.tar.gz /work

    Imgur

  2. 自動 build 以後放到 registry (私人的 Docker Hub) 上 Imgur

使用 Seeder 匯入資料

  1. 使用兩個指令來分別匯入 db 資料和 attachments 如下:

    docker run --rm --link ardoq_mongodb_1:mongodb ardoq/demo-seed:latest mongorestore -h mongodb /work/demo_seed
    docker run --rm --volumes-from ardoq_mongodb_1 ardoq/demo-seed:latest cp -r /work/attachments /data

    Imgur

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment