1. Reference
https://laid-back-scientist.com/docker-mongo
2. Create directory
$ mkdir MongoDB $ cd MongoDB
3. docker-compose.yml ( volumes )
(1) Reference
https://docs.docker.jp/compose/compose-file/compose-file-v3.html?highlight=volumes#volumes
(2) short syntax
volumes: - [source:]target[:mode] # source: ホスト上のパスを指定する時は、Compose ファイルからの相対パスを指定 - ./mongodb_data - ./configdb
(3) short syntax explanation
短い書式 の形式は、 [ソース:]ターゲット[:モード] ソース の場所には、ホスト上のパスまたはボリューム名のどちらかを指定 ターゲット とは、ボリュームがマウントされるコンテナ上のパス 標準的なモード、 ro は 読み込み専用、rw は 読み書き (デフォルト)
4. Create docker-compose.yml
$ vi docker-compose.yml $ cat docker-compose.yml version: '3.9' services: mongo: image: mongo container_name: mongo_db restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: password ports: - 27017:27017 volumes: - ./mongodb_data:/data/db - ./configdb:/data/configdb mongo-express: image: mongo-express container_name: mongo_express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: password ME_CONFIG_MONGODB_SERVER: mongo depends_on: - mongo $
3. docker-compose up
$ docker-compose up -d Pulling mongo-express (mongo-express:)... latest: Pulling from library/mongo-express 6a428f9f83b0: Pull complete f2b1fb32259e: Pull complete 40888f2a0a1f: Pull complete 4e3cc9ce09be: Pull complete eaa1898f3899: Pull complete ab4078090382: Pull complete ae780a42c79e: Pull complete e60224d64a04: Pull complete Digest: sha256:2a25aafdf23296823b06bc9a0a2af2656971262041b8dbf11b40444804fdc104 Status: Downloaded newer image for mongo-express:latest Creating mongo_db ... done Creating mongo_express ... done $
4. Confirm ps
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec7777ff85ed mongo-express "tini -- /docker-ent…" 29 seconds ago Up 20 seconds 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp mongo_express 287b38a175b3 mongo "docker-entrypoint.s…" 31 seconds ago Up 29 seconds 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mongo_db $
4. Confirm created directory
$ ls configdb docker-compose.yaml mongodb_data
5. Install pymongo
$ pip install pymongo
6. Create sample code
$ vi sample.py $ cat sample.py from pymongo import MongoClient HOST = 'localhost' PORT = 27017 USERNAME = 'root' PASSWORD = 'password' DB_NAME = 'demo_db' COLLECTION_NAME = 'demo_collection' if __name__ == '__main__': client = MongoClient(host=HOST, port=PORT, username=USERNAME, password=PASSWORD) db = client[DB_NAME] collection = db[COLLECTION_NAME] data = [ {'username': 'Alice', 'score': 100}, {'username': 'Bob', 'score': 90} ] collection.insert_many(data)
7. Execute sample.py
$ python3 sample.py
8. Confirm from browser
– http://localhost:8081