部署在容器中,并且自动创建所需用户和权限等
bash
# 启动 mongoDB
sudo docker run -dit --name china_fish_mongo \
-p 27017:27017 \
-v /data/project1/db/mongo/config/mongod.conf:/etc/mongod.conf \
-v /data/project1/db/mongo/data:/data/db \
-v /data/project1/db/mongo/logs:/var/log/mongodb \
-v /Scripts/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password_str\
--restart=always \
mongo:6.0.2
# 启动 redis
sudo docker run -d --restart unless-stopped \
--name china_fish_redis -p 6379:6379 \
-v /dorothy/data/fish_server/redis/:/data \
redis:5 redis-server --save 60 1 "--requirepass password_str"
-v
这个参数可以自动创建指定的目录,注意确保docker 用户在这个目录存在权限
docker-entrypoint-initdb.d 容器第一次启动执行的脚本目录
The
/docker-entrypoint-initdb.d
directory is a special initialization directory used by several popular database Docker images to automatically execute scripts when a container is first started. This feature allows you to initialize your database with custom schemas, data, or configuration upon container creation.
参考 mongo - Official Image | Docker Hub
/Scripts/init-mongo.js
运行容器后的初始化流程
javascript
# 数据库
db = db.getSiblingDB('admin');
# 创建用户
db.createUser({
user: 'wod',
pwd: 'ds0nxCM7fc65uM',
roles: [
{ role: 'readWrite', db: 'xxx1' },
{ role: 'readWrite', db: 'xxx2' },
]
});
# 提前创建一些必要索引等