MongoDB Docker 镜像制作与部署完整流程
作者:醉风塘
该文章介绍了如何使用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.confinit-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. 安全建议
- 修改默认密码:生产环境中务必使用强密码替换默认密码
- 网络隔离:将 MongoDB 容器放置在内部网络中,避免直接暴露到公网
- 定期更新:定期更新基础镜像以获取安全补丁
- 备份策略:建立定期备份机制
- 访问控制:限制只有必要的主机可以访问 MongoDB 端口
10. 故障排除
常见问题:
- 权限错误:确保宿主机目录具有适当权限
- 配置文件错误:检查 YAML 格式和缩进
- 端口冲突:确保 27017 端口未被占用
- 初始化失败:检查 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 镜像部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
