LoginSignup
4
8

More than 3 years have passed since last update.

DockerでMongoDBコンテナ起動時に初期データをインポートする

Last updated at Posted at 2020-07-12

はじめに

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」に指定した名称でデータベースが作成されます。

docker-compose.yml
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コレクションを作成します。

docker-entrypoint-initdb.d/1-mongo-init.js
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ファイルを指定します。

docker-entrypoint-initdb.d/2-mongo-init.sh
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ファイルで用意します。

docker-entrypoint-initdb.d/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

スクリーンショット 2020-07-13 1.31.20.png

3. 結果

staffコレクションにデータをインポートできていることが確認できます。

スクリーンショット 2020-07-13 1.51.39.png

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8