Dockerで起動しているMongoDBにリストアする
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
のようなシェルスクリプトにしてしまえば、開発環境の構築がラクになりそうですね!