docker-compose.yml
DockerHubに公式のものがあります
https://hub.docker.com/_/mongo/
公式のものにportsとvolumesを追記しました。
下記のdocker-compose.ymlを配置したフォルダでdocker-compose up -d
すると立ち上がります。
立ち上がったあとdocker-compose ps
で立ち上がってること(State
がUp
になっていること)を確認します
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
ports:
- 27017:27017
volumes:
- ./db:/data/db
- ./configdb:/data/configdb
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_SERVER: mongo
depends_on:
- mongo
各項目の説明
AdminNameとPassword
この2つはmongoDBとmongo-expressどちらにもありますが、設定するNameとPasswordは同じでなければなりません。
ports
ポートのマッピングをしています。
ポートはホスト:コンテナ
でマッピングするか、コンテナのポートのみ指定します。
コンテナのポートのみ指定した場合、ホストのポートはランダムで決まります。(docker psコマンドのPORTS
列に表示されます)
volumes
パスをボリュームとしてマウントします。オプションとしてホスト側のパスを指定(ホスト:コンテナ)しています。
dbのデータとconfigのローカル:コンテナの指定です。docker-compose up -d
すると自動でローカルにフォルダとファイルが作られます。
mongoDBコマンド実行
コンテナへアクセス
docker-compose exec mongo bash
mongo admin -u root -p
(docker-compose.ymlに書いたパスワード)
testデータベースのhogeテーブルにレコードを追加して確認するサンプル
show databases
use test
db.hoge.insert({ name: "test" })
db.hoge.find()
exit
mongo-expressへアクセス
下記URLにアクセスする。
http://0.0.0.0:8081/
アクセスすると認証が出るので、docker-compose.ymlに入れたAdminNameとPasswordでログインします。
上記のtestデータベースとかがブラウザで見れます。
mongoDBへのアクセス
Pythonからアクセスするサンプルです。
pymongoを使ってアクセスしてみます。
clientの指定
clientのhostはlocalhostではなく、コンテナの名前を指定します。
# OKな例
client = MongoClient('mongo', 27017)
# NGな例
client = MongoClient('localhost', 27017)
サンプルコード
コンテナ上のmongoDBにアクセスするサンプルコードです。
# coding: utf-8
from pymongo import MongoClient
client = MongoClient('mongo', 27017)
db = client.test_db
collection = db.test_collection
# レコードの全削除
collection.drop()
# 100万件のレコード
collection.insert_many([{"id": i}for i in range(100)])
# idが1のものを探す
results = collection.find({"id": 1})
for result in results:
print(result)
コンテナを停止する
下記コマンドでコンテナを停止してネットワークを削除します。
docker-compose down