12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerでMongoDB

Last updated at Posted at 2020-03-08

ローカルでMongoDBを使ったアプリを開発する際に、dockerを使うと便利.

docker-compose

開発環境で利用する docker-compose.dev.yaml を準備する.

Port

mongodbのデフォルトのポートは 27017 だが、コンテナ外からアクセスするためにローカルの 27018 をポートフォワードしておく.

Volumes

  • ./mongo/db:/data/db ./mongo/configdb:/data/configdb はデータの永続化に必要.
  • ./mongo/init:/docker-entrypoint-initdb.d にデータベースの初期化のための .jsファイルを入れておく. 後述.

Environment

  • MONGO_INITDB_ROOT_USERNAME: rootユーザの名称
  • MONGO_INITDB_ROOT_PASSWORD: rootユーザのパスワード
  • MONGO_INITDB_DATABASE: コンテナ作成時に初期化されるデータベース
dokcer-compose.dev.yaml
  mongo:
    container_name: mongo
    restart: always
    image: mongo:4.2.0
    ports:
      - "27018:27017"
    volumes:
      - ./mongo/db:/data/db
      - ./mongo/configdb:/data/configdb
      - ./mongo/init:/docker-entrypoint-initdb.d
    environment:
      MONGO_INITDB_ROOT_USERNAME: <root_user_name>
      MONGO_INITDB_ROOT_PASSWORD: <root_password>
      MONGO_INITDB_DATABASE: <database_name>
      TZ: Asia/Tokyo

初期データ

.js.sh./mongo/init 以下に置いておくことで、初期データが投入される.
以下の記事にてそれぞれのファイルが読み込まれる仕組みが詳述してあります.
https://qiita.com/homines22/items/038dc08fca6405813e0b

認証用ユーザの作成

docker-composeで立ち上げたmongoコンテナに、ローカルからアクセスするユーザを作成する.
ユーザはアクセスできるデータベースが割り当てられている.(authenticationDatabase)

1-mongo-init.js

var users = [
  {
    user: "<user_name>",
    pwd: "<pass_word>",
    roles: [
      {
        role: "dbOwner",
        db: "<db_name>"
      }
    ]
  }
];

for (var i = 0, length = users.length; i < length; ++i) {
  db.createUser(users[i]);
}

Jsonファイルのインポート

ユーザデータだけでなく、手元のJsonデータを適当なcollectionに投入しておきたいケースもある.

2-mongo-init.sh
mongoimport --db <db_name> --collection <collection_name> --drop --file /docker-entrypoint-initdb.d/<your_json.json> --jsonArray
  • --drop オプションをつけることで、実行時に対象のcollectionが存在した場合にそれを削除して初期データを投入する.
  • --jsonArray オプションをつけることで、array形式になっているJsonファイルも読み込める. (insertManyする感じ.)

コンテナ外からのアクセス

作成されたユーザを使って、以下のコマンドでローカルのターミナルからmongoに入れる.

$ mongo -u <user_name> -p --port 27018 --host 127.0.0.1 --authenticationDatabase <db_name>
12
15
2

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
12
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?