【Docker × MongoDB】docker-composeでMongoDB環境を構築してみた

mongoDB
  • URLをコピーしました!

こんにちは!RYOTAです!

当記事をご覧いただきありがとうございます!

これまでNoSQLデータベースを使ったことがなかったのですが、勉強会でMongoDBを触ってみることになったので環境構築の方法を解説しようと思います!

目次

はじめに

今回はMongoDBをローカルで立ち上げてmongo-expressでデータ確認ができる状態を目指します。

ディレクトリ構成は下記の通りです。

├─ mongo
├─ .env
└─ docker-compose.yml

実装方法

Dockerの設定

docker-compose.ymlにMongoDBの設定を記述します。

MongoDBのデフォルトポートは27017みたいなので変更せずに指定してみます。

version: "3"

services:
  mongo:
    container_name: mongo
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGODB_USERNAME}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD}
    ports:
      - 27017:27017
    volumes:
      - ./mongo:/data/db
      - ./mongo:/data/configdb

  mongo-express:
    container_name: mongo_express
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_SERVER: mongo
      ME_CONFIG_MONGODB_PORT: 27017
      ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGODB_USERNAME}
      ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGODB_PASSWORD}
    depends_on:
      - mongo

ymlの記述ができたら環境変数にユーザー名とパスワードの指定をします。

指定は.envに記述をします。

MONGODB_USERNAME={ユーザー名を入力}
MONGODB_PASSWORD={パスワードを入力}

Docker起動

設定が完了したらコンテナのビルドをします。

$ docker-compose build

ビルドが完了したら実際にコンテナを起動します。

$ docker-compose up -d

コンテナが立ち上がっているか確認します。

$ docker-compose ps

無事にmongoコンテナとmongo-expressが立ち上がっていれば完了です。

MongoDBを使ってみる

コンテナが立ち上がったので実施にMongoDBにアクセスしてみようと思います。

MongoDBへログイン

まずはmongoコンテナにアクセスします。

$ docker-compose exec mongo bash

コンテナにアクセスできたらMongoDBにアクセスします。

.envで設定したユーザーとパスワードを指定してログインします。

下記コマンドを叩くとパスワードを要求されるので.envで指定したパスワードを入力します。

$ mongo -u {.envで指定したユーザー名} -p
# -> Enter password: 

DB確認

下記コマンドでデータベース一覧を確認してみます。

$ show dbs
# -> admin   0.000GB
# -> config  0.000GB
# -> local   0.000GB

admin、comfig、localというDBができてるっぽいですね。

Admin情報の確認

adminというDBにユーザー情報ができているか確認してみます。

# DB切り替え
$ use admin
# -> switched to db admin

# コレクションを確認
$ show collections
# -> system.users
# -> system.version

# ドキュメントを確認
$ db.system.users.find()
# -> Admin情報が表示

Adminユーザーがありますね!

無事に作成できてるようです!

テストデータ作成

次はドキュメント(テストデータ)を作成してみます。

ドキュメント作成手順

  1. データベース: testdb を作成
  2. コレクション: users を作成
  3. ドキュメント: testA を作成
# Db作成
$ use testdb
# -> switched to db testdb

# コレクション作成
$ db.createCollection('users')
# -> { "ok" : 1 }

# コレクション一覧確認
$ show collections
# -> users

# ドキュメント作成
$ db.users.insert({ name: "testA", age: 29})
# -> WriteResult({ "nInserted" : 1 })

# ドキュメント一覧を確認
$ db.users.find()
# -> { "_id" : ObjectId("61da92564fde4e8f7fbcff31"), "name" : "testA", "age" : 29 }

無事に作成されましたね!

idはハッシュが自動的に付与されるようですね!

mongo-expressを使ってみる

先程まではシェル上から直接MongoDBを操作しましたが、docker-composeで一緒に設定したmongo-expressというツールでGUI操作が出来るようなのでそちらも使ってみます。

DB一覧確認

docker-composeでポート設定している通りブラウザでport8081にアクセスします。

localhost:8081

上手く立ち上がっていると下記のページが表示されるはずです。

事前に作成されているadmin、config、local、というDBに加えて先程作成したtestdbも存在していますね。

試しにtestdbの中身を見てみましょう。

DB詳細&コレクション一覧確認

testdbの左にあるViewをクリックするとtestdb内のCollection一覧が表示されます。(usersしか作成していないので当然一つしか表示されません。)

コレクション詳細&ドキュメント一覧確認

usersの一番左のViewをクリックしてみます。

先程作成したユーザー[testA]が見れますね!

ドキュメント詳細確認

更にtestAのレコードをクリックすると

データの詳細が見れますね!便利!!

しかもこの中で直接編集してSavaを押すとドキュメントの更新、Deleteでドキュメントの削除まで可能!これは良い!!

直感的に扱えるのでとても良い!開発効率が上がりそうですね!

さいごに

今回はNoSQLのMongoDBをdocker-composeで立ち上げて触ってみました!

NoSQLの方が一般的に処理が早く拡張性も高いようなので、チャット機能の開発ではこちらのMongoDBを用いてみようと思います!

最後までご覧くださりありがとうございました!

mongoDB

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次