前言
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的私有仓库一般有两种实现方式:
- Docker Registry
- 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搭建与使用
1 条回复
[…] Jenkins的搭建和使用自行搜索即可。 Docker Swarm的搭建过程可以参考其他文章。 […]