1. 为什么需要容器化中间件部署在现代化应用开发中中间件部署往往是最耗费时间的环节之一。传统部署方式需要手动安装依赖、配置环境、处理版本冲突整个过程既繁琐又容易出错。我经历过无数次在我机器上能跑的窘境直到开始使用Docker才彻底解决这个问题。以MongoDB为例官方提供了从3.2到7.0的多个版本每个版本对系统库的依赖都不尽相同。如果要在同一台服务器部署多个版本的应用传统方式几乎不可能实现。而通过Docker容器我们可以轻松实现版本隔离不同项目使用不同中间件版本环境一致性开发、测试、生产环境完全一致快速重置秒级创建和销毁测试环境2. 部署前的准备工作2.1 Docker环境配置首先确保已安装Docker Engine和Docker Compose。推荐使用官方安装脚本# Docker Engine安装 curl -fsSL https://get.docker.com | sh sudo systemctl enable --now docker # Docker Compose安装 sudo curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose注意生产环境建议使用特定版本而非latest标签避免意外升级导致兼容性问题2.2 存储规划中间件容器通常需要持久化数据建议提前规划存储目录/mnt/docker/ ├── mongo/ # MongoDB数据卷 ├── mysql/ # MySQL数据卷 ├── redis/ # Redis数据卷 └── tomcat/ # Tomcat webapps3. MongoDB容器化部署3.1 单节点部署使用官方MongoDB镜像快速启动docker run -d \ --name mongodb \ -p 27017:27017 \ -v /mnt/docker/mongo:/data/db \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORD123456 \ mongo:6.0 --wiredTigerCacheSizeGB 1关键参数说明--wiredTigerCacheSizeGB限制内存使用避免容器占用过多主机内存MONGO_INITDB_*初始化root用户生产环境应使用更复杂的密码3.2 副本集配置生产环境建议使用副本集# docker-compose.yml version: 3.8 services: mongo1: image: mongo:6.0 ports: [27017:27017] volumes: [/mnt/docker/mongo1:/data/db] command: mongod --replSet rs0 --wiredTigerCacheSizeGB 1 mongo2: image: mongo:6.0 volumes: [/mnt/docker/mongo2:/data/db] command: mongod --replSet rs0 --wiredTigerCacheSizeGB 1 mongo3: image: mongo:6.0 volumes: [/mnt/docker/mongo3:/data/db] command: mongod --replSet rs0 --wiredTigerCacheSizeGB 1初始化副本集docker exec -it mongo1 mongosh --eval rs.initiate({ _id: rs0, members: [ {_id: 0, host: mongo1:27017}, {_id: 1, host: mongo2:27017}, {_id: 2, host: mongo3:27017} ] })4. Redis容器化部署4.1 基础部署Redis官方镜像已优化得很好docker run -d \ --name redis \ -p 6379:6379 \ -v /mnt/docker/redis:/data \ redis:7.0-alpine \ --save 60 1 --loglevel warning参数说明--save 60 160秒内至少1次修改则触发RDB持久化alpine版本镜像体积更小约30MB4.2 持久化配置Redis提供两种持久化方式RDB默认启用--save 900 1 # 15分钟至少1个key变化 --save 300 10 # 5分钟至少10个key变化AOF追加更安全--appendonly yes --appendfsync everysec # 折衷方案生产环境建议同时开启RDB和AOF既保证数据安全又便于灾难恢复5. MySQL容器化部署5.1 基础配置MySQL官方镜像支持多种初始化方式docker run -d \ --name mysql \ -p 3306:3306 \ -v /mnt/docker/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -e MYSQL_DATABASEapp_db \ -e MYSQL_USERapp_user \ -e MYSQL_PASSWORDuser123 \ mysql:8.0 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ci字符集设置要点utf8mb4支持完整Unicode包括emoji排序规则根据业务需求选择5.2 性能调优通过配置文件调整性能参数# custom.cnf [mysqld] innodb_buffer_pool_size 1G # 建议为物理内存的50-70% innodb_log_file_size 256M max_connections 200挂载配置文件-v ./custom.cnf:/etc/mysql/conf.d/custom.cnf6. Tomcat容器化部署6.1 标准部署使用官方Tomcat镜像docker run -d \ --name tomcat \ -p 8080:8080 \ -v /mnt/docker/tomcat/webapps:/usr/local/tomcat/webapps \ tomcat:9.0-jdk176.2 优化建议时区设置-e TZAsia/Shanghai内存限制-e JAVA_OPTS-Xms512m -Xmx1024m生产环境应使用JDK17以获得更好的容器支持7. 使用Docker Compose编排完整编排示例version: 3.8 services: mongodb: image: mongo:6.0 ports: [27017:27017] volumes: [mongo_data:/data/db] environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: 123456 command: mongod --wiredTigerCacheSizeGB 1 redis: image: redis:7.0-alpine ports: [6379:6379] volumes: [redis_data:/data] command: redis-server --save 60 1 mysql: image: mysql:8.0 ports: [3306:3306] volumes: [mysql_data:/var/lib/mysql, ./mysql.cnf:/etc/mysql/conf.d/custom.cnf] environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: user123 tomcat: image: tomcat:9.0-jdk17 ports: [8080:8080] volumes: [tomcat_webapps:/usr/local/tomcat/webapps] depends_on: - mongodb - redis - mysql volumes: mongo_data: redis_data: mysql_data: tomcat_webapps:8. 常见问题排查8.1 容器启动失败检查日志的三种方式docker logs containerdocker compose logsjournalctl -u docker系统级日志8.2 连接问题典型错误解决Connection refused检查端口映射和防火墙Authentication failed确认环境变量已正确设置Too many connections调整MySQL的max_connections8.3 数据持久化验证数据卷挂载docker inspect container | grep Mounts9. 性能监控与维护9.1 资源监控使用docker stats查看实时资源占用CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O a1b2c3d4e5f6 mongodb 2.3% 512MiB / 1.952GiB 25.6% 1.2MB / 3MB 0B / 0B9.2 定期维护镜像更新docker compose pull docker compose up -d日志轮转docker run --log-opt max-size10m --log-opt max-file3备份策略定期导出数据库dump备份数据卷目录10. 安全最佳实践不要使用默认密码限制网络暴露ports: - 127.0.0.1:3306:3306 # 仅本地访问使用非root用户运行USER 1000定期更新镜像获取安全补丁
企业数字化 ERP 产品动态
相关推荐
Windows 12的AI硬件要求与订阅制解析 1. Windows 12的AI硬件革命微软即将推出的Windows 12操作系统将带来前所未有的硬件要求变革。根据多方泄露信息,新系统将强制要求设备配备专用AI加速芯片(如NPU),这标志着PC行业正式进入AI硬件时代。1.1 为什么需要专用AI硬件传统… · 2026/10/7 22:06:50
Illustrator脚本终极指南:如何将设计效率提升300%的5个必备技巧 Illustrator脚本终极指南:如何将设计效率提升300%的5个必备技巧 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts
Adobe Illustrator是设计师的得力助手,但你是… · 2026/11/5 23:41:48
深入理解best-claude-hud的Git状态集成:从分支管理到冲突解决的全方位监控 深入理解best-claude-hud的Git状态集成:从分支管理到冲突解决的全方位监控 【免费下载链接】best-claude-hud Minimal Claude Code statusline HUD powered by Rust. 项目地址: https://gitcode.com/gh_mirrors/be/best-claude-hud
best-claude-hud是一款基于… · 2026/10/4 19:24:50
EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析 1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被… · 2026/11/5 16:49:35
Rust原来很简单二:所有权系统 Part 2 核心篇 —— 所有权系统
本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理
6… · 2026/11/5 16:26:08
基于Hadoop+Spark的民宿智能推荐系统设计与实现 1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享… · 2026/11/5 14:59:25
ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 14:10:41
UART接口24位ADC搭配RS485,解决远距离温度监控难题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 14:10:41
UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 14:10:41
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07