使用 docker 一键部署 MongoDB

目录

[1. 前期准备](#1. 前期准备)

[2. 导入镜像](#2. 导入镜像)

[3. 部署MongoDB脚本](#3. 部署MongoDB脚本)

[4. 配置模板文件](#4. 配置模板文件)

[5. 部署MongoDB](#5. 部署MongoDB)

[6. 部署后配置](#6. 部署后配置)

[7. 基本维护](#7. 基本维护)


1. 前期准备

新部署前可以从仓库(repository)下载 MongoDB 镜像,或者从已有部署中的镜像生成文件:

复制代码
# 查看当前本地镜像
docker images
# 生成本地镜像文件
docker save <IMAGE ID> -o mongodb_3015.tar

生成 MongoDB 副本集所需的 autokey 文件:

复制代码
# 建立autokey文件
openssl rand -base64 756 > autokey
# 修改读写模式
chmod 400 autokey

2. 导入镜像

复制代码
# 在新部署的机器上导入镜像
docker load -i mongodb_3015.tar
docker images

3. 部署MongoDB脚本

mongodb-deploy.sh 文件内容如下:

复制代码
#!/bin/bash

mkdir -p /usr/local/docker/mongodb/conf
mkdir -p /usr/local/docker/mongodb/data
cp /root/autokey /usr/local/docker/mongodb/data/
cp /root/mongodb.conf.template /usr/local/docker/mongodb/conf/mongodb.conf
chown -R polkitd:root /usr/local/docker/mongodb/

docker run --name mongo \
-v /usr/local/docker/mongodb/data:/data/db \
-v /usr/local/docker/mongodb/conf:/data/conf \
-p 27017:27017 \
-e TZ=Asia/Shanghai \
-itd a.com:8443/dockerhub/mongo:3.0.15 \
--replSet mvbox_new

4. 配置模板文件

mongodb.conf.template 文件内容如下:

复制代码
port            = 27017
logpath         = /data/db/mongodb.log
pidfilepath     = /data/db/mongodb.pid
dbpath          = /data/db/
logappend       = true
fork            = true
journal         = true
directoryperdb  = true
auth            = true
maxConns        = 1000
profile         = 1
replSet         = mvbox_new
keyFile         = /data/db/autokey

5. 部署MongoDB

复制代码
# 在所有 MongoDB 副本集机器执行
./mongodb-deploy.sh

6. 部署后配置

在 primary 机器上执行下面的操作。

复制代码
# 配置副本集
cp /root/rs_initiate.js /usr/local/docker/mongodb/data/
docker exec -it mongo mongo --port 27017 /data/db/rs_initiate.js

rs_initiate.js 文件内容如下:

复制代码
rs.initiate(
   {
      _id: "mvbox_new",
      version: 1,
      members: [
         { _id: 0, host : "172.18.29.56:27017", priority:2 },
         { _id: 1, host : "172.18.29.57:27017", priority:1 },
         { _id: 2, host : "172.18.29.58:27017", priority:1 }
      ]
   }
)

# 创建 admin 用户
docker exec -it mongo mongo --port 27017

use admin;
db.createUser({user : "admin", pwd : "123456", roles: [ { role : "root", db : "admin" } ] });
exit;

# 重新登录,创建更多用户
docker exec -it mongo mongo --port 27017 -u admin -p 123456 admin

use admin
db.createUser({user : "vvmusic_msg", pwd : "123456", roles: [ { role : "dbOwner", db : "vvmusic_msg" } ] });
db.createUser({user : "vvlive", pwd : "123456", roles: [ { role : "dbOwner", db : "vvlive" } ] });
use vvmusic_msg
db.createUser({user : "vvmusic_msg", pwd : "123456", roles: [ { role : "dbOwner", db : "vvmusic_msg" } ] });
use vvlive
db.createUser({user : "vvlive", pwd : "3123456", roles: [ { role : "dbOwner", db : "vvlive" } ] });
exit;

# 验证用户登录
docker exec -it mongo mongo --port 27017 -u admin -p 123456 admin
docker exec -it mongo mongo --port 27017 -u vvlive -p 123456 admin
docker exec -it mongo mongo --port 27017 -u vvlive -p 123456 vvlive
docker exec -it mongo mongo --port 27017 -u vvmusic_msg -p 123456 admin
docker exec -it mongo mongo --port 27017 -u vvmusic_msg -p 123456 vvmusic_msg

7. 基本维护

复制代码
# 查看镜像
docker images
# 查看容器
docker ps
# 查看容器详细信息
docker inspect <CONTAINER ID>
# 重启容器
docker restart mongo
# 停止容器
docker stop mongo
# 删除容器
docker rm mongo
相关推荐
miaobinfei2 小时前
docker拉取dify镜像,执行docker compose up -d 报错
运维·docker·容器
kobe_OKOK_2 小时前
docker compose命名卷 映射到宿主机的路径
运维·docker·容器
ClouGence5 小时前
MongoDB 双向同步如何防止数据循环?(附实操指南)
数据库·mongodb
晨陌y7 小时前
Flare自托管导航页教程:Docker部署、多用户、API与公网访问
运维·docker·容器
梅孔立9 小时前
Docker 容器网络不通:Tomcat 无法解析 MySQL、Nginx 无法反代 Tomcat 的生产级排查与治理
网络·docker·tomcat
螺蛳粉 螺蛳粉19 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
PellyKoo1 天前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
时早玖沐1 天前
放弃 QQ 官方机器人:用 SnowLuma + AstrBot 自建 QQ 机器人
docker·开源·agent
阿标在干嘛1 天前
容器编排的“场景适配”:我们为什么在部分服务中回归了Docker Compose?
运维·docker·容器
IT19951 天前
Docker 快速部署 DM8 达梦数据库|完整踩坑笔记
笔记·docker·容器