在这里插入图片描述
1、拉取mongo镜像

docker pull mongo:latest
或者
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/mongo:latest
ARM 架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_mongo:latest

2、创建mongo数据持久化目录

mkdir -p /data/mongodb/config /data/mongodb/data /data/mongodb/logs
vim /data/mongodb/config/mongod.conf
# 数据库存储路径
dbpath=/data/mongodb/data
# 日志文件路径
logpath=/data/mongodb/logs/mongod.log
# 监听的端口
port=27017
# 允许所有的 IP 地址连接
bind_ip=0.0.0.0
# 启用日志记录
journal=true
# 是否后台运行
fork=true
# 启用身份验证
#auth=true

3、启动MongoDB容器

docker run -dit --name mongo \
-p 17017:27017 \
-v /data/mongodb/config/mongod.conf:/etc/mongod.conf \
-v /data/mongodb/data:/data/db \
-v /data/mongodb/logs:/var/log/mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
--restart=always  \
registry.cn-hangzhou.aliyuncs.com/qiluo-images/mongo:latest

4、创建用户数据

docker exec -it mongo /usr/bin/mongosh
use admin
db.auth("admin","123456")

5、登录成功后,创建新用户

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

6、用户的常用命令

db.updateUser("admin",{roles:[{role:"readWrite",db:"admin"}]})  #更新用户角色,修改用户权限
db.changeUserPassword("admin","123456")  #更新用户密码
db.dropUser({'admin'})  #删除用户
show users    #查看所有用户

安装mongo web管理工具mongo-express

1、拉取mongo镜像

docker pull mongo-express:latest
或者
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/mongo-express:latest
ARM 架构
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_mongo-express:latest

1、mongo-express简介
mongo-express 是一个基于 Node.js、Express 框架和 Bootstrap 构建的轻量级、开源的 MongoDB 数据库 Web 管理界面。你可以把它看作是 MySQL 的 phpMyAdmin,但是为 MongoDB 设计的。

它的主要目标是提供一个简单、直观的 Web 界面,让开发者和管理员能够在不使用命令行的情况下,轻松地执行常见的数据库操作。

2、主要功能与特性
mongo-express 提供了丰富的功能来管理 MongoDB:
数据库和集合管理
查看所有数据库和集合。
创建/删除数据库。
创建/重命名/删除集合。
查看集合的统计信息(如文档数量、存储大小、索引等)。
文档(Document)操作
增:通过直观的 Web 表单或 JSON 输入来添加新文档。
删:可以删除单个或多个文档。
改:直接在线编辑文档,支持 JSON 视图和表单视图,修改后一键保存。
查:浏览集合中的所有文档,支持分页。可以执行简单的查询。
索引管理
查看集合中已存在的所有索引。
创建新的索引(支持指定字段和排序顺序)。
删除已有的索引。
用户与角色管理
查看数据库用户。
创建和删除用户,并为其分配角色。
GridFS 支持
如果使用了 MongoDB 的 GridFS 功能来存储大文件(如图片、视频),mongo-express 可以列出、预览和删除这些文件。
其他实用功能
BSON 数据类型支持:能正确显示和编辑 ObjectId、ISODate、Binary Data 等 MongoDB 特有的 BSON 数据类型。
命令行交互:在界面上可以直接运行一些 MongoDB 命令。
主题支持:提供亮色和暗色主题。

docker run -dit --name mongo-express-ui \
-p 8081:8081 \
--link mongo:mongo-db \
-e ME_CONFIG_MONGODB_SERVER=mongo-db \
-e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
-e ME_CONFIG_MONGODB_ADMINPASSWORD=123456 \
-e ME_CONFIG_BASICAUTH_USERNAME=user \
-e ME_CONFIG_BASICAUTH_PASSWORD=userpassword \
--restart=always \
registry.cn-hangzhou.aliyuncs.com/qiluo-images/mongo-express:latest

访问mongo服务

浏览器访问: http://192.168.102.115:8081
设置管理员账号: user/userpassword

