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)
  • ✅ 更接近生产环境
  • ✅ 团队协作友好

相关推荐
夏日听雨眠2 小时前
LInux(逻辑地址与物理地址的区别,文件描述符,lseek函数)
linux·运维·网络
ydyd202604213 小时前
制造业数字化干货:设备巡检、报修、保养一体化管理流程拆解
网络
Hali_Botebie4 小时前
【图卷积网络】GCN是AXΘ 和CNN是AX
网络·人工智能·cnn
IpdataCloud4 小时前
高并发场景下IP数据接口怎么选?从QPS到离线库的完整选型指南
网络·网络协议·tcp/ip
CableTech_SQH4 小时前
企业园区网络突然中断排查时间影响生产?综合布线运维管理解决方案分析
网络
難釋懷4 小时前
Redis网络模型-IO多路复用模型-poll模式
网络·数据库·redis
treesforest5 小时前
IP精准定位服务:从城市轮廓到街道坐标,技术如何重塑空间感知
网络·数据库·网络协议·tcp/ip·ip
平行侠5 小时前
A15 工业路由器IP前缀高速检索与内存压缩系统
网络·tcp/ip·算法
yyyyy_abc6 小时前
子网掩码是什么
网络·智能路由器
9命怪猫6 小时前
[K8S小白问题集] - Calico好在哪里?
网络·云原生·容器·kubernetes