LoginSignup
1
1

この記事の内容

  • M1 MacでMongoDBを環境構築した時の備忘録
  • おそらくM1じゃなくても動く(未検証)

補足

動作確認したPCのスペック

  • チップ:Apple M1
  • macOS:Sonoma

Dockerの設定

早速docker-compose.ymlです。

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はなにしてるの?

ターミナルからコンテナに入り、コマンドを実行できるようにしています。

ターミナル(ttyがfalseの場合)
$ 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の動作環境を整備しました。

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