Primary About Development

Dockerを使ってMongoDBの環境構築をする方法

2023-04-10

目次

1. はじめに

この記事では、Dockerを用いたMongoDBの環境構築についてわかりやすく説明します。DockerやMongoDBに詳しくない方でも、簡単に理解できるように注意して解説していきます。

2. DockerとMongoDBの概要

Dockerは、プログラムを実行するための環境をコンテナとして管理し、それらの環境を一貫性を持って移動、共有、デプロイできるようにするためのプラットフォームです。MongoDBは、高い性能と拡張性を持つオープンソースのNoSQLデータベースです。

3. ディレクトリ構造

まず、次のようなディレクトリ構造を作成しましょう。

.
├── mongodb
│   └── initdb.d
│       └── create_user.js
│   └── data
├── docker-compose.yml

4. docker-compose.ymlの設定

docker-compose.ymlには、MongoDBとWebからMongoDBのデータを閲覧できるMongo Expressを設定します。また、VolumesにMongoDBのデータが入るディレクトリとユーザー作成用のJSを書くためのディレクトリをマウントしておきます。

docker-compose.yml
version: "3.0"

services:      
  db:
    image: mongo
    container_name: "mongodb"
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./mongodb/initdb.d:/docker-entrypoint-initdb.d
      - ./mongodb/data:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
  
  mongo-express:
    image: mongo-express
    container_name: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: password
      ME_CONFIG_MONGODB_SERVER: db
    depends_on:
      - db

docker-compose.ymlは、複数のDockerコンテナを一度に管理し、それらの設定を一元化するための設定ファイルです。ここでは、MongoDBとMongo Express(MongoDBのデータをWebから閲覧できるツール)を設定します。また、MongoDBのデータ保存先やユーザー作成用のスクリプトを配置するディレクトリを設定します。

以下、各項目の詳細解説です。

  • version: docker-compose.ymlファイルのバージョン。"3.0"と指定しています。
  • services: 複数のコンテナサービスを記述するセクションです。以下、2つのサービスを設定します。
    • db: MongoDBのコンテナ設定です。
      • image: 使用するDockerイメージ。公式のMongoDBイメージを指定しています。
      • container_name: コンテナの名前。ここでは"mongodb"としています。
      • restart: コンテナの再起動ポリシー。"always"を指定することで、コンテナが停止した場合に自動的に再起動します。
      • ports: ホストとコンテナのポートマッピング。27017番ポートを指定しています。
      • volumes: ホストとコンテナのディレクトリマッピング。ユーザー作成用スクリプトとデータ保存用ディレクトリをマウントしています。
      • environment: コンテナの環境変数。rootユーザーの名前とパスワードを設定しています。
    • mongo-express: Mongo Expressのコンテナ設定です。
      • image: 使用するDockerイメージ。公式のMongo Expressイメージを指定しています。
      • container_name: コンテナの名前。ここでは"mongo-express"としています。
      • restart: コンテナの再起動ポリシー。"always"を指定することで、コンテナが停止した場合に自動的に再起動します。
      • ports: ホストとコンテナのポートマッピング。8081番ポートを指定しています。
      • environment: コンテナの環境変数。MongoDBのrootユーザー名、パスワード、接続先の設定を行っています。
      • depends_on: 他のサービスとの依存関係。ここでは"db"サービス(MongoDB)に依存していることを示しています。

この設定により、Dockerを用いてMongoDBとMongo Expressの環境を構築することができます

5. ユーザ作成用の設定を書く

次に、MongoDBにアクセスするためのユーザーを作成するための設定を記述します。mongodb/initdb.dディレクトリにあるcreate_user.jsファイルに以下のコードを記述します。

create_user.js
db = db.getSiblingDB("admin");
db.createUser({
  user: "root",
  pwd: "password",
  roles: [{role: "root", db: "admin"}]
});

このスクリプトでは、以下の操作を行っています。

  • db.getSiblingDB("admin"): "admin"データベースを選択します。
  • db.createUser(): ユーザーを作成します。ここでは、ユーザー名 "root"、パスワード "password"、ロール "root" を持つユーザーを "admin" データベースに作成しています。

6. 注意点

docker-compose upを実行し、一度rootユーザーが作成された後に、パスワードを変更しようとしても変更が反映されないことがあります。この場合、以下の手順で対応します。

  1. mongodb/dataディレクトリを削除します。
  2. docker-compose down --volumesコマンドを実行して、ボリューム設定を削除します。

これにより、再度docker-compose upを実行すると、新しいパスワードが反映されます。

7. まとめ

この記事では、Dockerを用いたMongoDBの環境構築方法について説明しました。ディレクトリ構造の作成、docker-compose.ymlの設定、ユーザー作成用の設定を行うことで、MongoDBとMongo Expressの環境を簡単に構築できます。注意点として、パスワード変更が反映されない場合の対処法も紹介しました。これらの手順を参考に、Dockerを活用して効率的なMongoDB環境を構築してみてください。

プロフィール写真

Soraef

ソフトウェアエンジニア。趣味は競馬、写真、ゲーム。

お問い合わせはTwitterのDMでお願いします。