課題
既存の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 した方が多分楽チン。