Docker Compose 标准空白模板
所属分类 docker
浏览量 5
本模板完全适配 Docker Compose V2 最新标准,
废弃无用字段、规避所有前文提到的语法/格式/逻辑坑,
统一2空格缩进、规范数组格式、标注必填/可选项,
直接填空即可正常启动,无任何隐性报错。
一、极简基础版(小型项目/本地开发首选)
无多余配置,覆盖核心功能,100%规避语法坑,适合前端、单服务、简易后端项目
# Docker Compose V2 标准配置(无需version字段,无兼容问题)
# 文件名固定:compose.yml (首选) 或 docker-compose.yml
services:
# 自定义服务名(容器间通信直接用这个名字当域名,禁止中文、特殊字符)
app:
# 镜像地址(必填!必须指定版本,禁止只用latest)
image: 镜像名:版本号
# 容器名称(可选!填了就无法scale扩容,本地开发可填,生产不建议填)
# container_name: custom-container-name
# -------------------------- 核心数组配置(规范格式,绝对不报错) --------------------------
# 端口映射:格式 "宿主机端口:容器端口" 必须加双引号,禁止写反
ports:
- "8080:80"
- "443:443"
# 环境变量(推荐键值对格式,清晰不踩坑,禁止和横线数组混用)
environment:
TZ: Asia/Shanghai
# 自定义环境变量
APP_ENV: development
# 变量引用格式:${变量名} 从同级.env文件读取,禁止简写$变量名
APP_SECRET: ${APP_SECRET}
# 数据卷挂载:格式 "宿主机路径:容器路径:权限(可选ro/rw)" 相对路径必须加./
volumes:
# 宿主机当前目录映射到容器工作目录
- ./:/app
# 命名卷(持久化数据,删除容器不丢失)
- app-data:/data
# 重启策略(本地开发用no,生产推荐unless-stopped)
restart: unless-stopped
# 网络配置(自动加入默认网络,容器间互通无需额外配置)
networks:
- app-default
# 命名卷声明(上面volumes用到的命名卷,必须在这里声明,否则创建匿名卷)
volumes:
app-data:
# 网络声明(自定义默认网络,自动DNS解析,服务名直接互通)
networks:
app-default:
driver: bridge
二、生产完整版(全场景合规·规避所有生产级坑点)
包含健康检查、资源限制、日志限制、权限管控、依赖配置、多服务规范,
直接适配线上环境,无任何安全/稳定性隐患
# Docker Compose V2 生产标准模板
# 文件名:compose.yml
# 写完必执行校验:docker compose config
services:
# 业务应用服务示例
backend:
image: 业务镜像名:稳定版本号
restart: unless-stopped
depends_on:
mysql:
# 严格等待依赖服务健康检查通过再启动(彻底解决启动顺序坑)
condition: service_healthy
redis:
condition: service_healthy
# 端口映射(仅对外暴露的端口填写,内部通信不用写ports)
ports:
- "8080:8080"
# 环境变量
environment:
TZ: Asia/Shanghai
SPRING_PROFILES_ACTIVE: prod
DB_HOST: mysql
DB_PORT: 3306
REDIS_HOST: redis
# 敏感配置从.env文件读取,不硬编码
DB_PASSWORD: ${DB_PASSWORD}
REDIS_PASSWORD: ${REDIS_PASSWORD}
# 挂载配置
volumes:
- ./config:/app/config
- ./logs:/app/logs
- backend-data:/app/data
# 容器资源限制(防止服务拖垮宿主机,生产必填)
deploy:
resources:
limits:
cpus: "1"
memory: 1G
reservations:
cpus: "0.2"
memory: 256M
# 健康检查(判断服务真正就绪,不是仅容器启动)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 15s
timeout: 5s
retries: 3
# 启动缓冲期,慢启动服务不会被误判不健康
start_period: 60s
# 安全权限配置(非必要不开privileged,最小权限原则)
read_only: false
user: "1000:1000"
cap_drop:
- ALL
# 日志限制(防止日志占满磁盘,生产必填)
logging:
driver: json-file
options:
max-size: 100m
max-file: 5
compress: "true"
networks:
- app-prod-net
# MySQL数据库服务示例
mysql:
image: mysql:8.0
restart: unless-stopped
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: app_db
MYSQL_CHARSET: utf8mb4
volumes:
- mysql-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-uroot", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
networks:
- app-prod-net
# Redis缓存服务示例
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 5s
retries: 3
networks:
- app-prod-net
# 持久化命名卷声明
volumes:
backend-data:
mysql-data:
redis-data:
# 生产自定义网络(隔离环境,自动DNS解析)
networks:
app-prod-net:
driver: bridge
# 禁止外部访问,仅容器内部互通,提升安全
internal: false
三、配套标准 .env 空白模板
# 环境变量配置文件,compose自动读取同级.env文件
# 带特殊字符、空格、冒号的值必须加引号
# 禁止在compose.yml内硬编码敏感信息
# 应用配置
APP_SECRET=自定义密钥
APP_ENV=prod
# 数据库配置
DB_PASSWORD=数据库密码
MYSQL_ROOT_PASSWORD=root管理员密码
# Redis配置
REDIS_PASSWORD=Redis密码
四、模板内置强制避坑规则
1. 全程2空格缩进,禁用Tab,所有冒号、短横线后强制加空格,彻底解决YAML语法报错
2. 所有数组统一规范格式,禁止键值对和横线数组混用,100%规避格式坑
3. 端口、健康检查、命令全部用数组格式,杜绝Shell解析异常、YAML语法歧义
4. 强制配置时区、健康检查、重启策略、日志限制、资源限制,覆盖所有生产级隐性坑
5. 依赖配置严格等待服务就绪,彻底解决「容器启动了但服务没就绪,应用连库失败」的经典坑
6. 命名卷、网络统一规范声明,杜绝匿名卷残留、容器网络不通问题
7. 敏感信息全部剥离到.env文件,符合安全规范,无硬编码风险
上一篇
下一篇
spring cloud nacos 配置说明
浙江杭州移动新用户套餐
docker compose config 用法
未来十大热门赛道