【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

AI 也能操控浏览器了?OpenClaw Browser Relay 接入指南

AI 也能操控浏览器了?OpenClaw Browser Relay 接入指南

目录 * 为什么需要 Browser Relay? * 浏览器模式 * 扩展中继模式(Extension Relay) * 踩坑记录 * 实战案例:AI 帮你干活 * 案例一:自动查资料 + 总结 为什么需要 Browser Relay? 兄弟姐妹们,有没有这些痛点: 😭 想自动化操作浏览器,但工具配置复杂、代码一大串还容易报错 😭 页面稍微变一下,脚本就失效,维护到头秃 😭 遇到登录态、Cookie、JavaScript 渲染的页面,直接歇菜 好消息来了! 🎉 OpenClaw Browser Relay 直接用 AI 控制浏览器!不用记 API、不用写复杂脚本,只要会说话(打字)就行!从此以后: 从此以后: ✅ “帮我去某某网站查个数据” —— AI 自动打开浏览器、登录、

PyTorch生成式人工智能(18)——循环神经网络详解与实现

PyTorch生成式人工智能(18)——循环神经网络详解与实现

PyTorch生成式人工智能(18)——循环神经网络详解与实现 * 0. 前言 * 1. 文本生成的挑战 * 2. 循环神经网络 * 2.1 文本数据 * 2.2 循环神经网络原理 * 3. 长短期记忆网络 * 3. 自然语言处理基础 * 3.1 分词 * 3.2 词嵌入 * 3.3 词嵌入在自然语言处理中的应用 * 小结 * 系列链接 0. 前言 我们已经学习了如何生成数字和图像等内容。从本节开始,我们将主要聚焦于文本生成。人类语言极其复杂且充满细微差别,不仅仅涉及语法和词汇的理解,还包括上下文、语气和文化背景等。成功生成连贯且语境适当的文本是一项重大挑战,需要深入理解和处理语言。 1. 文本生成的挑战 人类主要通过语言进行交流,能够生成语言文本的人工智能可以更自然地与用户互动,使技术变得更加易于使用。文本生成有广泛的应用,包括自动化客户服务回复、创作文章和电影剧本创作、帮助创意写作,

深度解析 MySQL 与 MCP 集成:从环境构建到 AI 驱动的数据交互全流程

深度解析 MySQL 与 MCP 集成:从环境构建到 AI 驱动的数据交互全流程

前言 在当前大语言模型(LLM)应用开发的浪潮中,MCP(Model Context Protocol)协议正在成为连接 AI 模型与本地数据设施的关键桥梁。本文将以 MySQL 数据库为例,详细拆解如何通过 MCP 协议让 AI 模型直接操作关系型数据库,涵盖从服务器发现、数据库架构设计、数据初始化、MCP 配置文件编写到复杂自然语言查询与写入的全过程。 第一部分:MCP 服务器的发现与配置获取 在进行任何数据交互之前,首要任务是确立连接协议与服务源。通过蓝耘 MCP 广场,开发者可以快速检索并获取所需的 MCP 服务器配置。 在搜索栏输入 mysql 关键字,系统会立即检索出相关的 MCP 服务器资源。如下图所示,搜索结果中清晰展示了 MySQL 对应的 MCP 服务卡片。 点击选中该 MCP 服务器后,

一文读懂AI圈爆火的Skills:是什么、怎么用

一文读懂AI圈爆火的Skills:是什么、怎么用

大家好,我是jobleap.cn的小九。 最近AI圈,Skills彻底火了。Github上相关仓库动辄斩获上万星标,比如含50多个Claude技能的仓库、Superpowers工作流项目,均已突破18K星。这股热度,堪比2023-2024年的Prompt模板热潮——彼时大家疯狂分享Prompt,现在则扎堆交流Skills。 不少人疑惑:Skills到底是什么?和Prompt、MCP有啥区别?我花了两天整理,用直白的案例和方法,带你搞懂Skills的本质与用法。 一、Skills到底是什么?先看两个实战案例 Skills直译是“技能”,核心是「给AI智能体(Agent)用的技能包」。光说定义太抽象,分享两个我们公司的实战案例,帮你直观理解它的价值。 案例1:AI选题系统,把2-3小时工作缩成一句话指令 做内容的都懂,选题是个“海量信息筛精选”的耗时活。以前我们每天要刷遍推特、Reddit、Github、知乎、小红书等近10个平台,筛选热点、判断价值、找切入角度,整套流程要2-3小时,严重挤占核心工作时间。 去年12月,