docker安装MongoDB
MongoDB 是一个基于分布式文件存储的数据库。介于关系数据库和非关系数据库之间。
MongoDB 官方 image 仓库地址:https://hub.docker.com/_/mongo
image 标签和各自的 Dockerfile 链接:
docs/README.md at master · docker-library/docs (github.com)
安装 MongoDB
- Linux 发行版:Ubuntu Focal 20.04 (LTS)
- Docker version 20.10.11
- docker-compose version 1.29.2
拉取镜像:
# mongo:4.4.11-focal,基础镜像是 ubuntu:focal
docker pull mongo:4.4.11-focal
创建数据挂载目录:
# 创建数据库存放目录,可替换为你自己的路径
mkdir mongo_test
cd mongo_test
mkdir data # 用于挂载数据文件
mkdir backup # 用于挂载备份文件
启动容器(与后面的容器编排方式二选一即可,推荐用容器编排方式启动):
docker run --name mongo4411 \
-p 27017:27017 \
-v ${PWD}/data:/data/db \
-v ${PWD}/backup:/data/backup \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
-d mongo:4.4.11-focal --auth
--name
,容器的名称,自定义。-p
,映射容器端口到宿主机端口。-v
,挂载宿主机目录到容器内,如宿主机目录不存在则创建。/data/db
是数据库文件存放的地方。必须要挂载到容器外,否则容器重启一切数据消失。/etc/localtime
,让容器的时钟与宿主机同步,避免时区的问题,ro
是 read only 的意思,默认是rw
读写模式。
-d
,容器以守护进程方式运行。--auth
,需要密码才能访问数据库。(mongodb 默认无须身份验证)
查看容器状态:
docker ps -a
退出并删除容器:
docker stop mongo4411
docker rm mongo4411
容器编排
Mongo-Express
基于 web 的 MongoDB 管理界面,用 Node.js、 Express 和 bootstrap3 编写。
官方 image 仓库地址:https://hub.docker.com/_/mongo-express/
拉取镜像:
# mongo-express:0.54.0 基础镜像是 node:12-alpine3.11
docker pull mongo-express:0.54.0
docker-compose
创建容器环境变量文件mongo.env
# mongo的root用户和密码
MONGO_INITDB_ROOT_USERNAME="root"
MONGO_INITDB_ROOT_PASSWORD="123456"
以上文件也可以什么都不写,留到后面启动数据库后再创建 root 用户。
express.env
# 登录 Mongo-Express 的用户名和密码,如无需验证可不设置
ME_CONFIG_BASICAUTH_USERNAME="admin"
ME_CONFIG_BASICAUTH_PASSWORD="123456"
# 登录 Mongo 的用户名和密码
ME_CONFIG_MONGODB_ADMINUSERNAME="root"
ME_CONFIG_MONGODB_ADMINPASSWORD="123456"
创建 docker-compose.yml
version: "3.1"
services:
mongo:
image: mongo:4.4.11-focal
container_name: mongo4411
restart: always
volumes:
- "${PWD}/data:/data/db"
- "${PWD}/backup:/data/backup"
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
ports:
- "27017:27017"
env_file:
- mongo.env
command: mongod --auth
mongo-express:
image: mongo-express:0.54.0
restart: always
container_name: mongo-express
volumes:
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
ports:
- 8081:8081
env_file:
- express.env
env_file
:指定要加载的环境变量文件,即上面的 .env 文件。
检查模板文件:
docker-compose config
可以看到,.env
文件中的值会自动添加到 environment
对应的项下,如果有报错或者警告,根据提示修改。
启动容器:
docker-compose up -d
-d
:后台启动。
查看状态:
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------
mongo4411 docker-entrypoint.sh mongod Up 0.0.0.0:27017->27017/tcp
mongo_mongo-express_1 tini -- /docker-entrypoint ... Up 0.0.0.0:8081->8081/tcp
访问 Mongo-Express 管理页面 http://主机IP地址:8081
,使用前面 .env 文件设置的 Mongo-Express 用户名和密码进行登录。
关闭容器可使用: docker-compose down
测试
进入容器,连接数据库:
# 登录并切换db到admin
$ docker exec -it mongo4411 mongo admin
# 登录root用户,如果前面没有创建root用户可跳过此步
> db.auth('root','123456')
# 创建所有数据库管理用户 admin/123456
> db.createUser({user:'admin',pwd: '123456',roles:[{role:"userAdminAnyDatabase", db:"admin"}, "readWriteAnyDatabase"]});
# Successfully added user: { ...
# 使用新用户登录,返回 0=失败 1=成功
> db.auth('admin', '123456')
# 1
# 创建测试库
> use testdb
# 插入测试数据
> db.testdb.insert({"name":"testdb"})
# 创建用户并授权,dbOwner代表数据库所有者角色,拥有最高该数据库最高权限。
> db.createUser({ user:"user_testdb", pwd:"123456", roles: [{ role:"dbOwner", db:"testdb" }] })
>
# 退出数据库
> exit
CTRL D
退出容器。
备份数据库
容器外执行备份
$ docker exec mongo4411 sh -c 'var=`date %Y%m%d%H%M` && mongodump -h localhost --port 27017 -u "admin" -p "123456" -d "testdb" --authenticationDatabase 'admin' -o /data/backup/testdb_${var}'
# 备份 `admin` 数据库到宿主机的 backup/testdb_yyyymmddhhmm/testdb
-h
:数据库地址-d
:需要备份的数据库实例-o
:备份路径--authenticationDatabase
:需要身份认证
容器外执行恢复
$ docker exec mongo4411 sh -c 'mongorestore -h localhost:27017 -u "admin" -p "123456" -d "testdb" --authenticationDatabase 'admin' /data/backup/testdb_202203022229/testdb'
– END –
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgacgkc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01