其他 · 2021年5月31日 1

Docker Swarm搭建与使用

前言

Docker Swarm是docker提供的轻量化的集群管理工具,可以在中小型项目中替代K8S。
在此处将不再对Docker Swarm原理、实现等做详细的说明。

初始化Docker Swarm

首先需要安装Docker,这里不做介绍。

# 初始化swarm 会生成一个token
docker swarm init --advertise-addr 172.16.0.179
> Swarm initialized: current node (jp5q70od6mcdm4ptyex8ybexe) is now a manager.
> 
> To add a worker to this swarm, run the following command:
> 
>     docker swarm join --token SWMTKN-1-5n1vyihj0yo0ejhxfattze********************************-3tt7jofp0j6nq5s0rypi5avi0 172.16.0.179:2377
> 
> To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

# 以worker的身份加入集群
# 也可以使用manager的身份加入
docker swarm join --token SWMTKN-1-5n1vyihj0yo0ejhxfattze********************************-3tt7jofp0j6nq5s0rypi5avi0 172.16.0.179:2377

通过以上命令可以创建一个Docker Swarm集群网络,可以自主选择加入若干个管理节点、工作节点。
只有管理节点大于等于3个才会触发集群的高可用模式,即当某个节点下线,会自动选举新的管理节点,与此相关的分布式一致性算法等等这里不做说明。

需要提及的一个重要点Docker Swarm的任意一个节点都可以当作整个集群的入口,不仅仅是管理节点;请求到达工作节点时,会先触发Docker Swarm的端口监听,从而转发到任意管理节点,也就是说:你无法直接访问Docker Swarm集群服务的单个容器,虽然也是一个Docker容器,有映射端口,但是Docker会在请求到容器之前将其截断,并转发。

创建集群服务

# 创建服务 --replicas指定容器数量
docker service create --replicas 1  --name web_api -p 8099:8099 web_api

会在所有可以工作的节点上创建指定数量的服务。

# 更新服务
# --update-parallelism:设置单次更新的副本数量;
# --update-delay:每次更新的间隔时间
# --replicas 6:升级后的总副本数量
docker service update --replicas 6 --image 172.16.0.179:9000/web_api:v3 --update-parallelism 2 --update-delay 1m web_api

使用指定的镜像更新服务。

# 扩容
docker service scale web=8
# 缩容
docker service scale web=4

对某一个服务的数量进行动态修改。

以下是可能需要使用的其他命令:

# 因为没有手动设置HOSTNAME所以通过这种方式查看
docker node ls
> ID                            HOSTNAME                     STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
> r48y7sdygnzugor18xinbmtwm     ecs-a5e8-0623453.novalocal   Ready               Active                                  19.03.12
> oz1j24c87vgf4dbxnovtpeci3     ecs-a5e8-0623454             Ready               Active                                  19.03.12
> jp5q70od6mcdm4ptyex8ybexe *   ecs-a5e8-0623466             Ready               Active              Leader              19.03.12

# 版本回滚
# 当我们执行回滚操作的时候,默认是回滚到上一次操作的版本,并且不可以连续回滚。
docker service rollback web_api

# 更改节点的availablity状态  可以设置manage node 不工作
# swarm集群中node的availability状态可以为 active:工作;pause:暂时不工作;drain:永久性的不工作
# active状态下,node可以接受来自manager节点的任务分派;
# drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)
docker node update --availability drain ecs-a5e8-0623466 
docker node update --availability active ecs-a5e8-0623466 

# 删除节点
docker node rm --force ecs-a5e8-0623466 

Docker Swarm 常用命令 - kevin.Xiang - 博客园 (cnblogs.com)

docker service | Docker Documentation

Docker私有仓库

Docker的私有仓库一般有两种实现方式:

  1. Docker Registry
  2. harbor

harbor功能更多更强大,适合企业级应用,这里就不再赘述。Registry是一种简易的实现,非常便捷:

docker pull registry
docker run -d -v /data/docker/registry:/var/lib/registry -p 9000:5000 --restart=always --name registry registry:latest

打开此链接可查看:172.16.0.179:9000/v2/

修改客户端docker的配置文件/etc/docker/daemon.json,添加以下内容(registry服务地址,需要重启docker):

{
    "insecure-registries": ["172.16.0.179:9000"]
}

这一项必做,在新版的Docker中仓库只能访问Https,所以要加入名单。

visualizer

这是docker提供的建议的集群管理页面,当你部署好Docker Swarm后,它会自动生效,不需要额外修改。最好部署到一个管理节点上。

# 部署一个集群管理的UI界面
docker run -d -p 9100:8080 -e HOST=172.16.0.179 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer





>>转载请注明原文链接地址:Docker Swarm搭建与使用