多容器应用与编排——AI教你学Docker

发布于:2025-07-02 ⋅ 阅读:(31) ⋅ 点赞:(0)

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 资源清单。

七、参考资料