跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Docker Compose 实战:一键部署 Web、数据库与缓存微服务环境

Docker Compose 是管理多容器应用的编排工具。通过编写 docker-compose.yml 文件,可定义服务依赖、网络及环境变量,实现一键启动 Web、数据库和缓存等微服务环境。文章详解了版本配置、服务定义、端口映射、数据卷挂载等核心参数,提供了包含 SpringBoot、MySQL 和 Redis 的完整实战案例。涵盖常用命令操作及常见错误排查,如版本不兼容、连接失败、数据丢失等问题解决方案,帮助开发者简化部署流程,提升开发效率。

念念不忘发布于 2026/4/7更新于 2026/9/1080 浏览
Docker Compose 实战:一键部署 Web、数据库与缓存微服务环境

Docker Compose 实战:一键部署 Web、数据库与缓存微服务环境

在这里插入图片描述

引言

做后端开发的同学,一定遇到过这样的痛点:部署微服务时,要逐个启动 Web 应用、数据库、缓存等容器,还要手动配置容器联动,步骤繁琐且容易出错,换个环境又要重复配置。而 Docker Compose 正是解决这个问题的'神器',只需编写一个 docker-compose.yml 文件,一行命令就能一键启动整套微服务环境,统一配置、一键复用,大幅提升开发和部署效率。

一、什么是 Docker Compose(极简认知)

Docker Compose 是 Docker 官方提供的容器编排工具,专门用于管理多个 Docker 容器组成的应用集群。

简单来说,当你的项目需要同时运行多个容器(比如 Web 服务用 Nginx、应用用 SpringBoot、数据库用 MySQL、缓存用 Redis),不需要逐个执行 docker run 命令启动,也不用手动配置容器间的网络连接,只需通过一个 docker-compose.yml 配置文件,定义好所有容器的参数、依赖关系和网络规则,执行一行命令就能实现'一键启动、一键停止、一键重启'所有容器。

💡 核心优势:简化配置、统一环境、一键操作、易于维护,是后端开发、测试环境部署的必备工具,也是微服务编排的入门首选。

建议大家先确认本地已安装 Docker 和 Docker Compose(执行 docker-compose -v 可查看版本),如果未安装,可参考 Docker 官方文档快速部署。

二、核心:docker-compose.yml 配置详解

docker-compose.yml 是 Docker Compose 的核心,所有容器的配置都集中在这个文件中,语法遵循 YAML 规范,结构清晰、易于编写和修改。

2.1 通用配置模板

# 版本号(需与 Docker Compose 版本匹配,常用 3.x)
version: '3'

# 定义所有服务(容器),每个服务对应一个容器
services:
  # 1. Web 应用服务(示例:SpringBoot 应用)
  web:
    # 镜像名称(本地有则使用本地,无则自动从 Docker Hub 拉取)
    image: springboot-web:1.0.0
    # 容器名称(自定义,便于区分和操作)
    container_name: springboot-web
    # 端口映射(宿主机端口:容器内部端口)
    ports:
      - "8080:8080"
    # 依赖关系(先启动 mysql 和 redis,再启动 web 服务)
    depends_on:
      - mysql
      - redis
    # 环境变量(传递配置参数,如数据库地址、端口等)
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/test_db?useUnicode=true&characterEncoding=utf8
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=123456
    # 重启策略(容器异常退出时自动重启)
    restart: always

  # 2. 数据库服务(MySQL)
  mysql:
    image: mysql:8.0
    container_name: mysql-8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=test_db
    # 数据卷挂载(将宿主机目录挂载到容器,实现数据持久化)
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
    restart: always

  # 3. 缓存服务(Redis)
  redis:
    image: redis:6.2
    container_name: redis-6.2
    ports:
      - "6379:6379"
    # 密码配置(可选,根据需求设置)
    command: redis-server --requirepass 123456
    volumes:
      - ./redis/data:/data
    restart: always

2.2 核心配置项拆解

1. version(版本号)
  • 用于指定 Docker Compose 的配置版本,需与本地安装的 Docker Compose 版本匹配,否则可能出现兼容性问题。
  • 常用版本:3(兼容 Docker 1.13.0 及以上版本),建议直接使用 3.x 版本。
2. services(服务定义)
  • 整个配置文件的核心节点,所有需要启动的容器都定义在这个节点下,每个子节点代表一个服务(一个容器)。
  • 子节点名称(如 web、mysql、redis)可自定义,建议与服务功能对应,便于识别。
