快速上手 Docker Swarm:构建分布式容器集群、轻松管理节点和服务

什么是Docker Swarm

Docker Swarm 是 Docker 的内置编排工具,它允许将多个 Docker 主机组成一个集群,并以统一的方式管理和部署容器化应用程序。Swarm 提供了高可用性、伸缩性和容错能力,使得应用程序能够在集群中弹性地运行和扩展。

Docker Swarm的优点

  • 内置支持:Docker Swarm 是 Docker 官方提供的解决方案,与 Docker 引擎紧密集成,无需额外安装和配置。
  • 简单易用:Swarm 的命令和操作与 Docker 引擎类似,易于理解和学习。它提供了简化的命令和配置选项,使得容器编排变得简单。
  • 可扩展性:Swarm 可以轻松扩展到数百甚至数千个节点,支持大规模容器部署和管理。
  • 高可用性:Swarm 提供容错和故障恢复机制,确保在节点故障或服务异常时,应用程序能够继续运行。
  • 安全性:Swarm 支持安全传输和身份验证,保护集群和容器的安全。
  • 与 Docker 生态系统集成:Swarm 可与其他 Docker 工具和服务集成,如 Docker Compose、Docker Registry 等,提供完整的容器化解决方案。

概念

节点

swarm 集群由管理节点(manager)和工作节点(work node)构成。

  • manager:负责整个集群的管理工作,包括集群配置、服务管理等所有跟集群有关的工作。
  • work node:主要负责运行从管理节点分派的任务,管理节点也默认作为工作节点。
    在这里插入图片描述

服务和任务

任务(Task)是Swarm中的最小调度单位。服务(Services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式:

  • replicaetd services:按照一定规则在各个工作节点上运行指定个数的任务。
  • global services:每个工作节点上运行一个任务
    在这里插入图片描述

初始化 swarm 集群

在一个管理节点执行初始化命令:

$ docker swarm init --advertise-addr 192.168.99.107
Swarm initialized: current node (dlkndguzu1qburlzblvmym828) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在工作节点执行join命令加入集群(命令复制于初始化命令的输出内容):

$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
This node joined a swarm as a worker.

docker swarm常用命令:

    命令                   说明
docker swarm init             初始化集群
docker swarm join-token worker     查看工作节点的 token
docker swarm join-token manager    查看管理节点的 token
docker swarm join             加入集群
docker swarm leave                   离开集群

查看节点信息

$ docker node ls
ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0    worker2         Ready   Active
38ciaotwjuritcdtn9npbnkuz    worker1         Ready   Active
e216jshn25ckzbvmwlnh5jr3g *  manager1        Ready   Active        Leader

下线一个节点(节点不再参与任务分配):

docker node update --availability drain worker1

上线一个节点:

docker node update --availability active worker1

docker node常用命令:

命令              说明
docker node ls         查看集群中的所有节点
docker node ps        查看一个或多个节点中的 Task 任务(默认查看当前节点)
docker node inspect      查看一个或多个节点的详细信息
docker node promote     节点升级,由工作节点升级为管理节点
docker node demote      节点降级,由管理节点降级为工作节点
docker node update      更新一个节点
docker node rm         删除一个或多个节点(-f强制删除)

部署服务

# 使用replicas参数来指定副本数
docker service create --name redis --replicas=2 redis:3.0.6

查看服务列表:

$ docker service ls
ID            NAME    MODE        REPLICAS  IMAGE
dmu1ept4cxcf  redis   replicated  2/2       redis:3.0.6

查看指定服务的任务列表:

$ docker service ps redis
ID             NAME      IMAGE        NODE      DESIRED STATE  CURRENT STATE          ERROR  PORTS
0qihejybwf1x   redis.1   redis:3.0.6  manager1  Running        Running 8 seconds
bk658fpbex0d   redis.2   redis:3.0.6  worker2   Running        Running 9 seconds

查看指定服务的详细信息:

$ docker service inspect --pretty redis
ID:     dmu1ept4cxcfe8k8lhtux3ro3
Name:   redis
Labels:

Service Mode:   REPLICATED
 Replicas:      2
Placement:
UpdateConfig:
 Parallelism:   0
 On failure:    pause
 Max failure ratio: 0
ContainerSpec:
 Image:     redis:3.0.6
Resources:
Networks:   net1
Endpoint Mode:  vip
Ports:
 PublishedPort = 4443
  Protocol = tcp
  TargetPort = 443
  PublishMode = ingress

查看日志:

docker service logs -f --tail=n redis

服务扩容与缩容:

docker service scale redis=3

滚动升级服务:

# 创建时使用--update-deplay参数类设置每个task之间的更新延迟
docker service create --name redis --replicas 3 --update-delay 10s redis:3.0.6
# 升级redis服务的镜像版本
docker service update --image redis:3.0.7 redis

删除服务:

docker service rm redis

docker service常用命令:

命令             说明
docker service create      部署服务
docker service ls        查看服务列表
docker service ps        列出一个或多个服务的任务列表
docker service inspect     查看一个或多个服务的详细信息
docker service logs       查看一个服务或任务的日志
docker service scale      设置服务的任务数量
docker service update      更新一个服务
docker service rollback     回滚一个服务到以前的版本
docker service rm        删除一个或多个服务(-f强制删除)

参考

Use the Docker command line | Docker Docs

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值