【Docker进阶篇】Docker Compose 实战:一键启动Web+数据库+缓存,微服务环境部署不再绕弯

【Docker进阶篇】Docker Compose 实战:一键启动Web+数据库+缓存,微服务环境部署不再绕弯

在这里插入图片描述


🍃 予枫个人主页
📚 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常

💻 Debug 这个世界,Return 更好的自己!


引言

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

文章目录

一、什么是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.0container_name: mysql-8.0ports:-"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.2container_name: redis-6.2ports:-"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/ # MySQL挂载目录(数据+配置) │ ├── data/ # 数据持久化目录 │ └── conf/ # 配置文件目录 └── redis/ # Redis挂载目录 └── data/ # 数据持久化目录 

3.2 编写docker-compose.yml 文件

进入docker-compose-demo目录,新建docker-compose.yml文件,复制下面的配置(可直接复用,只需根据需求修改镜像和环境变量):

version:'3'services:# Web应用服务(SpringBoot测试应用,镜像可自行替换为自己的项目镜像)web-app:image: java:8-jdk-alpine container_name: springboot-test-app ports:-"8080:8080"# 挂载本地SpringBoot jar包到容器(如果没有现成镜像,可通过这种方式运行自己的jar包)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.0container_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 volumes:- ./mysql/data:/var/lib/mysql # 数据持久化- ./mysql/conf:/etc/mysql/conf.d # 配置挂载restart: always # 可选:设置时区,避免时间不一致environment:- TZ=Asia/Shanghai # Redis缓存服务redis-cache:image: redis:6.2container_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 
✨ 小提示:如果没有自己的SpringBoot jar包,可暂时注释掉web-app服务的volumes和command配置,仅启动MySQL和Redis,同样能完成实战练习。觉得有用的同学,记得点赞收藏,后续可直接复用这份配置!

3.3 一键启动所有服务

  1. 打开终端,进入docker-compose-demo目录(确保终端路径与docker-compose.yml文件所在路径一致)。
  2. 执行启动命令(核心命令):
# 后台启动所有服务(推荐,不占用终端)docker-compose up -d # 可选:前台启动,实时查看容器日志(适合调试)# docker-compose up
  1. 启动成功后,执行以下命令,查看容器运行状态:
docker-composeps

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

3.4 常用Docker Compose 命令(必记)

启动环境只是第一步,日常开发中,这些命令会经常用到,建议牢记:

# 1. 后台启动所有服务(最常用)docker-compose up -d # 2. 停止所有服务(不删除容器和数据)docker-compose stop # 3. 停止并删除所有服务、容器(数据卷挂载的数据不会删除)docker-compose down # 4. 查看所有服务日志(可指定服务名称,只看单个服务日志)docker-compose logs docker-compose logs web-app # 只看web应用的日志# 5. 重启所有服务docker-compose restart # 6. 查看服务状态docker-composeps

3.5 实战验证

  1. 验证MySQL:使用Navicat、DataGrip等工具,连接宿主机IP:3306,用户名root,密码123456,查看是否能成功连接,且存在test_db数据库。
  2. 验证Redis:使用Redis Desktop Manager等工具,连接宿主机IP:6379,密码123456,查看是否能成功连接。
  3. 验证Web应用:打开浏览器,访问http://localhost:8080,若能看到SpringBoot应用的默认页面或自定义接口返回,说明Web服务启动成功,且能正常连接MySQL和Redis。
🎉 至此,一套完整的Web+MySQL+Redis微服务环境,就通过Docker Compose 一键部署完成了!后续换个环境,只需复制这份docker-compose.yml文件,执行一行up -d命令,就能快速复用环境,再也不用重复配置了。

四、常见问题与避坑指南(新手必看)

在使用Docker Compose 编排的过程中,新手很容易遇到一些问题,这里整理了4个最常见的问题及解决方案,帮大家避坑:

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

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

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

  • 原因:depends_on只控制启动顺序,不保证依赖服务完全就绪(比如MySQL容器启动,但服务还在初始化,Web服务就去连接)。
  • 解决方案:简单方案:重启Web服务(docker-compose restart web-app);进阶方案:添加健康检查,确保依赖服务就绪后再启动Web服务。

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

  • 原因:未配置volumes数据卷挂载,容器内的数据存储在容器本身,容器删除后数据随之丢失。
  • 解决方案:给需要持久化数据的服务(如MySQL、Redis)配置volumes挂载,将数据存储到宿主机目录。

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

  • 原因:Docker Compose未安装,或未配置环境变量。
  • 解决方案:重新安装Docker Compose,并配置环境变量,确保终端能识别docker-compose命令。

