MongoDB Docker 镜像制作与部署完整流程

 更新时间:2025年11月14日 11:46:22   作者:醉风塘  
该文章介绍了如何使用Docker部署MongoDB,包括创建Dockerfile、配置文件、数据库初始化脚本,构建镜像、创建和运行容器、镜像导出与导入、扩展功能、安全建议和故障排除,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

1. Dockerfile 文件制作

创建无后缀的 Dockerfile 文件:

# Dockerfile文件格式
# This dockerfile uses the mongo:7.0.25 image
# VERSION 1 - EDITION 1
# Author: cxnb
# Command format: Instruction [arguments / command] ..
# 1、第一行必须指定基础镜像信息
FROM mongo:7.0.25
# 2、维护者信息
MAINTAINER cxnb
# 3、替换配置文件为自己的配置文件
# COPY ./mongod.conf /etc/mongod.conf
# 4、复制创建cxnb数据库脚本到指定目录
COPY ./init-db.sh /docker-entrypoint-initdb.d/
RUN chmod +x /docker-entrypoint-initdb.d/init-db.sh
# 5、指定用户名密码
ENV MONGO_INITDB_ROOT_USERNAME=admin
ENV MONGO_INITDB_ROOT_PASSWORD=admin123
# 6、标记容器挂载目录
VOLUME /data/db
VOLUME /var/log/mongodb/mongod.log
# 7、标记对外公布的端口
EXPOSE 27017
# 8、设定时区,如果不设定时区,容器时间和主机时间会不一致。
ENV TZ=Asia/Shanghai
# 9、进入容器后自动运行的命令。
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

2. MongoDB 配置文件

创建 mongod.conf 文件:

# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
  dbPath: /data/db
  journal:
    enabled: true
  # engine:
  # mmapv1:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo
security:
  authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:

3. 数据库初始化脚本

创建 init-db.sh 脚本:

#!/bin/bash
# 连接到 MongoDB 服务器
# 如果是4.0版本,则用mongo
# 如果先用mongo命令配置,容器启动生成了mongodb的/data/db文件,则换成mongosh配置时,需要先删除db文件夹中的内容。
mongosh <<EOF
use admin
db.auth('admin', 'admin123')
use cxnb
db.createUser({ 
  user: 'admin', 
  pwd: 'admin123', 
  roles: [{ 
    role: 'readWrite', 
    db: 'cxnb' 
  }] 
})
EOF

重要提示:确保脚本具有执行权限:

chmod +x init-db.sh

4. 文件组织

将以下文件放置在宿主机的同一目录中:

  • dockerfile (无后缀)
  • mongod.conf
  • init-db.sh

目录结构示例:

/mongodb-docker/
├── dockerfile
├── mongod.conf
└── init-db.sh

5. 构建 Docker 镜像

docker build -t mongodb:7.0.25 . -f dockerfile

注意:命令末尾的 . 表示使用当前目录作为构建上下文,不能省略。

6. 创建并运行容器

6.1 准备宿主机目录

# 创建数据目录
mkdir -p /mnt/mongodb/data && chmod 777 /mnt/mongodb/data
# 创建日志目录
mkdir -p /mnt/mongodb/logs && chmod 777 /mnt/mongodb/logs
# 创建配置目录
mkdir -p /mnt/mongodb/conf && chmod 777 /mnt/mongodb/conf
# 复制配置文件
cp ./mongod.conf /mnt/mongodb/conf/mongod.conf

6.2 运行容器

docker run \
  --privileged=true \
  --name mongodb \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=admin123 \
  -v /mnt/mongodb/data:/data/db \
  -v /mnt/mongodb/logs:/var/log/mongodb \
  -v /mnt/mongodb/conf/mongod.conf:/etc/mongod.conf \
  -v /etc/localtime:/etc/localtime \
  -d \
  mongodb:7.0.25 --auth

可选参数

  • 添加 --restart=always 使容器自动重启
  • 添加 --network custom-network 指定自定义网络

6.3 验证容器状态

# 检查容器运行状态
docker ps -a | grep mongodb
# 查看容器日志
docker logs mongodb
# 进入容器
docker exec -it mongodb mongosh -u admin -p admin123

7. 镜像导出与导入

7.1 导出镜像

# 导出镜像为tar文件
docker save mongodb:7.0.25 -o /opt/docker/images/mongodb_7.0.25.tar

7.2 压缩镜像

cd /opt/docker/images
gzip mongodb_7.0.25.tar

