Docker Compose 本地环境搭建:独立 Compose + 共享网络 + .env 统一管理(架构设计篇)

Docker Compose 本地环境搭建:独立 Compose + 共享网络 + .env 统一管理(架构设计篇)

  • [🔗 前言:Docker Compose 本地环境搭建相关文章](#🔗 前言:Docker Compose 本地环境搭建相关文章)
  • [🐳 Docker Compose 本地环境搭建:独立 Compose + 共享网络 + .env 统一管理(架构设计篇)](#🐳 Docker Compose 本地环境搭建:独立 Compose + 共享网络 + .env 统一管理(架构设计篇))

🔗 前言:Docker Compose 本地环境搭建相关文章


🐳 Docker Compose 本地环境搭建:独立 Compose + 共享网络 + .env 统一管理(架构设计篇)

一、背景说明

在日常开发或测试环境中,我们通常会依赖多个基础服务,例如:

  • MySQL
  • Redis
  • Elasticsearch
  • Nacos
  • SkyWalking

如果把所有服务全部写在一个 docker-compose.yml 中,会带来几个问题:

  • ❌ 文件臃肿,不易维护
  • ❌ 服务之间强耦合
  • ❌ 无法按需启动/停止
  • ❌ 团队协作困难

因此,本篇文章介绍一种更清晰、可扩展的方式:

独立 Compose + 共享网络 + 统一 env 管理


二、整体设计思路

核心思想分为三点:

1️⃣ 服务拆分(按模块独立)

每一个基础服务使用独立的 docker-compose.yml:

  • MySQL 单独一个 compose
  • Redis 单独一个 compose
  • Elasticsearch 单独一个 compose

👉 好处:

  • 可以单独启动某个服务
  • 方便定位问题
  • 配置清晰

2️⃣ 统一环境变量(.env)

所有服务共享一个 .env 文件:

👉 好处:

  • 避免重复配置
  • 修改一次,全局生效
  • 方便统一端口、账号、路径等

3️⃣ 共享网络(关键设计)

所有服务加入同一个 Docker 网络,例如:

bash 复制代码
dev-network

👉 好处:

  • 服务之间可以通过 容器名互相访问
  • 避免使用 IP
  • 更贴近生产环境

三、目录结构设计

推荐使用如下结构:

bash 复制代码
infra/
├── .env

├── mysql/
│   └── docker-compose.yml

├── redis/
│   └── docker-compose.yml

├── elasticsearch/
│   └── docker-compose.yml

├── skywalking/
│   └── docker-compose.yml

├── nacos/
│   └── docker-compose.yml

四、.env 文件设计(核心)

.env 是整个架构的核心配置入口。

示例:

env 复制代码
# =========================
# 通用配置
# =========================
COMPOSE_PROJECT_NAME=infra
DOCKER_NETWORK=dev-network

# =========================
# MySQL
# =========================
MYSQL_ROOT_PASSWORD=123456
MYSQL_PORT=3306
MYSQL_DATA_DIR=./data/mysql

# =========================
# Redis
# =========================
REDIS_PORT=6379
REDIS_PASSWORD=123456

# =========================
# Elasticsearch
# =========================
ES_PORT=9200
ES_JAVA_OPTS=-Xms512m -Xmx512m

# =========================
# Nacos
# =========================
NACOS_PORT=8848

# =========================
# SkyWalking
# =========================
SW_OAP_PORT=11800
SW_UI_PORT=8080

五、共享网络创建

在使用之前,需要手动创建网络(只需一次):

bash 复制代码
docker network create dev-network

⚠️ 注意:所有 compose 都必须引用这个网络


六、Compose 文件的统一规范(约定)

虽然每个服务的 docker-compose.yml 不同,但建议统一规范:

1️⃣ 引入 env 文件

yaml 复制代码
env_file:
  - ../.env

2️⃣ 使用统一网络

yaml 复制代码
networks:
  default:
    external: true
    name: ${DOCKER_NETWORK}

3️⃣ 服务命名规范

yaml 复制代码
services:
  mysql:
  redis:
  elasticsearch:

👉 建议直接使用服务名作为容器 DNS 名


4️⃣ 端口、路径统一从 env 获取

yaml 复制代码
ports:
  - "${MYSQL_PORT}:3306"

七、启动方式(推荐)

每个服务独立启动:

bash 复制代码
cd mysql
docker compose --env-file ../.env up -d

cd ../redis
docker compose --env-file ../.env up -d

👉 优点:

  • 按需启动
  • 控制粒度更细

八、服务访问方式

在同一网络下:

服务 访问方式
MySQL mysql:3306
Redis redis:6379
ES elasticsearch:9200

👉 重点:使用服务名访问,而不是 IP


九、这种架构的优势总结

  • ✅ 模块解耦
  • ✅ 易于扩展(新增服务只需加目录)
  • ✅ 配置统一(.env)
  • ✅ 更接近生产环境
  • ✅ 团队协作友好

相关推荐
为思念酝酿的痛14 分钟前
数据链路层--帧传输与链路控制
网络·网络协议·计算机网络·数据链路层
头发还在的女程序员15 分钟前
【无标题】
网络·数据库·短剧小程序·短剧系统·海外短剧·短剧后台
程序员老赵31 分钟前
Docker 部署 WordPress:轻松搭建开源内容管理平台
docker·开源·wordpress
Gauss松鼠会38 分钟前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
luiyarch43 分钟前
汽车电子ISO 21448 SOTIF系列(第26期):未知危险场景的确认方法(下)——AI驱动的场景发现
网络·人工智能·安全·车载系统·汽车
砚凝霜1 小时前
【软考信息安全】第十六章 网络安全风险评估项目流程与应用
网络·安全·web安全
Mr_韩1 小时前
子网路由实战:无需公网 IP,异地直接访问家庭内网全部设备
运维·网络·物联网·nas
Bruce_Liuxiaowei1 小时前
内网“影子资产“:串口服务器安全盲区剖析
服务器·网络·安全·iot
云计算练习生2 小时前
什么是操作系统安全?身份认证、访问控制与审计机
服务器·网络·安全·访问控制·操作系统安全
乐橙开放平台2 小时前
通道国标 ID 贴反会串店:海康大华宇视摄像头怎么用 GB28181 统一接入?
网络·笔记·物联网·自动化·音视频·智能家居