如何将多服务应用程序部署为 Docker Swarm 堆栈

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将探索使用 Docker Swarm(一个强大的容器编排平台)部署多服务应用程序的过程。你将学习如何利用 Docker Compose 定义应用程序的服务,然后将它们无缝部署为 Docker Swarm 堆栈,确保可扩展性和高可用性。

理解 Docker Swarm

Docker Swarm 是一种用于 Docker 容器的原生集群和编排解决方案。它允许你管理一组 Docker 主机,并在这些主机上部署应用程序,从而提供高可用性和可扩展性。

什么是 Docker Swarm?

Docker Swarm 是 Docker 的一项内置功能,使你能够创建和管理一组 Docker 主机,称为 Swarm。在一个 Swarm 中,多个 Docker 主机(节点)作为一个单一的虚拟 Docker 主机协同工作。这使你能够在 Swarm 中部署应用程序和服务,并且 Docker 将为你处理负载均衡、扩展和故障转移。

Docker Swarm 中的关键概念

  • Swarm:一组已配置为协同工作的 Docker 主机。
  • 节点:作为 Swarm 一部分的单个 Docker 主机。
  • 服务:一种声明式方式,用于定义你的应用程序或服务应如何在 Swarm 中部署和扩展。
  • 任务:作为服务一部分运行的容器的单个实例。
  • 覆盖网络:一种虚拟网络,连接 Swarm 中的所有节点,允许容器相互通信。

Docker Swarm 的优点

  • 高可用性:Docker Swarm 自动管理你的服务的健康状况和可用性,重新启动失败的任务并在 Swarm 中重新分配它们。
  • 可扩展性:你可以通过调整副本数量轻松扩展或缩小你的服务。
  • 负载均衡:Docker Swarm 提供内置的负载均衡,将传入请求分布到你的服务的任务中。
  • 简单性:Docker Swarm 是 Docker 的原生功能,便于设置和管理你的容器化应用程序。
graph TD A[Docker 主机] --> B[Docker 主机] B[Docker 主机] --> C[Docker 主机] C[Docker 主机] --> A[Docker 主机] A[Docker 主机] -- Swarm --> B[Docker 主机] B[Docker 主机] -- Swarm --> C[Docker 主机] C[Docker 主机] -- Swarm --> A[Docker 主机]

使用 Docker Compose 部署多服务应用程序

Docker Compose 是一个允许你定义和运行多容器应用程序的工具。当你需要部署一个由多个服务组成的复杂应用程序,且每个服务都有其自身的一组需求时,它特别有用。

创建 Docker Compose 文件

要使用 Docker Compose 部署多服务应用程序,你需要创建一个 docker-compose.yml 文件,该文件定义服务、它们的配置以及它们应如何连接。以下是一个示例:

version: "3"
services:
  web:
    image: labex/web-app:v1
    ports:
      - "80:8080"
    depends_on:
      - db
  db:
    image: labex/database:v1
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

在此示例中,我们有两个服务:webdbweb 服务使用 labex/web-app:v1 镜像,并将主机端口 80 映射到容器端口 8080。它还依赖于 db 服务。db 服务使用 labex/database:v1 镜像,并为数据库数据挂载一个卷。

部署应用程序

要部署应用程序,你可以使用以下命令:

## 构建镜像(如有必要)
docker-compose build

## 部署应用程序
docker-compose up -d

docker-compose up -d 命令将在后台启动所有服务。

扩展应用程序

使用 Docker Compose 的好处之一是能够轻松扩展你的服务。例如,要将 web 服务扩展到 3 个副本,你可以运行:

docker-compose scale web=3

这将创建另外两个 web 服务实例,并且 Docker Compose 将自动在它们之间进行流量负载均衡。

graph LR client[客户端] --> load_balancer[负载均衡器] load_balancer --> web1[Web 服务] load_balancer --> web2[Web 服务] load_balancer --> web3[Web 服务] web1 --> db[数据库服务] web2 --> db web3 --> db

管理和扩展 Docker Swarm 堆栈

一旦你将多服务应用程序部署为 Docker Swarm 堆栈,就可以使用各种命令来管理和扩展它。

部署堆栈

要将应用程序部署为 Docker Swarm 堆栈,可以使用 docker stack deploy 命令:

docker stack deploy -c docker-compose.yml my-app

这将根据 docker-compose.yml 文件中的配置创建 Swarm 服务。

监控堆栈

你可以使用以下命令来监控 Swarm 堆栈的状态:

## 列出正在运行的服务
docker stack services my-app

## 列出某个服务的任务(容器实例)
docker service ps my-app_web

## 查看某个服务的日志
docker service logs my-app_web

扩展堆栈

要扩展 Swarm 堆栈中的服务,可以使用 docker service scale 命令:

## 将 "web" 服务扩展到 5 个副本
docker service scale my-app_web=5

这将创建另外 4 个 web 服务实例,并且 Docker Swarm 将自动在它们之间进行流量负载均衡。

graph LR client[客户端] --> load_balancer[负载均衡器] load_balancer --> web1[Web 服务] load_balancer --> web2[Web 服务] load_balancer --> web3[Web 服务] load_balancer --> web4[Web 服务] load_balancer --> web5[Web 服务] web1 --> db[数据库服务] web2 --> db web3 --> db web4 --> db web5 --> db

更新堆栈

要使用服务的新版本更新 Swarm 堆栈,可以使用 docker service update 命令:

## 更新 "web" 服务以使用新镜像
docker service update my-app_web --image labex/web-app:v2

这将滚动更新 web 服务,用新容器替换旧容器,而不会中断服务。

通过使用这些命令,你可以有效地管理和扩展 Docker Swarm 堆栈,以确保多服务应用程序的高可用性和性能。

总结

在本教程结束时,你将对 Docker Swarm 以及如何使用它来部署和管理多服务应用程序有深入的理解。你将能够设置一个 Docker Swarm 集群,使用 Docker Compose 定义应用程序的服务,并将整个堆栈部署为一个可扩展且具有弹性的系统。