MongoDBの簡単な使い方
この記事では、人気のあるNoSQLデータベースであるMongoDBについて解説します。特に、Linux環境およびDockerコンテナ上でのインストールと初期設定に焦点を当てています。
Linux上でのMongoDBインストール手順
CentOS 7を使用していることを前提としています。まず公式サイトからコミュニティ版をダウンロードしてください。
# MongoDBの取得と展開
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.9.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.9.tgz
MongoDBサーバーの起動方法
必要なディレクトリを作成し、サービスを開始します。
# データ保存場所とログ出力先の作成
mkdir -p /data/db /var/log/mongodb
# MongoDBの実行(バックグラウンドで起動)
./bin/mongod --port=27017 --dbpath=/data/db --logpath=/var/log/mongodb/mongod.log --bind_ip=0.0.0.0 --fork
- --dbpath: データ格納ディレクトリの指定
- --logpath: ログファイルパスの指定
- --logappend: ログ追記モード有効化
- --port: 接続ポート番号の変更(デフォルトは27017)
- --bind_ip: アクセス許可IPアドレス
- --fork: バックグラウンド実行フラグ
- --auth: 認証機能の有効化
環境変数の設定
/etc/profileファイルを編集して、MongoDBコマンドへのパスを通します。
export MONGO_HOME=/opt/mongodb
export PATH=$PATH:$MONGO_HOME/bin
設定後、以下のコマンドで反映させてください。
source /etc/profile
設定ファイルを利用した起動
YAML形式で設定ファイルを作成します。例として/mongo/config.ymlを編集します。
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
dbPath: "/data/db"
engine: wiredTiger
journal:
enabled: true
net:
bindIp: "0.0.0.0"
port: 27017
processManagement:
fork: true
作成した設定ファイルを使ってMongoDBを起動します。
mongod -f /mongo/config.yml
MongoDBの停止方法
次のいずれかの方法でサーバーをシャットダウンできます。
# コマンドラインからの終了指示
mongod --port=27017 --dbpath=/data/db --shutdown
または、シェル上で管理者権限で接続して停止します。
use admin
db.shutdownServer()
DockerによるMongoDBのセットアップ
公式イメージを使用してMongoDBをコンテナとして実行する方法を紹介します。
# イメージの取得
docker pull mongo:4.4.10
# コンテナの起動(認証付き)
docker run --name mongodb-container -p 29017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=adminuser \
-e MONGO_INITDB_ROOT_PASSWORD=adminpass \
-d mongo:4.4.10 --wiredTigerCacheSizeGB 1
コンテナ内部に入り、MongoDBシェルへアクセスします。
docker exec -it mongodb-container bash
mongo -u adminuser -p adminpass
新しいユーザーを作成し、特定のデータベースに対する読み書き権限を与えます。
use sample_db
db.createUser({
user: "dev_user",
pwd: "password123",
roles: ["readWrite"]
})
MongoDBシェルへの接続
リモートホストから接続する際は次のようにします。
mongo 192.168.65.97:29017 -u dev_user -p password123
※dev_userはsample_dbのみに対するreadWrite権限を持ちます。