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

相关推荐
IT大白鼠2 小时前
搜索系列 · 第 04 篇——部署实操:内网集群落地
运维·elasticsearch·nosql
Elastic 中国社区官方博客2 小时前
使用 Jev 作为 search reranker:基准测试与实现方法
大数据·运维·elasticsearch·全文检索
shjita2 小时前
centos中安装docker
linux·docker·centos
红红谈说2 小时前
浏览器自动化环境老是起不来?依赖治理与启动自检的一次复盘
运维·自动化·浏览器自动化·进程残留·环境依赖·启动自检·版本比较
ysu_03142 小时前
Docker-Desktop-WSL2实战指南-Windows从安装配置到项目容器化
windows·python·docker·容器·composer·dockerfile·wsl2
赵民勇3 小时前
glib-compile-schemas命令详解
linux·运维
天衍四九-3 小时前
Docker Compose企业实战系列(三):Vue/React前端项目容器化完整部署
前端·vue.js·docker
小小、码农3 小时前
〖Linux进程间通信〗IPC全家桶:匿名管道、FIFO、共享内存、消息队列与信号量一篇打通
linux·运维·服务器
阳光九叶草LXGZXJ3 小时前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl