【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

【AIGC高保真】Sora2 微观皮肤纹理渲染与美妆TVC的分屏验证技术

【AIGC高保真】Sora2 微观皮肤纹理渲染与美妆TVC的分屏验证技术

摘要 美妆(Beauty)广告是AI视频制作中的一个技术制高点,它要求模型具备微观皮肤纹理渲染、流体动态模拟以及高对比度的效果验证能力。本文详细剖析如何通过Prompt Engineering,实现粉底液广告中常见的“分屏对比(Split Screen Comparison)” 和对焦清晰、无瑕疵妆效(Flawless Finish)的4K级TVC制作  。 1. 美妆视频的商业逻辑与AI技术难点  美妆视频的核心是诱惑力和真实感  。过去需要顶级摄影棚、高价模特和昂贵的微距镜头  。Sora2的价值在于其物理引擎能够模拟膏体/液体的微观物理属性(如:Viscosity/粘稠度, Sheen/光泽, Granularity/颗粒感),这直接决定了妆效的逼真度。 2. 黄金公式:上妆丝滑感与无瑕疵妆效  Sora美妆视频的黄金公式是: {Prompt}_{{Beauty}} = {超清面部特写}] + {高饱和显色}] + {上妆过程丝滑感}] + {无瑕疵妆效/卖点验证}] 动作上,必须包含 Gliding (丝滑涂抹)、Blending (晕染)

2026新手小白AI创业变现指南(二)- AI写作辅助平台

2026新手小白AI创业变现指南(二)- AI写作辅助平台

刚刚更新了2026新手小白AI创业变现指南l列表,新增加了测试过的炼字工坊、蛙蛙写作、笔杆平台(学术论文平台,非通用写作平台)。想简单介绍下,详情请点击2026新手小白AI创业变现指南(一)中平台列表中平台名称看详细介绍。 一、炼字工坊 平台基础信息 项目内容平台名称炼字工坊官方网址https://lianzigongfang.com平台介绍专为网文/剧本/漫剧作者设计的AI创作平台,帮你把精力花在“故事和表达”上,把重复、耗时、卡壳的部分交给AI。相比通用AI,炼字工坊在长篇稳定性上有明显优势。它用「问答+抽卡」帮你定题材卖点,用「设定库」自动归档世界观和角色,用「分层大纲」把控剧情节奏,用「续写润色」解决卡文问题。最重要的是:你的作品不会用于AI训练,版权完全归你。核心定位长篇创作的全流程辅助,从灵感、设定到续写、润色,让你专注创作本身。 🎯 它和通用AI(如DeepSeek、千问)

AIGC与虚拟身份及元宇宙的未来:虚拟人物创作与智能交互

AIGC与虚拟身份及元宇宙的未来:虚拟人物创作与智能交互

个人主页:云边有个稻草人-ZEEKLOG博客 目录 引言 一、AIGC在元宇宙中的作用 1.1 AIGC与虚拟人物创作 1.1.1 生成虚拟人物外观 1.1.2 个性化虚拟角色设计 1.2 AIGC与虚拟角色的行为与交互 1.2.1 行为生成与强化学习 1.2.2 对话生成与自然语言处理 二、AIGC实现虚拟人物创作与行为交互的技术架构 2.1 生成虚拟人物外观 示例代码:基于GAN生成虚拟人物的外观 2.2 虚拟角色的行为生成 示例代码:基于强化学习的行为训练 2.3 虚拟角色的对话生成 示例代码:基于GPT-3进行对话生成 三、AIGC与虚拟身份的未来发展 3.1 AIGC在个性化虚拟角色中的应用

Qwen3-VL + LLama-Factory进行针对Grounding任务LoRA微调

Qwen3-VL + LLama-Factory进行针对Grounding任务LoRA微调

0.官方GitHub网站: GitHub - QwenLM/Qwen3-VL:Qwen3-VL 是由阿里云 Qwen 团队开发的多模态大语言模型系列。https://github.com/QwenLM/Qwen3-VL 空间感知能力大幅提升:2D grounding 从绝对坐标变为相对坐标,支持判断物体方位、视角变化、遮挡关系,能实现 3D grounding,为复杂场景下的空间推理和具身场景打下基础。 OCR 支持更多语言及复杂场景:支持的中英外的语言从 10 种扩展到 32 种,覆盖更多国家和地区;在复杂光线、模糊、倾斜等实拍挑战性场景下表现更稳定;对生僻字、古籍字、专业术语的识别准确率也显著提升;超长文档理解和精细结构还原能力进一步提升。 一是采用 MRoPE-Interleave,原始MRoPE将特征维度按照时间(t)、高度(h)和宽度(w)的顺序分块划分,