Docker内のMongoDBにデータをインポート&エクスポート

プログラミング

Docker内に構築したMongoDBに対してjsonファイルからデータをインポートします。その後、インポートしたデータをエクスポートして取り出します。
環境は以下で構築したものを使用します。

インポートデータをMongoDBコンテナにコピー

# インポートするデータは駅.JPの駅データをJSON形式に変換したものを使用します。
$ ls /share
station20200619free.json

# コマンド例:docker cp <コピー元> <コンテナID>:<コピー先>
$ docker cp /share/station20200619free.json 9ec0efe07dfe:/data/

# MongoDBコンテナに入る
$ doker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                      NAMES
005abcf8b589        mongo-express        "tini -- /docker-ent…"   3 days ago          Up 3 minutes        0.0.0.0:8081->8081/tcp     mongo-compose_mongo-express_1
9ec0efe07dfe        mongo                "docker-entrypoint.s…"   3 days ago          Up 3 minutes        0.0.0.0:27017->27017/tcp   mongo-compose_mongo_1

# ファイルがコンテナ内にコピーされている
$ docker exec -it 9ec0efe07dfe /bin/bash
[root@9ec0efe07dfe:/data] ls /data
station20200619free.json

MongoDBにデータをインポート

# mongoimportコマンドでデータをインポート
[root@9ec0efe07dfe:/data]mongoimport  --authenticationDatabase admin -u root -p mongo --db ekidata --collection station --drop --file station20200619free.json
2020-07-16T12:15:50.248+0000    connected to: mongodb://localhost/
2020-07-16T12:15:50.249+0000    dropping: ekidata.stationr
2020-07-16T12:15:52.174+0000    Failed: cannot decode boolean into a slice
2020-07-16T12:15:52.174+0000    10000 document(s) imported successfully. 0 document(s) failed to import.

インポートデータを参照

mongo-expressでデータを参照する。

データが正常に投入されている。

登録したデータをエクスポート

# データをエクスポート
[root@9ec0efe07dfe:/data]mongoexport --authenticationDatabase admin -u root -p mongo --db ekidata --collection station --out /data/station.json
2020-07-16T12:35:13.247+0000    connected to: mongodb://localhost/
2020-07-16T12:35:14.241+0000    exported 10000 records

# データを確認
[root@9ec0efe07dfe:/data]ls /data
station.json  station20200619free.json

エクスポートデータをホストOSにコピー

# ホストでコピーを実行 
$ docker cp 9ec0efe07dfe:/data/station.json ./

$ ls
station.json

正常にファイルがエクスポートされました。

以上でDocker内のMongoDBにデータをインポート&エクスポートは完了です。

pocketcode

30代のWEB系企業エンジニアです。毎回同じようなことを検索してしまうので、自分の備忘録的に書いています。サイトのデザインはQiita(https://qiita.com)さんに寄せています。