Docker Compose企业实战系列(八·终章):多环境隔离实战,开发/测试/生产一键切换

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 集群、自动扩缩容、自愈、集群调度、微服务编排。

相关推荐
爱喝水的鱼丶1 小时前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
木子欢儿2 小时前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
..Dauntless..2 小时前
【Linux】文件系统(一)
linux·运维·服务器
天空属于哈夫克32 小时前
企业微信API二次开发 赋能私域运营自动化
运维·自动化·企业微信
天远API3 小时前
零信任架构实战:基于天远运营商二要素V即时版构建自动化分时租赁出行会员身份一致性审核网关
运维·人工智能·架构·自动化
极光通讯3 小时前
液冷服务器对内存和SSD的适配要求:高密度部署下的散热与信号完整性
运维·服务器
2501_937767164 小时前
面向设计 / 研发部门:终端文件统一归档 + 服务器定时备份实践
运维·安全
程序员老赵5 小时前
Docker 部署 Hue:轻松搭建数据库与数据仓库 SQL 查询平台
sql·docker·开源
重生之高冷汉堡包6 小时前
ChatGPT 如何打造自动化账号:从零搭建到高效运营
运维·chatgpt·自动化
aaa最北边6 小时前
Linux 上的交叉编译
linux·运维·服务器