この記事の内容
- M1 MacでMongoDBを環境構築した時の備忘録
- おそらくM1じゃなくても動く(未検証)
補足
動作確認したPCのスペック
- チップ:Apple M1
- macOS:Sonoma
Dockerの設定
早速docker-compose.ymlです。
services:
mongo:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
ports:
- "27017:27017"
tty: true
restart: always
volumes:
- ./data/db:/data/db
- ./data/configdb:/data/configdb
コンテナ起動は次のコマンドを実行してください。
docker compose up -d
解説
イメージ
image: mongo:latest
latestは最新の安定版バージョンのイメージを持ってきます。
今回は動作確認用のためlatestにしていますが、実際の案件で使う場合は、細かくバージョンを指定するようにしてください。
環境変数
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
初期設定として、スーパーユーザー「root」が生成されます。
rootユーザーは認証データベースに保存されます。
ユーザ一覧を確認するには、次のクエリを実行します。
// ユーザー情報を確認する
use admin
db.system.users.find()
認証データベースって?
MongoDBにログインするためのユーザーを管理するデータベースです。
ロールを設定すると、各データベースへアクセス制限を設けることができます。
詳しくは公式サイトより
MongoDB 認証データベース
MongoDBのポート
ports:
- "27017:27017"
ホストマシンとコンテナ間のポートマッピングを指定します。左がホストマシン(Mac)、右がDockerのコンテナです。
tty: true
tty: true
ttyはコンテナがバックグラウンドで実行されているときに標準入力を開いたままの状態にできます。
tty: true
はなにしてるの?
ターミナルからコンテナに入り、コマンドを実行できるようにしています。
$ docker compose exec mongo bash
# コマンド実行できない
service "mongo" is not running container #1
make: *** [bash] Error 1
再起動ポリシー
restart: always
restart: always
再起動ポリシーの設定です。コンテナが停止、Dockerデーモンの再起動、またはコンテナのクラッシュ時に自動的に再起動されます。
ボリューム
volumes:
- ./data/db:/data/db
- ./data/configdb:/data/configdb
ホストマシンとコンテナ間でボリュームをマウントします。これにより、データの永続性が保たれます。ここでは2つのマウントを設定しています:
./data/db:/data/db
はMongoDBのデータファイル用です。
./data/configdb:/data/configdb
はMongoDBの設定ファイル用です。
ボリュームってなに?
ボリュームとは、データを保存し、コンテナ間で共有するための仕組みです。主に以下の目的で使用されます。
データの永続化
ボリュームを使用すると、コンテナのデータを保存し、永続化させることができます。
ボリュームを設定していない場合、Dockerコンテナのデータは一時的であるため、コンテナが削除されると、その内部のデータも失われます。
コンテナ間のデータの共有
複数のコンテナ間でデータを共有するためにもボリュームが使用されます。例えば、複数のコンテナが同じデータベースのデータにアクセスする必要がある場合、共有ボリュームを介してデータを共有できます。
動作確認
ターミナルで動作確認
アプリケーションを起動させるのが面倒な場合は、CLI上でコマンド実行した方が早い時があります。MongoDBに接続するには、まずコンテナに入り、そこからデータベースに接続します。
# mongoコンテナに入る
$ docker compose exec mongo bash
# MongoDBに接続
root@xxx:/# mongosh --port 27017 --authenticationDatabase -u "root" -p
Enter password: ******* # パスワードはexample
ログインできました。
試しに、employeeコレクションに1つ、ドキュメントを追加してみます。
test> db.employee.insertOne({name:"従業員A", age: 20})
{
acknowledged: true,
insertedId: ObjectId("655f0fc5d0aeeb23c03cbfa0")
}
Studio 3Tで動作確認
Studio 3TはMongoDB 用のGUI ツールです。ビジュアルが見やすく、複数のMongoDBを管理する場合に重宝します。
導入方法
公式ホームページにアクセスし「Dowonload」ボタンからダウンロードし、起動してください。
ダウンロード後に初期設定で、無料のアカウントを作成する必要があります。
お使いのPCのOSに合わせてダウンロードしてください。Windowsをお使いの方は、「Other Platforms」ボタンを選んでください。
接続
Studio 3Tを起動後、Connect>New ConnectionからURLを設定して接続できます。
#URI
mongodb://root:example@localhost:27017
動作確認
IntellShellからクエリを実行できます。
結果はTree形式、テーブル形式、JSON形式が選べます。画像ではJSON形式にしていますが、お好きな表示方法を選んでください。
まとめ
Docker Composeを使って、MongoDBの動作環境を整備しました。