登录网站,浏览更多精彩内容
您需要 登录 才可以下载或查看,没有账号?加入我们
×
下面是一个 标准的 docker-compose.yml 文件结构,并附上详细的中文注释说明:
# docker-compose.yml
# 指定 Compose 文件版本(推荐使用 3.x 系列,如 '3.8')
# 不同版本支持的功能不同,3.x 适用于 Swarm 和大多数现代功能
version: '3.8'
# 定义服务(每个服务对应一个容器)
services:
# 服务名称(自定义,如 web、db、redis 等)
web:
# 使用的镜像(可来自 Docker Hub 或私有仓库)
image: nginx:latest
# 或者通过构建上下文构建镜像(二选一)
# build:
# context: ./app # 构建上下文目录(Dockerfile 所在路径)
# dockerfile: Dockerfile # 可选,指定 Dockerfile 文件名(默认就是 Dockerfile)
# 容器名称(可选,默认是项目名_服务名_序号)
container_name: my-nginx
# 端口映射:宿主机端口:容器端口
ports:
- "8080:80" # 将宿主机 8080 映射到容器 80
# 挂载卷(数据持久化或代码热更新)
volumes:
- ./html:/usr/share/nginx/html # 绑定挂载:本地目录 → 容器目录
- my_volume:/data # 使用命名卷(需在 volumes 中声明)
# 环境变量(可直接写或从文件加载)
environment:
- NGINX_PORT=80
- DEBUG=true
# 或从 .env 文件加载(自动读取同目录下的 .env)
# env_file:
# - .env
# 依赖关系:确保 db 服务先启动
depends_on:
- db
# 重启策略
restart: unless-stopped # always / on-failure / no(默认)
# 网络配置(加入指定网络)
networks:
- mynet
# 健康检查(可选)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
db:
image: mysql:8.0
container_name: my-mysql
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: myapp_db
volumes:
- db_data:/var/lib/mysql # 使用命名卷存储数据库数据
networks:
- mynet
restart: unless-stopped
# 定义命名卷(用于持久化数据)
volumes:
my_volume: # 卷名,可被 services 中引用
db_data:
# 定义自定义网络(默认会创建 bridge 网络)
networks:
mynet:
driver: bridge # 默认驱动,也可用 overlay(用于 Swarm)
✅ 关键规则说明
| 元素 | 说明 | 缩进 | YAML 对缩进敏感,必须用空格(不能用 Tab) | 版本 | version 字段决定可用功能(建议用 3.8 或 3.9) | 服务名 | services 下的每个子项是一个服务,对应一个容器 | image vs build | 二者通常只用其一:image 直接拉镜像,build 从源码构建 | 端口格式 | "宿主机:容器",字符串形式(避免 YAML 解析为数字) | 环境变量 | environment 写键值对,敏感信息建议用 .env 文件 | depends_on | 仅控制启动顺序,不等待服务就绪(如 MySQL 启动完成) | volumes | 分为绑定挂载(本地路径)和命名卷(由 Docker 管理) | networks | 多个服务加入同一网络才能通过服务名互相通信 | 常用技巧补充
- version: '3.8'
- services:
- hello:
- image: alpine
- command: echo "Hello Docker Compose!"
复制代码 运行:
|
|