• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

docker安装MongoDB

武飞扬头像
cidens
帮助1

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
系列文章
更多 icon
同类精品
更多 icon
继续加载