Docker Compose 本地环境搭建:.env 统一配置模板
- [🔗 前言:Docker Compose 本地环境搭建相关文章](#🔗 前言:Docker Compose 本地环境搭建相关文章)
- [🐳 Docker Compose 本地环境搭建:.env 统一配置模板](#🐳 Docker Compose 本地环境搭建:.env 统一配置模板)
-
- [📚 目录结构设计](#📚 目录结构设计)
- [📄 .env](#📄 .env)
- [🚀 验证 `env` 是否生效](#🚀 验证
env是否生效) - [📌 约定](#📌 约定)
🔗 前言:Docker Compose 本地环境搭建相关文章
🐳 Docker Compose 本地环境搭建:.env 统一配置模板
📚 目录结构设计
推荐使用如下结构:
bash
infra/
├── .env
├── mysql/
│ └── docker-compose.yml
├── redis/
│ └── docker-compose.yml
├── elasticsearch/
│ └── docker-compose.yml
├── skywalking/
│ └── docker-compose.yml
├── nacos/
│ └── docker-compose.yml
📄 .env
替换为自己的相关参数,比如挂载目录 HOST_VOLUME。
bash
# =========================================================
# 环境名称
#
# 用途:
# - 作为环境维度标识(dev / test / prod)
# - 用于容器名、网络名、volume 路径等变量拼接
#
# 示例:
# dev -> 本地开发环境
# test -> 测试环境
# prod -> 生产环境
#
ENV=dev
# =========================================================
# Docker Compose 项目名称(Project Name)
#
# 这是 Docker Compose 资源命名与生命周期管理的"根标识"
#
# 作用范围(非常重要):
# - 容器(containers)
# - 网络(networks)
# - 数据卷(volumes)
#
# 资源实际命名规则:
# <COMPOSE_PROJECT_NAME>_<资源名>
#
# 示例(当前配置):
# COMPOSE_PROJECT_NAME=dev
#
# 实际生成资源示例(如挂载目录):
# - dev_es_data
# - dev_es_logs
#
# 推荐用法(多环境):
# COMPOSE_PROJECT_NAME=infra-${ENV}
# 例如:
# ENV=dev -> infra-dev
# ENV=test -> infra-test
# ENV=prod -> infra-prod
#
# 注意事项(⚠ 必读):
# - 修改该值后,Docker Compose 会认为是"一个全新的项目"
# - 旧的容器 / 网络 / volume 不会自动复用
# - 一旦进入稳定使用阶段,不建议频繁修改
#
# 官方文档:
# https://docs.docker.com/compose/reference/envvars/#compose_project_name
#
COMPOSE_PROJECT_NAME=dev
# =========================================================
# Docker 网络配置
#
# NETWORK_NAME:
# - Compose 创建的 Docker 自定义网络名称
# - 使用 ENV 后缀,保证多环境网络隔离
#
# NETWORK_SUBNET:
# - 自定义 bridge 网络的子网
# - 用于固定容器 IP 范围,避免与宿主或其他网络冲突
#
# 多环境推荐:
# dev -> 10.10.0.0/24
# test -> 10.20.0.0/24
# prod -> 10.30.0.0/24
NETWORK_NAME=network-${ENV}
NETWORK_SUBNET=10.10.0.0/24
# =========================================================
# 宿主机数据卷根目录(Bind Mount Root)
#
# 所有容器的宿主机挂载目录统一从此路径派生
#
# 示例:
# MySQL 数据目录:
# ${HOST_VOLUME}/${ENV}/MySQL8/data
#
# 强烈建议:
# - Windows 下优先使用已共享的磁盘
# - 这里要用反斜杠,'/',否则会挂载提示目录找不到
#
HOST_VOLUME=A:/Files/DockerDesktop/DockerVolume
# =========================================================
# MySQL 配置
#
# MYSQL_VERSION:
# - MySQL Docker 镜像版本
# - 默认端口(容器内):3306
#
# MYSQL_ROOT_PASSWORD:
# - root 用户初始化密码
#
# MYSQL_PORT:
# - 映射到宿主机的端口(用于外部访问)
# - ⚠ 默认 MySQL 端口:3306
# - ⚠ 当前建议:不同环境避免冲突(如 23306/33306/43306)
#
MYSQL_VERSION=8.4.7
MYSQL_ROOT_PASSWORD=Pass@8520
MYSQL_PORT=23306
# =========================================================
# Elasticsearch 配置
#
# ES_VERSION:
# - Elasticsearch Docker 镜像版本
#
# ES_PASSWORD:
# - 内置 elastic 用户密码
# - SkyWalking OAP / 外部访问 ES 使用
#
# ES_PORT_HTTP:
# - Elasticsearch HTTP REST API 端口
# - ⚠ 默认端口:9200
# - ⚠ 当前已修改为:29200(避免冲突)
#
# ES_PORT_TRANSPORT:
# - 节点间通信端口(默认 9300)
# - 单节点模式一般不需要暴露
#
ES_VERSION=8.18.8
ES_PASSWORD=Pass@8520
ES_PORT_HTTP=29200
ES_PORT_TRANSPORT=29300
# =========================================================
# Redis 配置
#
# REDIS_VERSION:
# - Redis Docker 镜像版本
#
# REDIS_PASSWORD:
# - Redis 访问密码
#
# REDIS_PORT:
# - 映射到宿主机的端口
# - ⚠ 默认端口:6379
# - ⚠ 当前建议:26379 / 36379 / 46379(多环境隔离)
#
REDIS_VERSION=8.4.0
REDIS_PASSWORD=Pass@8520
REDIS_PORT=26379
# =========================================================
# SkyWalking 配置
#
# SW_VERSION:
# - SkyWalking OAP / UI Docker 镜像版本
#
# SW_ES_USER / SW_ES_PASSWORD:
# - SkyWalking OAP 连接 Elasticsearch 使用的账号
#
# SW_OAP_PORT_GRPC:
# - OAP gRPC 服务端口(Agent 上报使用)
# - ⚠ 默认端口:11800(内部必须固定,Agent 默认依赖)
# - ⚠ 当前建议:21800/31800/41800(多环境隔离)
#
# SW_OAP_PORT_REST:
# - OAP REST API 端口
# - ⚠ 默认端口:12800
# - ⚠ 当前建议:22800/32800/42800(多环境隔离)
#
# SW_UI_PORT:
# - SkyWalking UI Web 访问端口
# - ⚠ 默认端口:8080
# - ⚠ 当前建议:28080/38080/48080(避免冲突)
#
SW_VERSION=10.3.0
SW_ES_USER=elastic
SW_ES_PASSWORD=Pass@8520
SW_OAP_PORT_GRPC=21800
SW_OAP_PORT_REST=22800
SW_UI_PORT=28080
# =========================================================
# Nacos 配置
#
# NACOS_VERSION:
# - Nacos Docker 镜像版本
#
#
# NACOS_PORT_UI
# - Web UI 主入口(3.x 推荐)
# - 默认:8080
#
# NACOS_PORT:
# - OpenAPI / HTTP 接口(不再承载 UI)
# - 默认:8848
# - 推荐多环境:
# dev -> 28848
# test -> 38848
# prod -> 48848
#
# NACOS_PORT_GRPC:
# - gRPC 通信端口(客户端核心通信)
# - 默认:9848
#
# NACOS_PORT_RAFT:
# - 集群 Raft 通信端口(单机可不用)
# - 默认:9849
#
# NACOS_AUTH_ENABLE:
# - 是否开启鉴权(true/false)
#
# NACOS_AUTH_TOKEN:
# - JWT 签名密钥(Base64)
# - 解码后必须 ≥ 32 bytes
#
# NACOS_AUTH_TOKEN_EXPIRE_SECONDS:
# - Token 过期时间(秒)
#
# NACOS_AUTH_IDENTITY_KEY / VALUE:
# - 内部服务身份认证参数
# - 用于 Nacos 节点/服务间通信
#
# NACOS_DB_NAME:
# - Nacos 使用的数据库名称
#
# NACOS_DB_USER / NACOS_DB_PASSWORD:
# - MySQL 登录账号
#
# 官方文档:
# https://www.nacos.io/docs/latest/manual/admin/system-configurations/?spm=55c5c5db.2ef5001f.0.0.73a53b7cSZtfQh#2-%E9%95%9C%E5%83%8F%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F
# =========================================================
NACOS_VERSION=v3.2.0
NACOS_PORT_UI=28838
NACOS_PORT=28848
NACOS_PORT_GRPC=29848
NACOS_PORT_RAFT=29849
NACOS_AUTH_ENABLE=true
NACOS_AUTH_TOKEN=YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
NACOS_AUTH_TOKEN_EXPIRE_SECONDS=3600000
NACOS_AUTH_IDENTITY_KEY=serverIdentity
NACOS_AUTH_IDENTITY_VALUE=nacosSecurity
NACOS_DB_NAME=nacos
NACOS_DB_USER=nacos_user
NACOS_DB_PASSWORD=Pass@8520
🚀 验证 env 是否生效
bash
docker compose --env-file .env -f mysql/docker-compose.yml config
📌 约定
- 所有配置必须来自
.env - 禁止在 compose 中写死端口/密码/路径