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を書くためのディレクトリをマウントしておきます。
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ファイルに以下のコードを記述します。
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ユーザーが作成された後に、パスワードを変更しようとしても変更が反映されないことがあります。この場合、以下の手順で対応します。
mongodb/data
ディレクトリを削除します。docker-compose down --volumes
コマンドを実行して、ボリューム設定を削除します。
これにより、再度docker-compose up
を実行すると、新しいパスワードが反映されます。
7. まとめ
この記事では、Dockerを用いたMongoDBの環境構築方法について説明しました。ディレクトリ構造の作成、docker-compose.ymlの設定、ユーザー作成用の設定を行うことで、MongoDBとMongo Expressの環境を簡単に構築できます。注意点として、パスワード変更が反映されない場合の対処法も紹介しました。これらの手順を参考に、Dockerを活用して効率的なMongoDB環境を構築してみてください。
タグ
そらえふ
ソフトウェアエンジニア。趣味は競馬、写真、ゲーム。
お問い合わせはXのDMでお願いします。