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

相关推荐
chexus17 小时前
Docker 镜像瘦身:使用 Maven 拆分 Jar 包
docker·maven·jar
泰和英杰18 小时前
2026 华为数字能源 + 机房工程实操标准:故障排查、机房建设、设备选型标准化技术方案
运维·服务器·网络
mounter62518 小时前
探索未来 AI 算力网络的基石:从传统 RoCE 走向 SRv6 驱动的弹性弹性网络(解析 Netdev 0x1A 创新实践)
linux·网络·人工智能·linux kernel·kernel·rdma·rocev2
x_x-F18 小时前
深入浅出 Linux 网络核心:sk_buff 的内存与指针流转
linux·运维·网络
潘正翔1 天前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
Java小白笔记1 天前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
CHANG_THE_WORLD1 天前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
DLYSB_1 天前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
Bobolink_1 天前
手机端和电脑端的网络环境配置有什么不同?
网络·智能手机·电脑·网络环境
星恒讯工业路由器1 天前
三大工业以太网协议选型对比
网络·物联网·ethercat·profinet·ethernet/ip·工业以太网协议