基础概念
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 YAML 文件配置应用程序的服务,然后使用单个命令创建并启动所有服务。
核心标签解析
1. version 标签(可省略)
作用:指定 Compose 文件格式版本
规则:
必须放在文件开头
不同版本支持不同功能
常用版本有 "2.4", "3.8" 等
示例:
version: "3.8"
2. services 标签
作用:定义要运行的所有服务容器
规则:
每个服务对应一个容器
服务名称不能包含下划线(_)
可以定义多个服务
示例:
services:
webapp:
image: nginx:latest
database:
image: postgres:13
3. image 标签
作用:指定服务使用的镜像
规则:
可以使用 Docker Hub 官方镜像
可以指定版本标签(如 :latest, :alpine)
如果本地不存在会自动拉取
示例:
services:
redis:
image: redis:6.2-alpine
4. build 标签
作用:通过 Dockerfile 构建镜像
规则:
需要指定 context (构建上下文路径)
可以指定 Dockerfile 文件名
可以使用 args 传递构建参数
示例:
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
args:
NODE_ENV: development
5. ports 标签
作用:映射容器端口到主机端口
规则:
格式:主机端口:容器端口
可以只指定容器端口(随机分配主机端口)
支持指定协议(tcp/udp)
示例:
services:
web:
ports:
- "80:80" # 主机80映射到容器80
- "443:443/tcp" # 指定TCP协议
- "8080" # 随机主机端口
6. volumes 标签
作用:配置数据卷挂载
规则:
支持三种格式:
主机路径:容器路径
命名卷:容器路径
仅容器路径(匿名卷)
可以设置读写权限(ro/rw)
示例:
services:
db:
volumes:
- /data/mysql:/var/lib/mysql # 主机路径
- db_data:/var/lib/postgresql # 命名卷
- /config # 匿名卷
volumes:
db_data:
7. environment 标签
作用:设置环境变量
规则:
可以使用键值对形式
可以使用环境变量文件(.env)
变量会传递给容器内部
示例:
services:
app:
environment:
- NODE_ENV=production
- DB_HOST=db
env_file:
- .env
8. depends_on 标签
作用:定义服务启动依赖关系
规则:
确保依赖服务先启动
不等待依赖服务"就绪"
可以定义多个依赖服务
示例:
services:
web:
depends_on:
- db
- redis
9. networks 标签
作用:配置容器网络
规则:
可以加入自定义网络
可以设置IP地址
支持网络别名
示例:
services:
app:
networks:
- frontend
- backend
networks:
frontend:
backend:
完整示例
version: "3.8"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- app
app:
build: .
environment:
- NODE_ENV=production
networks:
- app-network
db:
image: postgres:13
volumes:
- db_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=secret
volumes:
db_data:
networks:
app-network:
driver: bridge
使用建议
从简单配置开始,逐步添加功能
使用有意义的服务名称
合理规划网络和数据卷
充分利用环境变量配置
注意版本兼容性
通过掌握这些核心标签,您已经能够配置大多数常见的多容器应用场景了。