3. 常用服务配置参数
配置项作用示例
image指定容器使用的镜像image: mysql:8.0
container_name自定义容器名称container_name: mysql-8.0
ports端口映射,实现宿主机访问容器ports: - "3306:3306"
depends_on定义服务依赖,控制容器启动顺序depends_on: - mysql
environment设置环境变量,传递配置参数environment: - MYSQL_ROOT_PASSWORD=123456
volumes数据卷挂载,实现数据持久化volumes: - ./mysql/data:/var/lib/mysql
restart重启策略,容器异常退出时自动重启restart: always
command覆盖容器启动时执行的命令command: redis-server --requirepass 123456

⚠️ 注意:depends_on 只控制容器的启动顺序,不保证依赖服务完全启动(比如 mysql 容器启动,但服务未就绪,web 服务可能启动失败),后续可通过健康检查优化。

三、实战:一键启动 Web+MySQL+Redis 微服务环境

本次实战将搭建一个完整的微服务基础环境,包含 3 个服务:

  1. Web 服务:SpringBoot 简单测试应用(模拟实际业务应用)
  2. 数据库服务:MySQL 8.0(存储业务数据)
  3. 缓存服务:Redis 6.2(缓存热点数据,提升应用性能)

3.1 实战准备

  1. 本地已安装 Docker 和 Docker Compose(执行 docker-compose -v 验证)。
  2. 新建一个项目目录(如 docker-compose-demo),用于存放 docker-compose.yml 文件和相关挂载目录。
  3. 目录结构(最终):
docker-compose-demo/
├── docker-compose.yml
├── mysql/
│   ├── data/
│   └── conf/
└── redis/
    └── data/

3.2 编写 docker-compose.yml 文件

进入 docker-compose-demo 目录,新建 docker-compose.yml 文件,复制下面的配置:

version: '3'
services:
  # Web 应用服务
  web-app:
    image: java:8-jdk-alpine
    container_name: springboot-test-app
    ports:
      - "8080:8080"
    volumes:
      - ./web/app.jar:/app.jar
    command: java -jar /app.jar
    depends_on:
      - mysql-db
      - redis-cache
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/test_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=123456
      - SPRING_REDIS_HOST=redis-cache
      - SPRING_REDIS_PORT=6379
      - SPRING_REDIS_PASSWORD=123456
    restart: always

  # MySQL 数据库服务
  mysql-db:
    image: mysql:8.0
    container_name: mysql-8.0-db
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=test_db
      - MYSQL_CHARSET=utf8mb4
      - MYSQL_COLLATION=utf8mb4_unicode_ci
      - TZ=Asia/Shanghai
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
    restart: always

  # Redis 缓存服务
  redis-cache:
    image: redis:6.2
    container_name: redis-6.2-cache
    ports:
      - "6379:6379"
    command: redis-server --requirepass 123456 --appendonly yes
    volumes:
      - ./redis/data:/data
    restart: always
    environment:
      - TZ=Asia/Shanghai

3.3 一键启动所有服务

  1. 打开终端,进入 docker-compose-demo 目录。
  2. 执行启动命令:
# 后台启动所有服务(推荐)
docker-compose up -d

# 可选:前台启动,实时查看容器日志
# docker-compose up
  1. 启动成功后,执行以下命令,查看容器运行状态:
docker-compose ps

如果所有服务的 State 都显示 Up,说明整套微服务环境启动成功!

3.4 常用 Docker Compose 命令

# 1. 后台启动所有服务
docker-compose up -d

# 2. 停止所有服务(不删除容器和数据)
docker-compose stop

# 3. 停止并删除所有服务、容器
docker-compose down

# 4. 查看所有服务日志
docker-compose logs

# 5. 重启所有服务
docker-compose restart

# 6. 查看服务状态
docker-compose ps

3.5 实战验证

  1. 验证 MySQL:使用 Navicat 等工具,连接宿主机 IP:3306,用户名 root,密码 123456,查看是否能成功连接,且存在 test_db 数据库。
  2. 验证 Redis:使用 Redis Desktop Manager 等工具,连接宿主机 IP:6379,密码 123456。
  3. 验证 Web 应用:打开浏览器,访问 http://localhost:8080,若能看到 SpringBoot 应用的默认页面或自定义接口返回,说明 Web 服务启动成功。

四、常见问题与避坑指南

问题 1:启动时报'version 不兼容'错误

  • 原因:docker-compose.yml 文件中的 version 版本,与本地安装的 Docker Compose 版本不匹配。
  • 解决方案:将 version 改为 3,或升级 Docker Compose 到最新版本。

问题 2:Web 服务启动失败,提示'无法连接 MySQL/Redis'

  • 原因:depends_on 只控制启动顺序,不保证依赖服务完全就绪。
  • 解决方案:简单方案:重启 Web 服务;进阶方案:添加健康检查。