参数说明:
-d:后台运行容器
–name adminmongo:设置容器名称
–restart unless-stopped:设置重启策略
-e HOST=0.0.0.0:设置环境变量
–link mongodb:mongodb:链接到 mongodb 容器
-p 1234:1234:端口映射
–network mongo:连接到 mongo 网络
registry.cn-hangzhou.aliyuncs.com/qiluo-images/adminmongo:镜像名称

arm架构

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_adminmongo

等待 MongoDB 完全启动后,运行 adminmongo 容器

docker run -d \
  --name adminmongo \
  --restart unless-stopped \
  -e HOST=0.0.0.0 \
  --link mongo:mongodb \
  -p 1234:1234 \
  --network mongo \
registry.cn-hangzhou.aliyuncs.com/qiluo-images/adminmongo

访问mongodb管理页面

浏览器访问: http://192.168.102.115:1234

docker exec -it mongodb /usr/bin/mongosh
use admin
db.auth("admin","123456")

在这里插入图片描述

Kubernetes部署,包含PVC和PV配置

  1. 创建 PersistentVolume (PV)
# mongo-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-pv
  labels:
    type: local
    app: mongo
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: /data/mongodb
    type: DirectoryOrCreate
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-logs-pv
  labels:
    type: local
    app: mongo
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: /data/mongodb-logs
    type: DirectoryOrCreate
  1. 创建 PersistentVolumeClaim (PVC)
# mongo-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: manual
  selector:
    matchLabels:
      app: mongo
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-logs-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: manual
  selector:
    matchLabels:
      app: mongo
  1. 创建 ConfigMap (用于mongod.conf)
# mongo-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mongo-config
data:
  mongod.conf: |
    # MongoDB configuration file
    storage:
      dbPath: /data/db
      journal:
        enabled: true
    
    systemLog:
      destination: file
      path: /var/log/mongodb/mongod.log
      logAppend: true
    
    net:
      port: 27017
      bindIp: 0.0.0.0
    
    security:
      authorization: enabled
  1. 创建 MongoDB Deployment
# mongo-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-deployment
  labels:
    app: mongo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      # 使用节点选择器指定master节点(如果需要)
      # nodeSelector:
      #   node-role.kubernetes.io/control-plane: ""
      containers:
      - name: mongo
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/mongo:latest
        ports:
        - containerPort: 27017
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          value: "admin"
        - name: MONGO_INITDB_ROOT_PASSWORD
          value: "RGQRYBs2NjTlP1o2"
        volumeMounts:
        - name: mongo-data
          mountPath: /data/db
        - name: mongo-logs
          mountPath: /var/log/mongodb
        - name: mongo-config
          mountPath: /etc/mongod.conf
          subPath: mongod.conf
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        livenessProbe:
          exec:
            command:
            - mongosh
            - --eval
            - "db.adminCommand('ping')"
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          exec:
            command:
            - mongosh
            - --eval
            - "db.adminCommand('ping')"
          initialDelaySeconds: 5
          periodSeconds: 10
      volumes:
      - name: mongo-data
        persistentVolumeClaim:
          claimName: mongo-pvc
      - name: mongo-logs
        persistentVolumeClaim:
          claimName: mongo-logs-pvc
      - name: mongo-config
        configMap:
          name: mongo-config
  1. 创建 Service
# mongo-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mongo-service
spec:
  selector:
    app: mongo
  ports:
    - name: mongo
      port: 27017
      targetPort: 27017
      nodePort: 32017  # 在 30000-32767 范围内
  type: NodePort
~                 

在master节点创建目录:

sudo mkdir -p /data/mongodb
sudo mkdir -p /data/mongodb-logs
sudo chmod 777 /data/mongodb /data/mongodb-logs

应用所有配置:

kubectl apply -f mongo-pv.yaml
kubectl apply -f mongo-pvc.yaml
kubectl apply -f mongo-configmap.yaml
kubectl apply -f mongo-deployment.yaml
kubectl apply -f mongo-service.yaml

检查部署状态:

kubectl get pods -l app=mongo
kubectl get pv
kubectl get pvc
kubectl get service mongo-service

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