MongoDB を Docker で使いたい
私はアプリを開発する際にデータベースをMac等のローカル環境にダウンロードしたくないので、Dockerというコンテナ管理ツールを使用しています。移行も楽なので。本番環境でも使いたいのは山々ですが、Kubernetes周りの知識がないので中々踏み込めないという感じです。まぁ規模にも因るんですが。
この記事はDockerを使ってMongoDBをたてるサンプルみたいなもの。他にわかりやすいものがなくて、作る際に調べた記憶があったので。
動作環境はMacOS Catalina
Goal
docker-compose.ymlファイルを作成してMongoDBとmongo-expressをlocalhostにたてます。
MongoDBというのはNoSQL
mongo-expressというのはMySQLでいうphpMyAdminみたいなもの。MongoDBの中身が見易くなる。
docker-compose.yml
# 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: tree # パスワード
ports:
- 27014:27017
volumes:
- ./db:/data/db
- ./configdb:/data/configdb
mongo-express:
image: mongo-express
restart: always
ports:
- 8080:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root # ユーザー名
ME_CONFIG_MONGODB_ADMINPASSWORD: tree # パスワード
解説
docker-compose.ymlファイルの基本的な書き方は以下参照。
https://docs.docker.com/compose/compose-file/
portsの指定は以下参照
https://qiita.com/tksugimoto/items/23fcce1b067661e8aa46#%E6%A4%9C%E8%A8%BC%E7%B5%90%E6%9E%9C
volumesで指定した場所にデータベースのファイルが作成されます。
sample/docker-compose.yml にファイルがあったとするとsample/dbとsample/configdbが作成されます。
How To Use
whoami$ pwd
/Users/whoami/sample
whoami$ ls
docker-compose.yml
whoami$ docker-compose up -d // -d は daemon で実行という意味
Creating network "sample_default" with the default driver
Creating sample_mongo-express_1 ... done
Creating sample_mongo_1 ... done
whoami$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1aeb90deadd0 mongo "docker-entrypoint.s…" 23 seconds ago Up 22 seconds 0.0.0.0:27014->27017/tcp sample_mongo_1
6649bb697412 mongo-express "tini -- /docker-ent…" 23 seconds ago Up 9 seconds 0.0.0.0:8080->8081/tcp sample_mongo-express_1
whoami$ docker-compose down
Stopping sample_mongo_1 ... done
Stopping sample_mongo-express_1 ... done
Removing sample_mongo_1 ... done
Removing sample_mongo-express_1 ... done
Removing network sample_default
whoami$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker-compose up -dした後ブラウザで[http://localhost:8080/]を開くと、そこにmongo-expressがあります。
注意
ポート番号の指定を適当にやりすぎるとMongoDBがたたない。DockerのMongoDBのポートが27017しかないみたいな記事も見た事がある気がする。
mongo-expressはdockerでは開発環境しか使えないらしい。
予告
これでたてたMongoDBにNode.jsから繋ぐ方法も書こうと思う。
公式ref