问题 3:容器删除后,数据丢失

  • 原因:未配置 volumes 数据卷挂载。
  • 解决方案:给需要持久化数据的服务配置 volumes 挂载,将数据存储到宿主机目录。

问题 4:执行 docker-compose 命令时,提示'command not found'

  • 原因:Docker Compose 未安装,或未配置环境变量。
  • 解决方案:重新安装 Docker Compose,并配置环境变量。

五、结尾总结

本文从 Docker Compose 的核心概念出发,拆解了 docker-compose.yml 的关键配置,再通过一个完整的实战案例,教大家一键启动 Web+MySQL+Redis 微服务环境,同时分享了常用命令和避坑指南,适合新手快速上手。

Docker Compose 的核心价值在于'简化配置、统一环境、提升效率',尤其适合后端开发、测试环境的部署。掌握它之后,你可以轻松管理多个容器,告别繁琐的手动操作,将更多精力放在业务开发上。

建议大家多动手实践,修改配置、尝试添加新的服务(如 Nginx 反向代理),逐步熟练 Docker Compose 的用法。

目录

  1. Docker Compose 实战:一键部署 Web、数据库与缓存微服务环境
  2. 引言
  3. 一、什么是 Docker Compose(极简认知)
  4. 二、核心:docker-compose.yml 配置详解
  5. 2.1 通用配置模板
  6. 版本号(需与 Docker Compose 版本匹配,常用 3.x)
  7. 定义所有服务(容器),每个服务对应一个容器
  8. 1. Web 应用服务(示例:SpringBoot 应用)
  9. 2. 数据库服务(MySQL)
  10. 3. 缓存服务(Redis)
  11. 2.2 核心配置项拆解
  12. 1. version(版本号)
  13. 2. services(服务定义)
  14. 3. 常用服务配置参数
  15. 三、实战:一键启动 Web+MySQL+Redis 微服务环境
  16. 3.1 实战准备
  17. 3.2 编写 docker-compose.yml 文件
  18. Web 应用服务
  19. MySQL 数据库服务
  20. Redis 缓存服务
  21. 3.3 一键启动所有服务
  22. 后台启动所有服务(推荐)
  23. 可选:前台启动,实时查看容器日志
  24. docker-compose up
  25. 3.4 常用 Docker Compose 命令
  26. 1. 后台启动所有服务
  27. 2. 停止所有服务(不删除容器和数据)
  28. 3. 停止并删除所有服务、容器
  29. 4. 查看所有服务日志
  30. 5. 重启所有服务
  31. 6. 查看服务状态
  32. 3.5 实战验证
  33. 四、常见问题与避坑指南
  34. 问题 1:启动时报“version 不兼容”错误
  35. 问题 2:Web 服务启动失败,提示“无法连接 MySQL/Redis”
  36. 问题 3:容器删除后,数据丢失
  37. 问题 4:执行 docker-compose 命令时,提示“command not found”
  38. 五、结尾总结

更多推荐文章

查看全部
  • Dify 简介:低代码 AI 应用开发平台解析
  • 大模型算法面试完全指南:从基础理论到实战应用
  • DeepSeek-R1 提示工程范式转变与安全部署指南
  • AI 大模型核心知识点梳理与原理分析
  • IntelliJ IDEA 接入 AI 编程助手:Copilot、DeepSeek 与 GPT-4o Mini
  • Llama-Factory 文本纠错任务实测:拼音错别字纠正
  • 初学者如何入门大语言模型开发
  • 基于 Python 的流处理与 RAG 驱动智能 ETL 框架设计
  • Vite 代理与 Nginx 代理:开发与生产环境的配置差异
  • PyTorch 时序预测 Dataloader 构建:GRU 与 Shuffle 机制解析
  • 前端 EME DRM 防录屏原理及实战代码
  • Windows 安装 OpenClaw 配置 Qwen 及 Ollama 本地模型并接入飞书机器人
  • 8 卡 RTX 5090 服务器 llama.cpp 完整安装及性能调优
  • 大模型人才年薪百万引关注,行业需求旺盛
  • Jetpack Activity Results API 详解与源码分析
  • ClawdBot 开源镜像:300MB 轻量级 Docker 容器,集成 Whisper tiny 与 PaddleOCR
  • Java 模拟算法实战:五道经典题解
  • Graylog 开源日志管理平台:从零部署到高级应用
  • N8N 对接飞书多维表实现数据增删改查实战详解
  • 基于大模型的 Agent 智能体架构与实现解析

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online