たいした話ではないですがMongoDBのコネクションプールがわからなかったので調査の続きです。
Express + MongoDBで個人開発を行っていましたが、チーム開発に昇格したためMongoDBをdocker compose化して誰でも簡単に環境構築できるようにしました。
前提
- Windows10
- WSL2
ディレクトリ構造
こんな感じです。
setup.jsをentrypointとして流し込み、データベースやコレクションの作成を行い初期セットアップとします。
ターミナル
docker-compose.yaml
mongo
├ Dockerfile
├ setup.js
mongo
docker-compose.yamlに直接mongoのイメージを指定してentrypointを実行する方法がわからなかったのでDockerfileからビルドすることにしました。
(docker-composeでやる方法あるかもですがあまり調査に時間かけたくなかったので。。。。)
Dockerfile
FROM mongo:4
# mongo自身のrootユーザとパスワード設定
ENV MONGO_INITDB_ROOT_USERNAME sample_user
ENV MONGO_INITDB_ROOT_PASSWORD sample_pass
ENV TZ="Asia/Tokyo"
RUN echo $TZ > /etc/timezone
# setup.jsをentrypointにコピーし、イメージ作成時に初期セットアップを実行
COPY setup.js /docker-entrypoint-initdb.d/
setup.js
// sample_dbというデータベースにsampleというコレクションを作成
db = db.getSiblingDB('sample_db');
db.createCollection('sample');
compose
上記で用意したDockerfileをdocker-compose.yamlで指定すればOKです
docker-compose.yaml
version: '3.1'
services:
mongo:
build: ./mongo # ここでDockerfileが配置されているディレクトリを指定
restart: always
ports:
- 27017:27017
volumes:
- ./mongo/db:/data/db
- ./mongo/configdb:/data/configdb
# せっかくなのでmongo-expressも使えるようにセットアップ
mongo-express:
image: mongo-express
restart: always
ports:
- 8080:8080
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: sample_user
ME_CONFIG_MONGODB_ADMINPASSWORD: sample_pass
ME_CONFIG_MONGODB_SERVER: mongo
depends_on:
- mongo
あとはdocker-compose up -d
などして起動できればOKです。
RDBのDDL的ノリでmongoのセットアップを行いましたが、もしかしてスキーマレスのmongodbにこういった初期セットアップ作業は不要ですかね??
勉強不足ですみませんですが、誰かの役に立てば幸いです。