docker 化的 mongodb 使用方案
之前提到过使用 watchtower 更新本地的 image 的方案,本来我的系统一直使用 sqlite 来做数据库,现在想改成 mongodb。
涉及到 mongodb 就不得不需要考虑怎么本地化,并且如何做备份。数据本地化很好做,只需要 docker 的 volume 即可,编写docker-compose.yml
,使用docker-compose up -d
。
version: '3.7'
volumes:
mongo:
strapi:
services:
mongo:
image: mongo
restart: always
volumes:
- mongo:/data/db
ports:
- 27017:27017
adminmongo:
image: mrvautin/adminmongo
ports:
- 1234:1234
environment:
- HOST=0.0.0.0
- CONN_NAME=mongo
- DB_HOST=mongo
- DB_PORT=27017
- PASSWORD=$ADMIN_MONGO_PASSWORD
links:
- mongo:mongo
strapi:
image: <strapi registry>
environment:
DATABASE_CLIENT: mongo
DATABASE_NAME: strapi
DATABASE_HOST: mongo
DATABASE_PORT: 27017
links:
- mongo:mongo
volumes:
- ./app:/srv/app
ports:
- '1337:1337'
备份
使用如下命令备份
docker-compose exec -T mongo mongodump --archive --gzip --db <database> > dump.gz
还原
docker-compose exec -T mongo mongorestore --archive --gzip < dump.gz
可视化管理 docker
使用 portainer 能够可视化管理现在运行的 docker。执行如下命令,再访问 localhost:9000,嗒嗒!以后再也不需要执行docker ps
了。
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
可视化管理 mongodb
可以使用adminmongo提供一套简单可用的 WebUI,我已经写到了 docker compose 里面了。
另外environment
里面的PASSWORD
并不好使,已经有issue,不过已经是 2017 年的了,最快的解决方式就是删除config/app.json
,只需要在 portainer 里面选择Containers > mongodb_adminmongo_1
点击 Edit
,修改 Command
并重新部署。