MongDBをdockerで触ったときのメモです。
初心者向けで、DB構築からデータ挿入をとりあえず出来るくらいです。
version: '3'
services:
mongo:
image: mongo
ports:
- 27017:27017
volumes:
- ./db/data:/data/db
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:ro
environment:
MONGO_INITDB_ROOT_USERNAME: "root"
MONGO_INITDB_ROOT_PASSWORD: "password"
command: ["mongod", "--bind_ip",0.0.0.0]
container_name: "mongo"
[MONGO_INITDB_ROOT_USERNAME]と[MONGO_INITDB_ROOT_PASSWORD]を環境変数として、指定しておくと、adminデータベースに管理者ユーザとパスワードを自動的に作成してくれます。
commandは「mongod --bind_ip 0.0.0.0」を実行をすることを示しています。これを実行すると、mongodbサーバのすべてのインタフェースから接続を受け付けるようになります。
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:ro
上記部分は、docker-entrypoint-initdb.d内のスクリプトを実行するための設定です。mongodbが作成された後に、実行されます。このdocker-entrypoint-initdb.dの中には以下のjavascriptを保存しておきます。
db = db.getSiblingDB('admin');
db.auth('root','password');
db = db.getSiblingDB('TestDB');
db.createCollection('TestCollection');
上記javascriptはadminデータベースに接続し、db.auth()で認証をします。rootユーザとして認証出来ているので、その他のデータベースへの操作も可能となります。
認証出来たら、db.getSiblingDB('TestDB');で任意のデータベース(今回はTestDBという名前のデータベース)に切り替え、createCollectionでコレクションを作成します。
コレクションを作成したら、コレクションに対し、データを挿入していきます。
データの挿入はpymongoを使用して、pythonから実行する方法もありますが、今回はコンソールから実行してみます。
mongosh --eval "db.TestCollection.insert({name:"testName"})" --username "root" --password "password"
成功すると、以下の様に返ってきます。
{
acknowledged: true,
insertedId: ObjectId("XXXXXXXXXXXXXXXXXXXXX")
}
補足?
今回は管理者ユーザを使用していますが、ユーザ作成とロール作成が必要ですね。。。
とりあえず、触るだけの状態
参考URL