Docker Compose一键部署蘑菇博客:从零到可访问的完整实战 1. 为什么选择Docker Compose部署蘑菇博客第一次接触蘑菇博客时我按照官方文档手动部署了所有服务。光是启动Nginx、Redis、RabbitMQ、Nacos和六个Spring Boot服务就花了半小时更别提中间因为依赖顺序问题反复重启的崩溃经历。直到发现项目自带的docker-compose.yml文件我才真正体会到容器化部署的优雅。Docker Compose就像乐高说明书把原本散落一地的微服务组件变成可拼装的标准化模块。你不需要关心每个服务如何启动只需一条命令就能让整个系统自动组装完成。实测从零开始到博客可访问整个过程不超过10分钟。对于开发者而言这种部署方式有三大优势环境隔离所有服务运行在独立容器中不会污染宿主机环境依赖管理自动处理服务启动顺序和网络连接一键运维统一的命令管理整个微服务集群2. 部署前的准备工作2.1 硬件与软件要求我的测试环境是一台2核4G的云服务器系统为Ubuntu 20.04。实际运行中发现内存占用约2.5G建议生产环境至少4G内存。需要预先安装的软件只有两个# 安装Docker curl -fsSL https://get.docker.com | sh # 安装Docker Compose sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose注意如果服务器在国内建议配置Docker镜像加速器。在/etc/docker/daemon.json中添加阿里云镜像地址。2.2 获取项目代码推荐使用Git克隆最新代码方便后续更新git clone https://github.com/moxi624/mogu_blog_v2.git cd mogu_blog_v2/docker-compose目录结构说明config/各服务的配置文件mysql/数据库初始化脚本docker-compose.yml核心编排文件build.sh镜像构建脚本可选3. 解析Docker Compose编排文件打开docker-compose.yml文件可以看到明确定义的12个服务。我们重点分析几个关键配置3.1 网络配置networks: mogu-network: driver: bridge所有服务共享一个自定义的bridge网络这使得容器间可以通过服务名直接通信如mysql:3306外部访问通过Nginx 80端口统一暴露避免端口冲突问题3.2 数据持久化volumes: mysql_data: redis_data: rabbitmq_data:关键数据通过命名卷持久化即使容器重建也不会丢失MySQL数据文章、用户信息Redis缓存RabbitMQ消息队列3.3 服务依赖depends_on: - mysql - redis - rabbitmqNacos作为配置中心会优先启动其他服务等待数据库和中间件就绪后才启动。这种依赖关系确保服务不会因连接失败而崩溃。4. 一键启动全栈服务执行以下命令启动所有容器docker-compose up -d首次运行会自动完成这些步骤拉取所有基础镜像约1.5GB构建自定义的Spring Boot应用镜像按依赖顺序启动容器初始化数据库表结构通过日志可以观察启动进度docker-compose logs -f当看到所有服务状态变为healthy时访问这些地址验证前台页面http://服务器IP:9527后台管理http://服务器IP:9528Nacos控制台http://服务器IP:8848 (账号/密码nacos/nacos)5. 常见问题排查指南5.1 端口冲突问题如果发现端口被占用可以修改docker-compose.yml中的端口映射。例如将Nginx的80端口改为8080ports: - 8080:805.2 容器启动失败使用以下命令查看具体错误docker ps -a # 查看异常容器ID docker logs 容器ID常见问题包括MySQL初始化失败检查mysql/init.sql文件权限内存不足增加swap空间或升级服务器配置镜像拉取超时配置国内镜像源5.3 性能优化建议生产环境建议调整这些参数deploy: resources: limits: cpus: 1 memory: 1G对于高并发场景可以增加Nginx和Gateway的副本数配置Redis集群模式启用MySQL主从复制6. 日常维护操作6.1 服务启停# 停止服务但不删除容器 docker-compose stop # 完全移除所有容器数据卷会保留 docker-compose down # 更新代码后重新构建 docker-compose up -d --build6.2 数据备份关键数据卷的备份方法# 备份MySQL数据 docker run --rm -v mysql_data:/volume -v $(pwd):/backup alpine tar cvf /backup/mysql_backup.tar /volume # 恢复时反向操作即可6.3 版本升级升级步骤拉取最新代码重建镜像docker-compose build滚动重启docker-compose up -d建议先在测试环境验证特别注意数据库迁移脚本的兼容性。这套部署方案已经在我负责的三个企业级博客项目中稳定运行超过半年。相比传统部署方式容器化方案将运维效率提升了80%以上新成员也能在半小时内搭建出完整的开发环境。如果你在实践过程中遇到任何问题欢迎在评论区交流实战经验。