Docker Swarm 的 YAML 文件(通常为 docker-compose.yml 或 stack.yml)的详细解析
以下是 Docker Swarm 的 YAML 文件(通常为 docker-compose.yml 或 stack.yml)的详细解析,包含所有核心配置项及其作用:
一、基础结构示例
version: '3.8' # 必须 ≥3.0 才支持 Swarm 模式
services:
web:
image: nginx:alpine
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 512M
networks:
- frontend
ports:
- "8080:80"
networks:
frontend:
driver: overlay
二、核心配置项详解
1. deploy 部署配置(Swarm 特有)
deploy:
replicas: 3 # 副本数(Replicated 模式)
mode: replicated # 或 global(每个节点运行1个副本)
update_config: # 滚动更新策略
parallelism: 2 # 每次更新副本数
delay: 10s # 批次间隔
failure_action: rollback # 失败时回滚
order: start-first # 新容器启动后再停止旧容器
rollback_config: # 回滚策略(同update_config)
restart_policy: # 重启策略
condition: on-failure # any|on-failure|none
delay: 5s
max_attempts: 3
window: 120s
placement: # 调度约束
constraints:
- "node.role==worker" # 只在Worker节点运行
- "engine.labels.storage==ssd"
preferences:
- spread: node.labels.zone # 按zone标签均匀分布
resources: # 资源限制
limits:
cpus: '0.5'
memory: 512M
reservations: # 资源预留
memory: 256M
2. services 服务配置
services:
app:
image: username/app:1.0 # 镜像地址
command: ["python", "app.py"] # 覆盖默认命令
environment: # 环境变量
- DB_HOST=db
- REDIS_CACHE=true
env_file: # 从文件加载环境变量
- .env.prod
configs: # 配置文件
- source: nginx_conf
target: /etc/nginx/nginx.conf
secrets: # 敏感数据
- source: db_password
target: /run/secrets/dbpass
volumes: # 数据卷
- "data:/var/lib/mysql"
healthcheck: # 健康检查
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
depends_on: # 服务依赖(仅控制启动顺序)
- db
- redis
3. networks 网络配置
networks:
frontend:
driver: overlay # Swarm必须用overlay跨主机通信
attachable: true # 允许独立容器连接
driver_opts: # 驱动参数
encrypted: "yes" # 加密网络流量
ipam: # IP地址管理
config:
- subnet: 10.1.0.0/24
gateway: 10.1.0.1
4. volumes 数据卷配置
volumes:
dbdata:
driver: local
driver_opts:
type: nfs # 使用NFS共享存储
o: addr=192.168.1.100,rw
device: ":/path/to/nfs"
5. configs 配置文件
configs:
nginx_conf:
file: ./nginx.conf # 本地文件路径
name: nginx_prod_conf # Swarm中显示的配置名
6. secrets 密钥管理
secrets:
db_password:
file: ./db_pass.txt # 本地密钥文件
三、完整生产级示例
version: '3.8'
services:
web:
image: nginx:1.25
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
resources:
limits:
cpus: '1.0'
memory: 1G
configs:
- source: nginx_conf
target: /etc/nginx/conf.d/default.conf
networks:
- frontend
ports:
- "80:80"
- "443:443"
db:
image: postgres:14
deploy:
placement:
constraints:
- "node.labels.db==true"
secrets:
- db_password
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
networks:
frontend:
driver: overlay
attachable: true
volumes:
pgdata:
driver: local
configs:
nginx_conf:
file: ./nginx/nginx.conf
secrets:
db_password:
file: ./secrets/db_pass.txt
四、关键注意事项
-
版本兼容性:
-
Swarm 模式需要
version: '3.0'及以上 -
部分新功能(如
rollback_config)需 ≥3.7
-
-
部署命令:
# 部署Stack docker stack deploy -c docker-compose.yml myapp # 查看服务 docker stack services myapp -
与普通 Compose 的区别:
特性 Swarm YAML 普通 Compose YAML deploy配置✅ 支持 ❌ 忽略 build指令❌ 不支持(需提前构建镜像) ✅ 支持 network驱动必须 overlay跨主机通常用 bridge -
最佳实践:
-
使用
configs管理配置文件,而非直接挂载 -
敏感数据必须用
secrets而非environment -
为生产环境设置资源
limits和restart_policy
-
通过合理配置这些 YAML 选项,您可以高效管理 Swarm 集群中的服务编排、资源调度和网络拓扑。实际应用中建议结合 docker stack deploy 命令进行部署。
郭慕荣博客园

浙公网安备 33010602011771号