DockerでMongoDBコンテナ起動時に初期データをインポートする
はじめに
DockerでMongoDBをコンテナを立ち上げ、データを確認するまでの最小限の構成になります。
やりたいこと
- コンテナ作成時に初期データを投入したい
- 投入したデータをGUIクライアントで参照したい
ディレクトリ構成
.
├── docker-entrypoint-initdb.d
│ ├── 1-mongo-init.js
│ ├── 2-mongo-init.sh
│ └── staffs.json
└── docker-compose.yml
各ファイルの内容
docker-compose.yml
「MONGO_INITDB_DATABASE」に指定した名称でデータベースが作成されます。
version: '3.3'
services:
mongo:
image: mongo
container_name: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: mongo
MONGO_INITDB_ROOT_PASSWORD: mongo
MONGO_INITDB_DATABASE: mongo_example
TZ: Asia/Tokyo
ports:
- 27018:27017
volumes:
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
docker-entrypoint-initdb.d/1-mongo-init.js
ユーザの作成と合わせて、コレクションの作成をしています。
ここでは例としてstaffsコレクションを作成します。
var user = {
user: "mongo",
pwd: "mongo",
roles: [
{
role: "dbOwner",
db: "mongo_example"
}
]
};
db.createUser(user);
db.createCollection('staffs');
docker-entrypoint-initdb.d/2-mongo-init.sh
作成したユーザ、パスワード、データベース、コレクションと、インポートするJSONファイルを指定します。
mongoimport -u mongo -p mongo --db mongo_example --collection staffs --file /docker-entrypoint-initdb.d/staffs.json --jsonArray
docker-entrypoint-initdb.d/staffs.json
staffsコレクションにインポートするデータをJSONファイルで用意します。
[
{
"id" : 1,
"name" : "佐藤"
},
{
"id" : 2,
"name" : "鈴木"
},
{
"id" : 3,
"name" : "田中"
}
]
実行
docker-composeで起動します。
$ docker-compose up -d
Creating network "mongodb_default" with the default driver
Creating mongo ... done
GUIクライアントで確認する
1. MongoDB Compassをダウンロード
MongoDB CompassからPlatformを選択しDownloadボタンをクリックします。
2. 接続
Paste your connection stringに以下の接続情報を入力し、CONNECTボタンをクリックします。
mongodb://mongo:mongo@localhost:27018
3. 結果
staffコレクションにデータをインポートできていることが確認できます。
Author And Source
この問題について(DockerでMongoDBコンテナ起動時に初期データをインポートする), 我々は、より多くの情報をここで見つけました https://qiita.com/kkamizuru/items/c1c7c99c8102ca0a75ec著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .