LoginSignup
1
1

More than 1 year has passed since last update.

docker-composeでmongodbを用意して初期セットアップまで行う

Last updated at Posted at 2023-03-13

たいした話ではないですが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にこういった初期セットアップ作業は不要ですかね??
勉強不足ですみませんですが、誰かの役に立てば幸いです。

1
1
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
1
1