Docker-Swarm

小伙伴儿们,如果觉得文章干货满满,欢迎加入公众号【编程识堂】,更多干货等着你们来哦!

温馨提醒:本文主要讲解docker-swarm实现docker集群,若小伙伴们对docker还不是很熟悉,请查阅上篇文章:Docker容器虚拟化技术

容器化部署=大麻烦

  • 怎么保证数据完整性
  • 怎么保护客户隐私数据
  • 怎么去调度容器
  • 怎么去监控追踪容器
  • 怎么去更新容器而不影响客户的业务
  • 如果容器down掉了。怎么自动恢复
  • 怎么去管很多微服容器
  • 怎么根据客户业务需求,快速方便的扩展容器

安装docker-swarm

官方文档

https://docs.docker.com/engine/swarm/

概述

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,可以将组成某个应该的多个docker容器 编排在一起,同时管理。而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,其主要作 用是把若干台Docker主机抽象为一个整体,并且通过一个入口(docker stack)统一管理这些Docker主 机上的各种Docker资源。
stack 是构成特定环境中的 service 集合, 它是自动部署多个相互关联的服务的简便方法,而无需单独定 义每个服务。
stack file 是一种 yaml 格式的文件,类似于 docker-compose.yml 文件,它定义了一个或多个服务,并 定义了服务的环境变量、部署标签、容器数量以及相关的环境特定配置等。
Docker Swarm由两部分组成:

  • Docker集群:将一个或多个Docker节点组织起来,用户就能以集群的方式进行管理;
  • 应用编排:有一套API用来部署和管理容器

image.png

配置私有仓库

私有仓库不是集群必备的组件。集群的每个节点都需要安装镜像,如果不搭建私有仓库,下载镜像速度 比较耗时。

 vi /etc/docker/daemon.json
 "insecure-registries":["192.168.198.101:5000"] 
 systemctl daemon-reload
 systemctl restart docker 

初始化管理节点

master 192.168.150.141
node1 192.168.150.142
node2 192.168.150.136
关于advertise-addr和listen-addr这两个参数: 前者用来指定其他节点连接m0时的地址 后者指定承载swarm流量的IP和端口 会在本地新建docker网络
docker swarm init --advertise-addr 192.168.150.141:2377 --listen-addr 192.168.150.141:2377
image.png

查询节点

docker node ls

获取加入manager 、woker节点token

有效期24小时

docker swarm join-token manager
docker swarm join-token worker

image.png
image.png

节点权限升级降级

 将worker节点提升为manager节点,在manager节点执行如下命令: 
docker node promote node1 
docker node ls 
将manager节点降低为worker节点,在manager节点执行如下命令:
 docker node demote node2
docker node ls  

脱离集群

 在ndoe2节点使用命令:
docker swarm leave 
稍微等待几分钟,在manager节点使用命令:
docker node ls
发现node2节点已经脱离集群管理。

删除脱离集群的节点

 先使用命令:docker node demote 节点名称。
 将某一个节点降为worker节点后,再删除。(或在woker节点执行)
 使用命令:docker node rm 节点名称|节点ID 
 例如:docker node rm work-02 manager节点只能强制退出。
 命令:docker swarm leave --force。manager退出后意味着整个swarm 不复存在。  

图形界面

docker官网

https://hub.docker.com/r/dockersamples/visualizer

基础镜像

拉取镜像 docker pull dockersamples/visualizer:latest 
备份镜像 docker save dockersamples/visualizer:latest -o dockersamples.visualizer.tar 
还原镜像 docker load -i dockersamples.visualizer.tar  

运行镜像

必须在manager节点运行
 docker run -itd --name visualizer -p 8099:8080 -e HOST=192.168.150.141 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest

 docker service create  --name=viz  --publish=8080:8080/tcp  --constraint=node.role==manager  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock  dockersamples/visualizer  

测试镜像

http://192.168.150.141:8099/

基础命令

swarm命令

  • docker swarm init 初始化一个 swarm 群集
  • docker swarm join 加入群集作为节点或管理器
  • docker swarm join-token 管理用于加入群集的令牌
  • docker swarm leave 离开 swarm 群集
  • docker swarm unlock 解锁 swarm 群集
  • docker swarm unlock-key 管理解锁钥匙
  • docker swarm update 更新 swarm 群集

