MongoDBをDockerでつかってみた話
はじめに
とある案件で、DBの正規化が面倒臭そう&ちょっとの間だけしか利用しないシステムだったので、RDBSではなくNoSQLを使用することにした。
MongoDBをDockerで使用して見たところ、認証周りがイマイチ分からなかったので、自分がやったことをまとめ
環境
- Docker: 20.10.6, build 370c289
- docker-compose: 1.29.1, build c34c88b2
- MongoDB: 3.4.4
参考サイト
MongoDBの構築
LinuxからMongoDBサーバを構築するのは面倒臭いので、Dockerから使用してみることにした。
docker-compose.ymlのは以下の感じ
version: '3' services: mongo: image: mongo:3.4.4 container_name: sample-mongo-db ports: - 27017:27017 volumes: - ./mongo/db:/data/db - ./mongo/configdb:/data/configdb environment: MONGO_INITDB_ROOT_USERNAME: sampleAdmin MONGO_INITDB_ROOT_PASSWORD: thisIsTest MONGO_INITDB_DATABASE: sample-db TZ: Asia/Tokyo
MongoDBのイメージのバージョンは3.4.4
AWSのMongoDBのイメージ(AMI)が3.4.4のため
MongoDBの認証
コンソールから認証するときに、結構つまずいたのでメモ書き
$ mongo
使用するDBの切り替え
use admin
認証
db.auth("sampleAdmin", "thisIsTest")
認証に成功すると「1」、失敗すると「0」と返される
ユーザの追加
adminのログインを済ませた状態でDBの切り替え、「sample-db」を読み書きするユーザを追加する
use sample-db db.createUser({ user: "sample-app-user", pwd: "S@mple", roles: [ { role: "readWrite", db: "sample-db" } ] })
コンソール画面からコレを入力するのは面倒臭いね・・・
ユーザの自動追加
「/docker-entrypoint-initdb.d」というディレクトリに、.jsか.shファイルを置いておくと、自動的にスクリプトが実行され、ユーザの追加とかできるらしい
docker-compose.ymlに「/docker-entrypoint-initdb.d」のマウント設定を追加
version: '3' services: mongo: image: mongo:3.4.4 container_name: sample-mongo-db ports: - 27017:27017 volumes: - ./mongo/db:/data/db - ./mongo/configdb:/data/configdb - ./mongo/init:/docker-entrypoint-initdb.d environment: MONGO_INITDB_ROOT_USERNAME: sampleAdmin MONGO_INITDB_ROOT_PASSWORD: thisIsTest MONGO_INITDB_DATABASE: sample-db TZ: Asia/Tokyo
ユーザを追加するスクリプト
var users = [ { user: "sample-app-user", pwd: "S@mple", roles: [ { role: "readWrite", db: "sample-db" } ] } ]; users.forEach(user => { db.createUser(user); });