Docker Compose 多容器编排实战(系列第五篇:开发环境一键部署)
文章目录前言一、Docker Compose 核心认知必懂1.1 什么是 Docker Compose1.2 核心作用1.3 适用场景重点区分生产与开发二、Docker Compose 安装部署2.1 安装说明2.2 校验安装成功2.3 版本命令区别避坑重点2.4 旧版 Docker 手动安装备用三、Compose 核心 YAML 语法详解超多示例3.1 五大顶级关键字核心骨架3.2 服务全覆盖配置模板可直接复用3.3 关键配置深度释义实战必用1、depends_on 依赖机制2、restart 重启策略3、networks 网络互通机制四、企业实战MySQLRedisNginxSpringBoot 一键编排4.1 标准化项目目录结构4.2 完整版可运行 docker-compose.yml4.3 配置核心亮点解析4.4 SpringBoot 项目配置适配重点实操五、Docker Compose 日常高频命令开发必备5.1 服务启停命令5.2 查看状态与日志命令5.3 进阶运维命令六、为什么要用 Compose 替代手动启动容器6.1 手动部署的致命弊端6.2 Compose 企业级优势七、本篇总结前言通过前四篇的学习我们已经熟练掌握了 Docker 基础命令、容器网络原理、数据卷持久化、自定义镜像打包等核心技能能够独立手动创建、运行、管理单个容器。但回到真实的企业开发场景中完整的后端项目绝不可能依靠单一容器运行绝大多数主流项目都是一套组合服务架构SpringBoot 业务服务 MySQL 数据库 Redis 缓存 Nginx 反向代理。如果沿用传统的docker run手动部署方式会遇到大量无法规避的痛点也是日常开发中最耗时、最容易出问题的环节每个容器都需要单独执行冗长的启动命令重复操作多、极易输错需要手动逐个配置端口映射、目录挂载、容器网络配置零散无统一管理服务存在强依赖关系必须先启动数据库、缓存再启动业务服务手动启动顺序混乱频繁出现项目启动报错项目迁移、电脑重装、服务器重启后需要重新搭建整套环境无法实现环境复用团队开发环境不统一出现经典的「本地能跑、服务器报错」的环境差异问题为了解决多容器统一管理、批量启停、环境标准化编排的核心问题Docker 官方推出轻量化编排神器 ——Docker Compose。本篇将带你从零吃透 Compose 核心概念、安装部署、YAML 语法、企业级多服务一键编排、网络互通、高频命令彻底抛弃手动启动容器的低效开发方式适配当下主流开发规范。一、Docker Compose 核心认知必懂1.1 什么是 Docker ComposeDocker Compose 是Docker 官方原生的单机多容器编排工具专门用于管理单机环境下的多个容器应用。通俗直白理解前后对比传统方式N 个容器写 N 条docker run命令逐个启动、逐个配置、逐个管理繁琐且易错。Compose 方式只用一个docker-compose.yml文件统一描述所有服务的配置一条命令即可启停、管理整套项目环境。1.2 核心作用Compose 聚焦单机多容器场景解决多服务部署的所有痛点核心能力如下一键启动、停止、重启、删除整套微服务环境告别重复命令统一管理所有容器的网络、端口、数据卷、启动规则、服务依赖自动控制服务启动顺序解决依赖未就绪导致的项目启动失败问题实现开发、测试环境标准化配置可同步、可复用团队环境完全统一1.3 适用场景重点区分生产与开发这是企业开发的核心认知避免技术场景误用Docker Compose 专属场景本地开发环境、单机测试环境、小型单机项目部署。主打轻量、简单、高效是日常开发的首选工具。不适用场景大规模集群、高可用、弹性扩容的生产环境。生产替代方案企业线上生产集群、微服务大规模部署统一使用K8sKubernetes。总结开发测试用 Compose线上集群用 K8s二者互补是当下主流的 Docker 技术架构。二、Docker Compose 安装部署2.1 安装说明目前主流新版 Docker 已默认内置 Compose 插件无需单独安装Windows/Mac 端 Docker Desktop、Linux 新版 Docker Engine、云服务器、虚拟机环境均可直接使用。仅老旧版本 Docker 需要手动安装。2.2 校验安装成功执行以下命令校验环境dockercompose version输出版本号信息即代表环境正常可用。2.3 版本命令区别避坑重点新版命令推荐docker compose无短横线Go 重构性能更强旧版命令淘汰docker-compose有短横线Python 版本仅兼容旧环境2.4 旧版 Docker 手动安装备用若服务器 Docker 版本过低可执行以下命令快速安装# 下载二进制文件curl-Lhttps://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)-o/usr/local/bin/docker-compose# 赋予执行权限chmodx /usr/local/bin/docker-compose# 校验版本docker-composeversion注意GitHub 下载链接可能存在网络超时国内服务器可替换镜像源加速下载。三、Compose 核心 YAML 语法详解超多示例Docker Compose 所有配置均写入docker-compose.yml语法严格缩进必须使用2个空格缩进禁止使用 Tab 键否则配置直接失效。3.1 五大顶级关键字核心骨架所有 Compose 配置文件均由以下 5 个顶级字段组成覆盖全部开发场景version声明配置文件版本推荐3.8兼容性最全、行业通用services核心核心核心定义所有容器服务一个子节点对应一个容器networks自定义网桥网络实现多容器统一组网、服务名互通volumes统一声明数据卷实现容器数据持久化configs统一管理配置文件日常开发极少使用3.2 服务全覆盖配置模板可直接复用以下是企业通用的服务配置模板包含所有高频参数注释详尽可直接复制修改使用services:# 自定义服务名自定义建议见名知意demo-service:image:nginx:stable# 指定镜像名称版本build:.# 本地Dockerfile构建镜像自定义镜像时使用container_name:demo-nginx# 自定义容器名称避免随机命名restart:always# 容器重启策略ports:# 宿主机:容器 端口映射-80:80volumes:# 目录/数据卷挂载持久化数据-./nginx/html:/usr/share/nginx/htmlenvironment:# 环境变量配置-TZAsia/Shanghaidepends_on:# 服务依赖控制启动顺序-mysqlnetworks:# 加入自定义网络-dev-net3.3 关键配置深度释义实战必用1、depends_on 依赖机制用于控制服务启动顺序解决服务依赖报错问题。示例场景SpringBoot 项目必须依赖 MySQL、Redis配置后会自动先启动数据库、缓存再启动业务服务。depends_on:-mysql-redis注意该字段仅控制容器启动顺序不等待服务完全初始化复杂场景可搭配健康检查使用。2、restart 重启策略开发、测试环境标配策略三种常用模式always容器无论正常/异常退出永远自动重启企业通用推荐no默认策略退出不重启on-failure仅容器异常退出时重启3、networks 网络互通机制所有服务加入同一个自定义网桥网络容器之间可直接通过服务名通信无需填写IP彻底解决容器IP动态变动导致的服务失联问题。示例mysql 服务可直接用mysql:3306访问无需查询容器IP。四、企业实战MySQLRedisNginxSpringBoot 一键编排本节搭建当下 Java 开发最主流的全套环境一次性编排四大核心服务配置可直接落地使用覆盖90%以上的前后端分离开发项目。4.1 标准化项目目录结构统一目录规范方便配置管理、数据持久化、日志查看project/ ├── docker-compose.yml# Compose核心编排文件├── nginx/# Nginx全套配置目录│ ├── conf.d/# 代理配置文件│ ├── html/# 静态资源目录│ └── logs/# 日志持久化目录├── mysql/# MySQL数据持久化目录└── redis/# Redis数据持久化目录4.2 完整版可运行 docker-compose.yml# 配置版本声明通用兼容版本version:3.8# 自定义统一网桥实现所有服务网络互通networks:dev-net:driver:bridge# 声明全局数据卷实现数据持久化volumes:mysql-data:redis-data:# 所有服务编排配置services:# 1、MySQL 5.7 数据库服务mysql:image:mysql:5.7container_name:mysqlrestart:alwaysports:-3306:3306environment:MYSQL_ROOT_PASSWORD:123456MYSQL_CHARSET:utf8mb4TZ:Asia/Shanghaivolumes:-mysql-data:/var/lib/mysqlnetworks:-dev-net# 2、Redis 缓存服务轻量alpine版本redis:image:redis:6-alpinecontainer_name:redisrestart:alwaysports:-6379:6379volumes:-redis-data:/datanetworks:-dev-net# 3、Nginx 反向代理服务nginx:image:nginx:stablecontainer_name:nginxrestart:alwaysports:-80:80volumes:-./nginx/html:/usr/share/nginx/html-./nginx/conf.d:/etc/nginx/conf.d-./nginx/logs:/var/log/nginxnetworks:-dev-net# 4、SpringBoot 后端业务服务app:build:.container_name:springboot-apprestart:alwaysports:-8080:8080# 依赖数据库、缓存保证启动顺序depends_on:-mysql-redisnetworks:-dev-net4.3 配置核心亮点解析统一组网所有服务加入dev-net网桥服务间通过服务名直接通信无需依赖固定IP有序启动SpringBoot 服务后置启动规避数据库未初始化导致的连接异常全程自启所有服务配置restart: always服务器重启、容器异常退出自动恢复数据不丢失MySQL、Redis 采用数据卷持久化删除、重建容器数据保留4.4 SpringBoot 项目配置适配重点实操这是 Compose 开发的核心优势无需写容器IP直接写服务名即可连接彻底解决IP变动问题。application.yml / application.properties 适配配置# MySQL数据库连接配置 spring.datasource.urljdbc:mysql://mysql:3306/test?useUnicodetruecharacterEncodingutf-8serverTimezoneGMT%2B8 spring.datasource.usernameroot spring.datasource.password123456 # Redis缓存连接配置 spring.redis.hostredis spring.redis.port6379五、Docker Compose 日常高频命令开发必备所有命令必须在 docker-compose.yml 同级目录执行整理企业开发全套常用命令全覆盖日常操作。5.1 服务启停命令# 前台启动可实时看日志适合调试终端关闭服务停止dockercompose up# 后台静默启动开发/测试环境首选dockercompose up-d# 停止所有服务保留容器、网络、数据dockercompose stop# 启动已停止的服务dockercompose start# 停止并删除容器、网络保留数据卷数据不丢dockercompose down# 彻底清空所有资源含数据卷数据清空谨慎使用dockercompose down-v5.2 查看状态与日志命令# 查看当前编排所有服务运行状态dockercomposeps# 查看所有服务全部日志dockercompose logs# 实时滚动查看日志调试必备dockercompose logs-f# 单独查看SpringBoot服务日志dockercompose logs-fapp# 单独查看MySQL日志dockercompose logs-fmysql5.3 进阶运维命令# 重启所有服务dockercompose restart# 重启单个指定服务无需重启整套环境dockercompose restart mysql# 代码/配置修改后重新构建镜像并启动dockercompose up-d--build# 进入指定容器内部dockercomposeexecmysqlbash六、为什么要用 Compose 替代手动启动容器6.1 手动部署的致命弊端命令冗余难维护单个容器 run 命令动辄几十行难记忆、难复用、容易写错部署效率极低新环境部署需要逐条敲命令整套环境搭建耗时几十分钟启动顺序混乱手动启动随机顺序频繁出现服务连接失败团队环境割裂每个人配置参数不同环境不一致增加排查问题成本6.2 Compose 企业级优势一次配置永久复用YAML 文件可存入 Git 版本控制团队全员同步统一配置极速部署一条命令 5 秒拉起整套开发环境全自动运维自动处理启动顺序、网络互通、数据持久化、异常重启环境绝对统一彻底解决「本地正常、线上报错」的环境问题七、本篇总结1、Docker Compose 是单机多容器专属编排工具主打开发、测试环境轻量化部署生产高可用集群需使用 K8s二者分工明确是当下主流技术架构2、Compose 核心依托docker-compose.yml文件通过 version、services、networks、volumes 四大核心模块实现多容器统一管理3、依靠depends_on实现有序启动依靠自定义网桥实现服务名互通彻底摆脱IP依赖大幅提升环境稳定性4、熟练掌握 up、down、restart、logs、build 等高频命令可完全替代手动 docker run 操作是开发必备核心技能5、企业标准开发流程Dockerfile 自定义镜像 Docker Compose 一键编排部署实现项目快速迭代、环境标准化统一。