Dockerで起動しているMongoDBにリストアする
2019/03/25
docker run --rm --link mongo_mongodb_1:mongo -v /var/www/mongo/backup/:/backup --network mongo_default mongo:3.2 bash -c 'mongorestore --db ${DATABASE_NAME} --host mongo /backup'

mongo:3.2を起動して、mongo_defaultというネットワーク上にある、mongo_mongodb_1というコンテナに接続する。
ホストの/var/www/mongo/backup/ディレクトリにある、リストアデータを/backupにマウントする。
mongorestoreコマンドを実行して、終了したら、今回起動したコンテナを削除する。

オプションの説明

--rm

--rm

今回走らせるdockerコンテナがexitしたときに、コンテナを削除する

--link

--link mongo_mongodb_1:mongo

(container_name:ALIAS)
起動中のコンテナmongo_mongodb_1にmongoとして接続できるようにしている

docker psしたときに表示されるNAMESを指定している

$ docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                          PORTS                                      NAMES
79412c85455e        mongo-express                            "tini -- node app"       19 hours ago        Up 19 hours                     8081/tcp                                   mongo_mongo-express_1
d2381e8d539c        jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   19 hours ago        Up 19 hours                                                                letsencrypt-nginx
ecf74e818b8e        jwilder/nginx-proxy                      "/app/docker-entrypo…"   19 hours ago        Up 19 hours                     0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx-proxy
88085298f1e5        mongo:3.2                                "docker-entrypoint.s…"   41 hours ago        Up 19 hours                     0.0.0.0:27017->27017/tcp                   mongo_mongodb_1

-v

-v /var/www/mongo/backup/:/backup

今回走らせるdockerコンテナ内の/backupにホストの/var/www/mongo/backup/をマウントしている

backupディレクトリの中身は、以下のようになっている

$ ls -l backup/
合計 203496
-rw-r--r-- 1 admin admin     17545  3月 14 10:44 admin-sessions.bson
-rw-r--r-- 1 admin admin       200  3月 14 10:44 admin-sessions.metadata.json
-rw-r--r-- 1 admin admin     12507  3月 14 10:44 authors.bson
.
.
.
-rw-r--r-- 1 admin admin        92  3月 14 10:47 userinfos.metadata.json
-rw-r--r-- 1 admin admin     29198  3月 14 10:47 users.bson
-rw-r--r-- 1 admin admin        88  3月 14 10:47 users.metadata.json

--network

--network mongo_default

もし、mongoが別ネットワーク上で起動している場合は、このオプションで、mongoが起動しているネットワークに接続する

実行コマンド

bash -c 'mongorestore --db ${DATABASE_NAME} --host mongo /backup'

--linkで接続したmongoに、--host mongoで接続して、
${DATABASE_NAME}にリストアしている

確認

バックアップデータをDocker内のMongoDBにリストアできたか確認します。

まずは、MongoDBコンテナ内に入る

$ docker exec -it mongo_mongodb_1 bash
root@88085298f1e5:

mongoシェルに入って、データベースがあるか確認

root@88085298f1e5:/# mongo
MongoDB shell version: 3.2.19
connecting to: test

> show dbs		# データベース一覧を表示する
${DATABASE_NAME}	0.195GB
local         		0.000GB

無事、リストアできていることが確認できました。

あとは、実行コマンドをinit.shのようなシェルスクリプトにしてしまえば、開発環境の構築がラクになりそうですね!