Logo
Section 1 / 9

Docker Swarm 简介

关于使用 Docker 的 DevOps 一些介绍

导入

Docker Swarm 简介

关于使用 Docker 的 DevOps 一些介绍

直到上一节,我们都是从开发者的角度来学习的。本节将带你初步了解使用 Docker 的 DevOps 实践。

设定我们的预期

本课程的重点是使用 Docker 进行开发。我们已经涵盖了开发者视角所需的所有内容。通过本课程的学习,你将能够轻松地使用 Docker 开发 Web 应用。

然而,你可能也希望对部署过程有一定程度的了解,以便更好地理解项目中正在发生的事情。因此,本节将为你提供关于 Swarm 架构的高层次理解,帮助你建立对基于 Docker Swarm 部署的生产环境的概念性认识。

让我们开始吧。

什么是容器编排?

假设你开发了一个非常出色的、将被数百万用户使用的应用程序。如何在不出现单点故障的情况下高效部署,以应对大量请求?

在大规模环境下管理系统非常困难。成千上万的容器分布在不同的机器上运行。你如何追踪哪个容器已停止,或哪个服务不再运行?

有效地管理这一容器集群的过程被称为容器编排。目前,有三种主要工具可用于容器编排,分别是 Docker Swarm、Kubernetes 和 Apache Mesos。

在接下来的课程中,我们将深入学习 Docker Swarm。

什么是 Docker Swarm?

Docker Swarm 是一种容器编排工具,允许用户在多台主机上管理部署的多个容器。
Docker Swarm 具有多个组件,这些组件共同协作,实现对 Swarm 集群的有效管理。让我们通过架构图来理解其工作原理。

Docker Swarm 架构

Course Image

工作节点(Worker Node)是管理者创建任务并执行的地方。每个工作节点上会运行服务,以保持与 YAML 文件中定义的状态一致。

在这个架构中,仅使用一个 YAML 文件。这正是 YAML 文件的强大之处:通过该文件,可以创建并部署一组服务到每个工作节点上。

节点是一台机器。它可以充当管理节点、工作节点,或同时承担两者角色。我们可以拥有多个管理节点,但始终有一个主节点负责管理整个 Swarm 集群。

管理节点的主要特性包括:

  • 始终掌握集群的精确状态
  • 负责维护由 YAML 文件描述的集群状态
  • 在工作节点上创建不同任务,以维持服务所需的期望状态
  • 在节点故障时保存备份,并在可用节点上启动新容器,以维持容器数量

现在让我们逐一理解架构中的各个组成部分。

Docker Swarm 的核心构建模块

一个 Swarm 集群可以包含以下组件:

  • 节点(Node):节点即宿主机。一台机器可以作为工作节点、管理节点,或同时作为两者。我们也可以只用一个节点组成一个 Swarm 集群,此时该机器同时扮演工作节点和管理节点的角色。

    例如,在由 5 台计算机组成的集群中,每台计算机都是一个节点,其中有一台主控计算机负责集群之间的通信。

  • 栈(Stack):多个服务组合在一起称为一个栈。栈与 Compose 有些类似,但存在一些差异:在非 Swarm 模式下,docker-compose 会忽略某些命令,比如 deploy。

    举个例子,当你希望用一条命令部署整个项目(如包含 Web 服务器、数据库和任务队列等服务)时,你可以将所有服务定义在一个 YAML 文件中,这个文件就成为 Swarm 管理器的“服务栈”。Swarm 管理器将部署该栈,并持续维护 YAML 文件中定义的服务期望状态。

  • 服务(Service):服务是定义在管理节点或工作节点上执行的任务的规范。它是 Swarm 系统的核心结构,也是用户与 Swarm 交互的主要入口。创建服务时,你需要指定要使用的容器镜像以及在运行容器中执行的命令。

    举个例子,我们之前创建的 Flask 应用就是一个服务。为什么?因为我们使用了 flask_app:2.0 镜像,它将在容器中运行 WSGI 服务器。

  • 任务(Task):任务负责维护服务所需的副本数量。为了在工作节点上部署服务,Swarm 管理器会创建一个任务,并在其中启动一个容器。

    如果你熟悉 Kubernetes,那么“任务”类似于“Pod”。任务是 Swarm 中最基本的调度单元。

    举个例子,你定义了一个服务,要求 Swarm 管理器始终运行三个 HTTP 监听器实例。协调器会响应创建三个任务。每个任务是一个调度槽位,调度器通过启动容器来填充它。容器就是任务的具体实例。如果某个 HTTP 监听器任务后续健康检查失败或崩溃,协调器将创建一个新的副本任务,并启动新的容器。

Course Image

任务是一种单向机制,其状态按顺序单调推进:分配、准备、运行等。如果任务失败,协调器会移除该任务及其容器,并根据服务定义的期望状态创建一个新的任务来替代它。

Docker Compose 简介

Docker 服务入门