docker compose yml文件 常用的配置
以下是一个功能齐全的 docker-compose.yml 文件示例,包含最常用的配置项,并逐行解释其含义:
# 指定 Compose 文件格式版本(与 Docker Engine 版本相关)
version: '3.8'
# 定义所有服务(容器)
services:
# 服务1:Web 应用
webapp:
# 从 Dockerfile 构建镜像(上下文路径为当前目录)
build:
context: .
dockerfile: Dockerfile
args:
APP_ENV: production # 构建时传递的参数
# 使用现有镜像(与 build 二选一)
# image: nginx:alpine
# 容器名称(默认生成随机名称)
container_name: my-webapp
# 设置环境变量
environment:
- NODE_ENV=production
- DB_HOST=db
# 从文件加载环境变量
env_file:
- .env
# 端口映射(主机端口:容器端口)
ports:
- "8080:80"
- "443:443"
# 数据卷挂载
volumes:
- ./app:/app # 绑定挂载(宿主机路径:容器路径)
- static_data:/var/www # 命名卷(需在外部 volumes 定义)
# 依赖其他服务(先启动 db 再启动 webapp)
depends_on:
- db
# 容器启动后执行的命令(覆盖 Dockerfile 中的 CMD)
command: ["python", "app.py"]
# 重启策略
restart: unless-stopped
# 网络配置
networks:
- frontend
- backend
# 资源限制
deploy:
resources:
limits:
cpus: "0.5"
memory: 512M
# 服务2:数据库
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes:
- pgdata:/var/lib/postgresql/data # 持久化数据库数据
networks:
- backend
# 定义所有数据卷(需提前创建或自动创建)
volumes:
static_data: # 命名卷(Docker 自动管理路径)
pgdata:
driver: local # 使用本地驱动
# 定义所有网络(默认会创建 bridge 网络)
networks:
frontend: # 前端网络(用于用户访问)
driver: bridge
backend: # 后端网络(内部服务通信)
driver: bridge
关键配置详解
1. version
-
作用:指定 Compose 文件格式版本,不同版本支持的功能不同。
-
示例:
version: '3.8'(推荐使用 3.x 版本以兼容较新 Docker 功能)。
2. services
-
作用:定义所有需要运行的容器(服务)。
-
每个服务的关键子项:
-
build:从 Dockerfile 构建镜像。-
context:构建上下文路径(通常为.表示当前目录)。 -
dockerfile:指定 Dockerfile 文件名(默认Dockerfile)。 -
args:构建时传递的变量(对应 Dockerfile 中的ARG)。
-
-
image:直接使用现有镜像(与build二选一)。 -
environment:设置环境变量(优先级高于 Dockerfile 的ENV)。 -
env_file:从文件加载环境变量(每行格式KEY=VALUE)。 -
ports:端口映射(格式"主机端口:容器端口")。 -
volumes:挂载数据卷。-
绑定挂载:
./host/path:/container/path(宿主机路径需存在)。 -
命名卷:
volume_name:/container/path(需在外部volumes定义)。
-
-
depends_on:控制服务启动顺序(不保证依赖服务完全就绪,仅顺序启动)。 -
networks:指定连接的网络(需在外部networks定义)。 -
restart:容器退出时的重启策略:-
no(默认):不重启。 -
always:总是重启。 -
on-failure:非 0 退出时重启。 -
unless-stopped:除非手动停止,否则重启。
-
-
3. volumes
-
作用:声明命名卷供服务使用(数据持久化)。
-
示例:
volumes: my_volume: # 自动创建 custom_volume: driver: local # 使用本地驱动 driver_opts: type: nfs # 高级选项(如 NFS)
4. networks
-
作用:定义自定义网络(隔离容器通信)。
-
示例:
networks: frontend: driver: bridge # 默认驱动 attachable: true # 允许其他容器动态加入
5. deploy(仅 Swarm 模式)
-
作用:指定部署配置(适用于 Docker Swarm)。
-
示例:
deploy: replicas: 3 # 启动 3 个副本 resources: limits: cpus: "0.5" memory: 512M
常用配置速查表
| 配置项 | 用途 | 示例 |
|---|---|---|
build |
从 Dockerfile 构建镜像 | build: ./dir |
ports |
暴露容器端口 | "80:8080" |
volumes |
挂载数据卷 | ./data:/app/data |
environment |
设置环境变量 | DEBUG=true |
depends_on |
定义服务依赖顺序 | depends_on: [db] |
networks |
连接自定义网络 | networks: [backend] |
restart |
容器重启策略 | restart: always |
command |
覆盖默认启动命令 | command: ["npm", "start"] |
最佳实践
-
多环境配置:使用
docker-compose.override.yml覆盖开发环境配置。 -
敏感数据:将密码等放入
.env文件(需在.gitignore中排除)。 -
资源限制:生产环境务必设置
deploy.resources.limits防止单个容器耗尽资源。 -
网络隔离:为不同服务组分配独立网络(如
frontend/backend)。
通过合理组合这些配置,可以高效管理复杂的多容器应用! 🐳

浙公网安备 33010602011771号