7.3 导入镜像

# 方法一:直接导入压缩文件
docker load -i /opt/docker/images/mongodb_7.0.25.tar.gz
# 方法二:先解压再导入
gunzip mongodb_7.0.25.tar.gz
docker load -i mongodb_7.0.25.tar

8. 扩展功能

8.1 数据库备份与恢复

# 备份数据库
docker exec mongodb mongodump -u admin -p admin123 --authenticationDatabase admin -o /backup/
docker cp mongodb:/backup/ ./local_backup/
# 恢复数据库
docker cp ./local_backup/ mongodb:/restore/
docker exec mongodb mongorestore -u admin -p admin123 --authenticationDatabase admin /restore/

8.2 使用 Docker Compose

创建 docker-compose.yml 文件:

version: '3.8'
services:
  mongodb:
    build:
      context: .
      dockerfile: dockerfile
    container_name: mongodb
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=admin123
    volumes:
      - /mnt/mongodb/data:/data/db
      - /mnt/mongodb/logs:/var/log/mongodb
      - /mnt/mongodb/conf/mongod.conf:/etc/mongod.conf
      - /etc/localtime:/etc/localtime
    restart: unless-stopped
    command: ["--auth"]

启动服务:

docker-compose up -d

9. 安全建议

  1. 修改默认密码:生产环境中务必使用强密码替换默认密码
  2. 网络隔离:将 MongoDB 容器放置在内部网络中,避免直接暴露到公网
  3. 定期更新:定期更新基础镜像以获取安全补丁
  4. 备份策略:建立定期备份机制
  5. 访问控制:限制只有必要的主机可以访问 MongoDB 端口

10. 故障排除

常见问题:

  1. 权限错误:确保宿主机目录具有适当权限
  2. 配置文件错误:检查 YAML 格式和缩进
  3. 端口冲突:确保 27017 端口未被占用
  4. 初始化失败:检查 init-db.sh 脚本格式和权限

调试命令:

# 查看容器日志
docker logs mongodb
# 进入容器检查文件
docker exec -it mongodb bash
# 检查 MongoDB 服务状态
docker exec mongodb mongosh --eval "db.adminCommand('serverStatus')"

通过以上步骤,您可以成功创建、部署和管理基于 Docker 的 MongoDB 实例。

到此这篇关于MongoDB Docker 镜像制作与部署完整流程的文章就介绍到这了,更多相关MongoDB Docker 镜像部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker创建容器时目录权限踩坑

    Docker创建容器时目录权限踩坑

    这篇文章主要介绍了Docker创建容器时目录权限踩坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Docker实践之搭建wordpress的方法

    Docker实践之搭建wordpress的方法

    这篇文章主要介绍了Docker实践之搭建wordpress的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • docker和docker-compose的版本对应关系的实现

    docker和docker-compose的版本对应关系的实现

    本文主要介绍了docker和docker-compose的版本对应关系的实现,两者虽非强制绑定,但新版本docker-compose可能依赖更高版本Docker引擎的API,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06
  • Docker系列之使用Docker Compose编排容器

    Docker系列之使用Docker Compose编排容器

    Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,这篇文章主要介绍了Docker系列之使用Docker Compose编排容器,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Docker部署postgresql的方法实现

    Docker部署postgresql的方法实现

    本文主要介绍了Docker部署postgresql的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 总结Docker不适合部署数据库的7大原因

    总结Docker不适合部署数据库的7大原因

    在本篇文章里小编给大家整理一篇关于Docker不适合部署数据库的7大原因,有兴趣的朋友们可以参考学习下。
    2021-01-01
  • 通过Dockerfile构建Docker镜像的方法步骤

    通过Dockerfile构建Docker镜像的方法步骤

    这篇文章主要介绍了通过Dockerfile构建Docker镜像的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 使用Docker构建并部署Go Web服务的详细教学

    使用Docker构建并部署Go Web服务的详细教学

    在现代软件开发中,应用的可移植性和环境一致性至关重要,本文将带你从零开始,实战演示如何使用 Docker 构建并部署一个 Go Web 服务,需要的可以了解下
    2025-10-10
  • 使用docker compose部署emqx集群的示例

    使用docker compose部署emqx集群的示例

    这篇文章主要介绍了使用docker compose部署emqx集群,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • docker 安装部署多个MySQL的实现步骤

    docker 安装部署多个MySQL的实现步骤

    本文主要介绍了docker 安装部署多个MySQL的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论