前人未踏の領域へ WEB・インフラ・プログラミング全般編

フロントエンド、バックエンド、インフラ、言語など、アプリ開発、IOT以外の記録

DockerにMongoDBのデータをリストアする

課題

既存のMongoDBのデータがあり、そのダンプをDocker化するにあたって初期データとしてリストアしたい。

条件

  • Docker Composeは繰り返し利用するので初期データの投入に関わる処理は記述したくない
  • あとからdocker-compose.ymlを書き直ししたくない
  • ローカル領域を記述して環境依存をさせたくない
  • ローカルPCにmongodbはインストールしたくない

対策

  • volumes を利用する。

docker-compose.yml編集

docker-compose.ymを作る。 データディレクトリを volumes: に定義

version: '3'
services:
  api:
    build: .
    ports:
    - "9080:9080"
  mongo:
    image: "mongo:latest"
    volumes:
     - mongo-data:/data/db
  mongo-express:
    image: "mongo-express:latest"
    ports:
    - "8081:8081"
    links:
     - mongo
volumes:
  mongo-data:

ひとまず起動・停止してvolumeを作っておく。

$ docker-compose up
$ docker-compose down

データ投入用mongo起動

先ほど作成したvolumeを参照するためにmongoを立ち上げる。

$ cd workdir //ダンプファイルが置いてあるディレクトリ
$ docker run --rm -v "projectname_mongo-data:/data/db" -v "$PWD":/work -w "/work" --name mongo -d mongo

-v "projectname_mongo-data:/data/db" でdocker-composeで作成したvolumeに接続するのがポイント。

データリストア

$ docker exec mongo mongorestore /work/mongodb_dump

確認

http://localhost:8081/ にアクセスしてDBのリストアが成功していることが確認できればOK。
普通にポート開けてMongoDBインストール済みのマシンから mongorestore した方が多分楽チン。

/* Responsive: yes */