跳到主要内容

认识

2024年05月22日
柏拉文
越努力,越幸运

一、认识


Docker SwarmDocker 提供的原生容器编排和集群管理工具。它将多个 Docker 引擎节点集成在一起,形成一个高可用、高可扩展的虚拟 Docker 引擎。Swarm 模式内置于 Docker 引擎中,可以通过简单的 Docker 命令来管理集群中的容器。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。与 Swarm 对应的是 Kubernetes(k8s)

Docker Swarm 适合初学者、小型项目或需要快速部署和管理的简单场景。由于其简单性和与 Docker 的无缝集成,Swarm 是那些已经在使用 Docker 并希望扩展到集群环境的团队的理想选择。

二、功能


2.1 服务发现

内置 DNS 服务进行服务发现。

2.2 负载均衡

通过 VIP(虚拟 IP)和 DNS RR(轮询)实现负载均衡。

2.3 自愈能力

Docker Swarm 提供了基本的自愈功能。 自动重新调度失败的任务,确保服务的高可用性。节点故障时,自动将任务迁移到其他可用节点。

2.4 水平扩展

2.5 滚动更新和回滚

Docker Swarm 提供了滚动更新和回滚,但是功能相对简单。 支持无中断地更新服务,逐步替换旧版本容器为新版本容器。

2.6 声明式服务模型

用户定义服务的期望状态,Swarm 保证实际状态与期望状态一致。

三、核心


3.1 节点(Node)

节点是运行 Docker 容器的机器,可以是物理机或虚拟机。在 Swarm 集群中,有两种类型的节点:

  • 管理节点Manager Node: 负责集群管理和调度任务。

  • 工作节点Worker Node: 负责运行容器任务。

3.2 服务(Service)

服务是 Swarm 中的应用模型,它定义了容器的镜像、端口映射、环境变量等。服务可以扩展到多个任务(Task),每个任务在不同的节点上运行。

3.3 任务(Task)

任务是服务的具体运行实例,每个任务对应一个容器。Swarm 将任务调度到集群中的节点上运行。

3.4 堆栈(Stack)

堆栈是一个应用的集合,通过 docker-compose.yml 文件定义。堆栈可以包含多个服务,使用 docker stack 命令部署。

四、工作


4.1 初始化集群

使用 docker swarm init 命令初始化 Swarm 集群,创建管理节点。

docker swarm init --advertise-addr <MANAGER-IP>

4.2 添加节点

使用 docker swarm join 命令将工作节点加入集群。

docker swarm join --token <SWARM-TOKEN> <MANAGER-IP>:2377

4.3 创建服务

使用 docker service create 命令在 Swarm 集群中创建服务。

docker service create --name myservice --replicas 3 -p 80:80 nginx

4.4 管理服务

可以使用 docker service ls 查看集群中的服务状态,使用 docker service ps myservice 查看服务任务的运行状态。

docker service ls
docker service ps myservice

4.5 更新服务

使用 docker service update 命令更新服务配置,例如更新镜像版本。

docker service update --image nginx:latest myservice

五、应用


DockerSwarm 适合在多台物理机器之间使用。因此, DockerSwarm 可以应用于生产环境。