予枫个人主页 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》 Debug 这个世界Return 更好的自己引言做后端开发的同学一定遇到过这样的痛点部署微服务时要逐个启动Web应用、数据库、缓存等容器还要手动配置容器联动步骤繁琐且容易出错换个环境又要重复配置。而Docker Compose 正是解决这个问题的“神器”只需编写一个docker-compose.yml文件一行命令就能一键启动整套微服务环境统一配置、一键复用大幅提升开发和部署效率。今天就带大家从实战出发吃透Docker Compose 编排技巧彻底告别繁琐的容器启动操作文章目录引言一、什么是Docker Compose极简认知二、核心docker-compose.yml 配置详解必看2.1 通用配置模板直接复用2.2 核心配置项拆解新手必懂1. version版本号2. services服务定义3. 常用服务配置参数三、实战一键启动WebMySQLRedis 微服务环境3.1 实战准备3.2 编写docker-compose.yml 文件3.3 一键启动所有服务3.4 常用Docker Compose 命令必记3.5 实战验证四、常见问题与避坑指南新手必看问题1启动时报“version不兼容”错误问题2Web服务启动失败提示“无法连接MySQL/Redis”问题3容器删除后数据丢失问题4执行docker-compose命令时提示“command not found”五、结尾总结一、什么是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.xversion: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_URLjdbc:mysql://mysql:3306/test_db?useUnicodetruecharacterEncodingutf8-SPRING_DATASOURCE_USERNAMEroot-SPRING_DATASOURCE_PASSWORD123456# 重启策略容器异常退出时自动重启restart:always# 2. 数据库服务MySQLmysql:image:mysql:8.0container_name:mysql-8.0ports:-3306:3306environment:-MYSQL_ROOT_PASSWORD123456-MYSQL_DATABASEtest_db# 自动创建指定数据库# 数据卷挂载将宿主机目录挂载到容器实现数据持久化避免容器删除后数据丢失volumes:-./mysql/data:/var/lib/mysql-./mysql/conf:/etc/mysql/conf.drestart:always# 3. 缓存服务Redisredis:image:redis:6.2container_name:redis-6.2ports:-6379:6379# 密码配置可选根据需求设置command:redis-server--requirepass 123456volumes:-./redis/data:/datarestart:always2.2 核心配置项拆解新手必懂1. version版本号用于指定Docker Compose的配置版本需与本地安装的Docker Compose版本匹配否则可能出现兼容性问题。常用版本3兼容Docker 1.13.0及以上版本建议直接使用3.x版本无需纠结低版本差异。2. services服务定义整个配置文件的核心节点所有需要启动的容器都定义在这个节点下每个子节点代表一个服务一个容器。子节点名称如web、mysql、redis可自定义建议与服务功能对应便于识别。3. 常用服务配置参数配置项作用示例image指定容器使用的镜像image: mysql:8.0container_name自定义容器名称container_name: mysql-8.0ports端口映射实现宿主机访问容器ports: - “3306:3306”depends_on定义服务依赖控制容器启动顺序depends_on: - mysqlenvironment设置环境变量传递配置参数environment: - MYSQL_ROOT_PASSWORD123456volumes数据卷挂载实现数据持久化volumes: - ./mysql/data:/var/lib/mysqlrestart重启策略容器异常退出时自动重启restart: alwayscommand覆盖容器启动时执行的命令command: redis-server --requirepass 123456⚠️ 注意depends_on 只控制容器的启动顺序不保证依赖服务完全启动比如mysql容器启动但服务未就绪web服务可能启动失败后续可通过健康检查优化新手先掌握基础用法即可。三、实战一键启动WebMySQLRedis 微服务环境理论讲完直接上实战本次实战将搭建一个完整的微服务基础环境包含3个服务Web服务SpringBoot 简单测试应用模拟实际业务应用数据库服务MySQL 8.0存储业务数据缓存服务Redis 6.2缓存热点数据提升应用性能全程手把手操作新手跟着做就能一键启动整套环境3.1 实战准备本地已安装Docker和Docker Compose执行docker-compose -v验证有版本输出即为安装成功。新建一个项目目录如docker-compose-demo用于存放docker-compose.yml文件和相关挂载目录。目录结构最终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:3services:# Web应用服务SpringBoot测试应用镜像可自行替换为自己的项目镜像web-app:image:java:8-jdk-alpinecontainer_name:springboot-test-appports:-8080:8080# 挂载本地SpringBoot jar包到容器如果没有现成镜像可通过这种方式运行自己的jar包volumes:-./web/app.jar:/app.jarcommand:java-jar /app.jardepends_on:-mysql-db-redis-cacheenvironment:-SPRING_DATASOURCE_URLjdbc:mysql://mysql-db:3306/test_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai-SPRING_DATASOURCE_USERNAMEroot-SPRING_DATASOURCE_PASSWORD123456-SPRING_REDIS_HOSTredis-cache-SPRING_REDIS_PORT6379-SPRING_REDIS_PASSWORD123456restart:always# MySQL数据库服务mysql-db:image:mysql:8.0container_name:mysql-8.0-dbports:-3306:3306environment:-MYSQL_ROOT_PASSWORD123456# 根密码-MYSQL_DATABASEtest_db# 自动创建的数据库-MYSQL_CHARSETutf8mb4# 字符集-MYSQL_COLLATIONutf8mb4_unicode_civolumes:-./mysql/data:/var/lib/mysql# 数据持久化-./mysql/conf:/etc/mysql/conf.d# 配置挂载restart:always# 可选设置时区避免时间不一致environment:-TZAsia/Shanghai# Redis缓存服务redis-cache:image:redis:6.2container_name:redis-6.2-cacheports:-6379:6379command:redis-server--requirepass 123456--appendonly yes# 开启密码和持久化volumes:-./redis/data:/data# 数据持久化restart:alwaysenvironment:-TZAsia/Shanghai✨ 小提示如果没有自己的SpringBoot jar包可暂时注释掉web-app服务的volumes和command配置仅启动MySQL和Redis同样能完成实战练习。觉得有用的同学记得点赞收藏后续可直接复用这份配置3.3 一键启动所有服务打开终端进入docker-compose-demo目录确保终端路径与docker-compose.yml文件所在路径一致。执行启动命令核心命令# 后台启动所有服务推荐不占用终端docker-composeup -d# 可选前台启动实时查看容器日志适合调试# docker-compose up启动成功后执行以下命令查看容器运行状态docker-composeps如果所有服务的State都显示Up说明整套微服务环境启动成功3.4 常用Docker Compose 命令必记启动环境只是第一步日常开发中这些命令会经常用到建议牢记# 1. 后台启动所有服务最常用docker-composeup -d# 2. 停止所有服务不删除容器和数据docker-composestop# 3. 停止并删除所有服务、容器数据卷挂载的数据不会删除docker-composedown# 4. 查看所有服务日志可指定服务名称只看单个服务日志docker-composelogsdocker-composelogs web-app# 只看web应用的日志# 5. 重启所有服务docker-composerestart# 6. 查看服务状态docker-composeps3.5 实战验证验证MySQL使用Navicat、DataGrip等工具连接宿主机IP:3306用户名root密码123456查看是否能成功连接且存在test_db数据库。验证Redis使用Redis Desktop Manager等工具连接宿主机IP:6379密码123456查看是否能成功连接。验证Web应用打开浏览器访问http://localhost:8080若能看到SpringBoot应用的默认页面或自定义接口返回说明Web服务启动成功且能正常连接MySQL和Redis。 至此一套完整的WebMySQLRedis微服务环境就通过Docker Compose 一键部署完成了后续换个环境只需复制这份docker-compose.yml文件执行一行up -d命令就能快速复用环境再也不用重复配置了。四、常见问题与避坑指南新手必看在使用Docker Compose 编排的过程中新手很容易遇到一些问题这里整理了4个最常见的问题及解决方案帮大家避坑问题1启动时报“version不兼容”错误原因docker-compose.yml文件中的version版本与本地安装的Docker Compose版本不匹配。解决方案将version改为3兼容大多数版本或升级Docker Compose到最新版本。问题2Web服务启动失败提示“无法连接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的关键配置再通过一个完整的实战案例教大家一键启动WebMySQLRedis微服务环境同时分享了常用命令和避坑指南适合新手快速上手。Docker Compose 的核心价值在于“简化配置、统一环境、提升效率”尤其适合后端开发、测试环境的部署也是微服务编排的入门基础。掌握它之后你可以轻松管理多个容器告别繁琐的手动操作将更多精力放在业务开发上。建议大家多动手实践修改配置、尝试添加新的服务如Nginx反向代理逐步熟练Docker Compose的用法。 最后觉得本文对你有帮助的同学记得点赞收藏关注哦我是予枫专注分享后端开发、Docker、微服务相关实战技巧后续会更新更多Docker进阶用法带你少走弯路、高效开发