2.2 多容器应用与编排
现代应用通常由多个服务(如 Web、数据库、缓存等)组成,每个服务运行在独立的容器里。如何高效管理、协调、扩展、升级这些多容器应用,成为容器化实践的核心。容器编排工具(如 Docker Compose、Swarm、Kubernetes)正是为此而生。
一、Compose:本地/开发环境多容器编排
1. 概述
- Docker Compose 是用于定义和运行多容器 Docker 应用的工具。
- 通过
docker-compose.yml
文件,描述服务、网络、卷、依赖等,实现“一键部署”。 - 适合开发、测试、单机环境下的多容器协作。
2. 基本用法
示例:Web + Redis Compose 文件
version: '3'
services:
web:
image: myweb:v1
ports:
- "8080:80"
depends_on:
- redis
redis:
image: redis:latest
volumes:
- redisdata:/data
volumes:
redisdata:
- 启动所有服务:
docker compose up -d
- 停止/移除:
docker compose down
- 查看日志:
docker compose logs -f
- 适合:本地开发、多服务集成测试、CI 环境
二、Swarm:原生 Docker 集群编排
1. 概述
- Docker Swarm 是 Docker 官方内置的集群和服务编排方案。
- 支持多主机容器调度、服务发现、负载均衡、自动恢复。
- 轻量级、易上手,兼容 Compose 格式。
2. 基本功能
- 节点管理:Swarm 集群由“管理节点”和“工作节点”组成。
- 服务部署:
docker service create ...
部署分布式服务 - 负载均衡:服务自动分配到多个节点,流量均衡分发
- 滚动升级、自动恢复
3. 常用命令
docker swarm init # 初始化管理节点
docker swarm join ... # 工作节点加入集群
docker service create ... # 创建服务
docker service scale web=3 # 扩展副本数
docker node ls # 查看集群节点
- 适合:中小型集群、对 Docker 生态集成要求高的场景
三、Kubernetes(K8s):云原生标准编排
1. 概述
- Kubernetes(K8s) 是当前最流行的开源容器编排平台,发源于 Google。
- 提供自动部署、扩展、服务发现、负载均衡、滚动升级、自愈、配置/密钥管理等强大功能。
- 支持大规模生产集群、混合云、弹性伸缩、服务治理等高级需求。
2. 基本概念
- Pod:最小调度单元,通常封装一个或多个紧密协作的容器
- Deployment:部署和管理无状态应用,支持副本、升级、回滚
- Service:服务发现与负载均衡
- ConfigMap/Secret:配置和敏感信息管理
- Namespace:资源隔离
3. 示例 Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 3
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: web
image: myweb:v1
ports:
- containerPort: 80
- 应用部署:
kubectl apply -f deployment.yaml
- 查看服务:
kubectl get pods,svc
- 适合:生产级集群、云原生、DevOps、微服务架构
四、三者对比与选型建议
特性 | Compose | Swarm | Kubernetes |
---|---|---|---|
适用场景 | 单机开发、测试 | 小型生产、Docker原生集群 | 大型生产、云原生 |
集群管理 | 不支持 | 内置(Swarm模式) | 完善(多组件协作) |
服务发现 | 内部DNS、外部端口映射 | 内置 | 强大且可扩展 |
扩容/自愈 | 手动 | 自动 | 自动、策略丰富 |
配置与密钥管理 | 基本支持 | 基本支持 | 高级(ConfigMap/Secret) |
社区生态 | 官方,活跃 | 官方,逐渐淡出 | 最活跃,云原生标准 |
复杂度 | 低 | 中 | 高 |
五、最佳实践
- 开发/测试:推荐 Compose 简化环境搭建,快速集成多服务。
- 生产/小集群:可用 Swarm,部署简单,易于运维。
- 大规模、云原生、复杂微服务:优选 Kubernetes,配合 Helm、Operator、CI/CD 实现自动化管理。
- 持续交付:结合流水线自动生成并部署 Compose/K8s YAML,提高效率与一致性。
六、补充工具
- Helm:Kubernetes 的包管理器,便于复用、发布和管理复杂应用模板。
- Kustomize:声明式管理 K8s 配置差异。
- Kompose:支持将 Compose 文件自动转换为 K8s 资源清单。