node命令

  • docker node demote 从 swarm 群集管理器中降级一个或多个节点
  • docker node inspect 显示一个或多个节点的详细信息
  • docker node ls 列出 swarm 群集中的节点
  • docker node promote 将一个或多个节点推入到群集管理器中
  • docker node ps 列出在一个或多个节点上运行的任务,默认为当前节点
  • docker node rm 从 swarm 群集删除一个或多个节点
  • docker node update 更新一个节点

service命令

  • docker service create 创建服务
  • docker service inspect 显示一个或多个服务的详细信息
  • docker service logs 获取服务的日志
  • docker service ls 列出服务
  • docker service rm 删除一个或多个服务
  • docker service scale 设置服务的实例数量
  • docker service update 更新服务
  • docker service rollback 恢复服务至update之前的配置

stack命令

  • docker stack deploy 部署新的堆栈或更新现有堆栈
  • docker stack ls 列出现有堆栈
  • docker stack ps 列出堆栈中的任务 d
  • ocker stack rm 删除一个或多个堆栈
  • docker stack services 列出堆栈中的服务

部署nginx集群

部署

 在manager节点中创建overlay网络:
 docker network create -d overlay nginx-net 
 创建5个nginx:alpines容器的集群: 
 docker service create --name nginx --network nginx-net -p 80:80 --replicas 5 nginx:1.18.0-alpine 
 在manager节点使用docker service ls 命令查看服务情况,worker节点无法查看:
 docker service ls
 在manager或者worker节点都可以执行docker ps命令查看本虚拟机容器情况:
 docker ps
 manager节点只用于管理集群,不希望部署服务(驱离)。 
 docker node update --availability drain master
 使用docker service scale nginx=2命令将服务缩减为2个容器:
 docker service scale nginx=2  

image.png
image.png
image.png

升级nginx版本

旧版本
image.png

 进入其中一个容器查看nginx的版本信息: 注意事项:因nginx是alpine的linux版本。不能使用/bin/bash指令。
 docker exec -it 503fe639bb89 sh nginx -v
 1.更新镜像: docker service update --image nginx:1.19.3-alpine nginx 
 2.添加或者更新一个对外端口: docker service update --publish-add 8090:80 nginx 

image.png
image.png

overlay网络调度

image.png
image.png
192.168.150.141主机并没有部署nginx,但能访问,主要是overlay网络服务调度
image.png

删除服务

 docker service rm nginx
 docker network rm nginx-net  

image.png

stack

docker-compose.yml
image.png

运行nginx

 在manager节点中创建docker-compose.yml文件。执行如下命令:
 docker stack deploy nginx-stack --compose-file=docker-compose.yml 
 或者是 docker stack deploy nginx-stack -c docker-compose.yml
 查看stack服务运行情况。执行如下命令:
 docker stack services nginx-stack 
 查看5个容器运行在哪个节点中。执行如下命令: 
 docker service ls 
 查看到NAME中的服务名为:nginx-stack_nginx-web
 docker service ps nginx-stack_nginx-web 
 进行测试: 
 curl 192.168.0.105 
 curl 192.168.0.106
 curl 192.168.0.107  
 删除stack服务。执行如下命令:
 docker stack rm nginx-stack

总结

  • networks中也可以不指定driver:overlay,因为docker swarm默认网络类型是overlay。
  • 整个networks都可以不用配置。stack部署时会默认创建网络。如果我们定义网络。在docker stack deploy时会先默认创建一个网络,在创建一个我们定义的网络。
  • 一定要把镜像先拉取到本地再执行

Docker Stack和Docker Compose区别

  • Docker stack会忽略了“构建”指令,无法使用stack命令构建新镜像,它是需要镜像是预先已经构建 好的。 所以docker-compose更适合于开发场景;
  • Docker Compose是一个Python项目,在内部,它使用Docker API规范来操作容器。所以需要安 装Docker -compose,以便与Docker一起在您的计算机上使用; Docker Stack功能包含在Docker引擎中。你不需要安装额外的包来使用它,docker stacks 只是 swarm mode的一部分。
  • Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而 Docker Compose对版本为2和3的 文件仍然可以处理;
  • docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。同时, 对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。如果您是Docker 新手,或正在选择用于新项目的技术,请使用docker stack。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值