Docker Compose企业实战系列(八·终章):多环境隔离实战,开发/测试/生产一键切换
前言
这是 Docker Compose 企业实战系列最后一篇、终章收官篇。
前面七篇我们搞定了:LNMP、前后端容器化、Redis生产加固、Nginx网关负载均衡、日志轮转、项目备份迁移。
但所有开发者一定会遇到终极痛点:
-
本地开发环境、测试环境、生产环境配置混乱
-
改配置不敢提交、切换环境改错参数、上线翻车
-
数据库地址、密码、端口、日志级别、开关环境全部混在一起
-
一套代码无法适配多环境,维护成本极高
本篇给你企业标准多环境隔离方案:
一套代码、三套配置、一条命令切换 开发/测试/生产,彻底终结环境混乱问题,也是企业团队标准化落地的最终形态。
一、为什么必须做环境隔离?
绝大多数个人项目、小团队翻车原因:
-
本地开发连了生产数据库,误删数据
-
测试环境调试影响线上业务
-
上线前忘记改配置、端口、密码、路由
-
生产日志打满、开发日志太繁琐
企业标准:三套环境完全隔离、数据隔离、配置隔离、端口隔离
二、最终标准目录结构(企业通用)
新增多环境配置文件,结构干净、规范、可长期维护:
plain
full-stack-docker/
├── docker-compose.yml # 公共基础配置(所有环境共用)
├── .env.dev # 开发环境变量
├── .env.test # 测试环境变量
├── .env.prod # 生产环境变量
├── app/
├── web/
├── nginx-gateway/
├── mysql/
└── redis/
三、三套环境变量配置(直接复制)
1. 开发环境 .env.dev(本地调试、日志全开、宽松权限)
env
# 开发环境 - 本地调试专用
ENV_NAME=dev
# MySQL
MYSQL_ROOT_PASSWORD=dev123456
MYSQL_DATABASE=dev_db
MYSQL_USER=dev_user
MYSQL_PASSWORD=dev123456
# Redis
REDIS_PASSWORD=dev_redis123
REDIS_MAX_MEMORY=128mb
# 版本
MYSQL_VERSION=8.0
REDIS_VERSION=7.2-alpine
2. 测试环境 .env.test(测试服务器、模拟生产)
env
# 测试环境 - 测试服务器专用
ENV_NAME=test
# MySQL
MYSQL_ROOT_PASSWORD=Test@123456
MYSQL_DATABASE=test_db
MYSQL_USER=test_user
MYSQL_PASSWORD=Test@123456
# Redis
REDIS_PASSWORD=TestRedis@2026
REDIS_MAX_MEMORY=256mb
# 版本
MYSQL_VERSION=8.0
REDIS_VERSION=7.2-alpine
3. 生产环境 .env.prod(安全加固、严格限制、高可靠)
env
# 生产环境 - 线上正式环境
ENV_NAME=prod
# MySQL(高强度密码)
MYSQL_ROOT_PASSWORD=Prod@MySQL#2026
MYSQL_DATABASE=prod_db
MYSQL_USER=prod_user
MYSQL_PASSWORD=Prod@User#2026
# Redis生产安全配置
REDIS_PASSWORD=Prod@Redis#2026
REDIS_MAX_MEMORY=512mb
# 版本
MYSQL_VERSION=8.0
REDIS_VERSION=7.2-alpine
四、通用基础 docker-compose.yml(适配所有环境)
只写公共配置,所有差异化配置全部放入环境变量,一文件适配三套环境。
yaml
version: '3.8'
services:
mysql:
image: mysql:${MYSQL_VERSION}
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
networks:
- full-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
redis:
image: redis:${REDIS_VERSION}
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
command: >
redis-server
--requirepass ${REDIS_PASSWORD}
--appendonly yes
--maxmemory ${REDIS_MAX_MEMORY}
--maxmemory-policy allkeys-lru
--databases 16
restart: always
networks:
- full-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
springboot-service:
build: ./app
ports:
- "8080:8080"
depends_on:
- mysql
- redis
environment:
SPRING_PROFILES_ACTIVE: ${ENV_NAME}
restart: always
networks:
- full-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
web:
build: ./web
depends_on:
- springboot-service
restart: always
networks:
- full-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
nginx-gateway:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx-gateway/nginx.conf:/etc/nginx/nginx.conf
- ./nginx-gateway/conf.d:/etc/nginx/conf.d
depends_on:
- web
- springboot-service
restart: always
networks:
- full-net
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
full-net:
driver: bridge
五、核心:一条命令切换环境(企业核心能力)
Docker Compose 支持 --env-file 指定环境文件,实现环境秒切换。
1. 启动开发环境
bash
docker compose --env-file .env.dev up -d --build
2. 启动测试环境
bash
docker compose --env-file .env.test up -d --build
3. 启动生产环境(上线最终命令)
bash
docker compose --env-file .env.prod up -d --build
六、SpringBoot 完美适配多环境
我们在 Compose 中传入了 SPRING_PROFILES_ACTIVE,SpringBoot 自动激活对应环境配置。
你的 SpringBoot 只需保留三套配置:
-
application-dev.yml开发环境(日志全开、调试开启、SQL打印) -
application-test.yml测试环境(接近生产) -
application-prod.yml生产环境(日志精简、关闭调试、安全严格)
无需手动改代码、无需改配置,启动容器自动切换环境。
七、多环境落地优势(企业为什么必须这么做)
-
数据完全隔离:开发/测试/生产数据库独立,互不影响
-
权限密码隔离:生产高强度密码,杜绝弱密码裸奔
-
资源配额隔离:开发低配、生产高配,资源合理利用
-
上线零风险:切换环境只改命令,不改代码
-
团队协作规范:所有人统一环境标准,不会出现"我本地能跑"
八、终章全局避坑总结(整套系列终极复盘)
整套 Compose 实战系列 8 篇,所有坑帮你一次性总结完毕:
-
❌ 禁止配置硬编码 → ✅ 统一.env环境变量
-
❌ 禁止Redis/MySQL裸奔无密码 → ✅ 生产安全加固
-
❌ 禁止日志无限膨胀 → ✅ 日志自动轮转
-
❌ 禁止无数据持久化 → ✅ 数据卷永久留存
-
❌ 禁止单节点无网关 → ✅ Nginx统一入口负载均衡
-
❌ 禁止环境混杂 → ✅ 三环境严格隔离
-
❌ 禁止无备份迁移方案 → ✅ 全自动备份迁移
九、系列全套收官总结
至此!《Docker Compose企业实战系列》全套8篇正式完结。
我们从零到一,完整落地了企业级容器项目所有能力:
-
✅ 基础环境 LNMP 容器化部署
-
✅ SpringBoot 后端完整容器化
-
✅ Vue/React 前端容器化 + 路由404解决
-
✅ Redis 生产级安全、持久化、内存优化
-
✅ Nginx 网关、反向代理、负载均衡
-
✅ 容器日志轮转、磁盘防护
-
✅ 项目备份、迁移、自动容灾
-
✅ 多环境隔离、一键切换、企业标准化
学完本系列,你已经具备 中小企业完整容器化运维 + 上线 + 架构落地能力,完全可以独立负责项目容器化部署与生产运维。
后续进阶路线(下一个系列预告)
Compose 属于单机容器编排,适合小型项目、测试、个人、中小企业。
接下来进阶云原生核心:K8s 零基础实战系列
带你从 Compose 平滑过渡到 K8s 集群、自动扩缩容、自愈、集群调度、微服务编排。