五、结尾总结

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

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

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


💡 最后,觉得本文对你有帮助的同学,记得点赞+收藏+关注哦!我是予枫,专注分享后端开发、Docker、微服务相关实战技巧,后续会更新更多Docker进阶用法,带你少走弯路、高效开发~

Read more

打通任督二脉:让你的 GitHub Copilot 瞬间学会 Claude Code 的所有绝招

打通任督二脉:让你的 GitHub Copilot 瞬间学会 Claude Code 的所有绝招

打通任督二脉:让你的 GitHub Copilot 瞬间学会 Claude Code 的所有绝招 目标读者:希望在 VSCode/Zed 编辑器中直接复用 Claude Code 强大本地能力的开发者、DevOps 工程师、AI 工具流搭建者。 核心价值:通过自动化映射机制,打破 Claude Code CLI 与编辑器 Copilot 之间的"生殖隔离",实现一套 Skills/Agents 双端复用。 阅读时间:8 分钟 引言 你是否遇到过这种割裂的体验:在终端里,Claude Code 配置了强大的 tech-blog 技能,能一键生成高质量博客;配置了 code-review

白嫖专业版!Github Copilot Pro竟然可以免费使用

今天有个好消息要和大家分享: GitHub Copilot 已在 Visual Studio Code 上免费开放! 无论是谁,都能畅享 AI 助力下的高效开发新体验! 如何免费在vscode中使用copilot * 下载最新版本的 VS Code https://code.visualstudio.com/Download 如果下载慢,可以通过下面的网盘链接获取: https://pan.quark.cn/s/3fb6dcedfed8 * 打开vscode编译器,按照下面步骤操作 这时候就可以看到账户已经启用Copilot Free copilot Free 和copilot Pro主要功能对比 功能FreePro消息和互动每月最多 50 个无限实时代码建议每月最多 2,000无限上下文感知编码支持和解释支持支持VS Code 中的多文件编辑支持支持切换模型支持支持GitHub 中的代码审查不支持支持拉取请求中的 Copilot Workspace不支持支持VS Code 中的 Java

丹摩智算平台部署 Llama 3.1:实践与体验

丹摩智算平台部署 Llama 3.1:实践与体验

文章目录 * 前言 * 部署前的准备 * 创建实例 * 部署与配置 Llama 3.1 * 使用心得 * 总结 前言 在最近的开发工作中,我有机会体验了丹摩智算平台,部署并使用了 Llama 3.1 模型。在人工智能和大模型领域,Meta 推出的 Llama 3.1 已经成为了目前最受瞩目的开源模型之一。今天,我将通过这次实践,分享在丹摩平台上部署 Llama 3.1 的实际操作流程以及我的个人心得。 部署前的准备 Llama 3.1 是一个资源需求较高的模型,因此在部署之前,首先要确保拥有合适的硬件环境。按照文档中的要求,我选择了 Llama 3.1 8B 版本进行测试。8B 模型对 GPU 显存的需求为

ClawdBot语音效果:Whisper tiny在嘈杂环境下的中英文语音转写准确率实测

ClawdBot语音效果:Whisper tiny在嘈杂环境下的中英文语音转写准确率实测 1. ClawdBot是什么:一个真正属于你的本地AI助手 ClawdBot不是云端API的又一个封装,也不是需要反复申请密钥的SaaS服务。它是一个能完整运行在你个人设备上的AI助手——从模型推理、对话管理到多模态处理,全部离线完成。你不需要担心数据上传、隐私泄露或按调用次数付费。只要一台性能尚可的笔记本、NUC盒子,甚至树莓派4,就能把它跑起来。 它的后端由vLLM驱动,这意味着Qwen3-4B-Instruct这类4B参数量级的大模型,在消费级显卡上也能实现毫秒级响应。但ClawdBot的价值远不止于文本生成。它把语音、图像、结构化查询等能力,像搭积木一样整合进统一框架:你说一句话,它能听、能懂、能答;你发一张菜单截图,它能识、能译、能解释;你问“东京现在几点”,它不跳转网页,直接给你答案。 这种“全链路本地化”的设计,让它天然适合对隐私敏感、网络受限或追求低延迟响应的场景。而今天我们要聚焦的,正是它语音能力中最关键的一环——Whisper tiny模型在真实嘈杂环境下的中英文转写