Docker 8 ( Docker 三剑客之 Swarm )

一、Docker Swarm

简介:
1、Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。
2、Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具,Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
3、Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。

优点:
1、任何规模都有高性能表现、灵活的容器调度、服务的持续可用性;
2、和 Docker API 及整合支持的兼容性;
3、Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

相关概念:
节点分为管理 (manager) 节点和工作 (worker) 节点;
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器;
服务 (Services) 是指一组任务的集合,服务定义了任务的属性。

在这里插入图片描述

1.实验环境部署

首先server1关闭上个实验环境
请添加图片描述
后台开启harbor
请添加图片描述
新创建虚拟机server4,用于后续部署为swarm集群中的一个节点;
(之后server4编写docker.repo仓库指向文件,安装启动docker)
请添加图片描述
之前server1已经给了server2/3做了免密通信,现在对server4实现免密登陆远程主机
请添加图片描述
为了使server3/4可以访问到仓库地址,将server1 /etc/docker 的 daemon.json文件传给server3/4(server2之前已经配置好了)
请添加图片描述
server1发送证书文件
请添加图片描述
然后server3/4都重启docker,docker info可以查看到仓库地址
请添加图片描述
请添加图片描述
请添加图片描述
server3/4加入仓库的地址解析
请添加图片描述

2.Docker Swarm实践

由于server1上有harbor仓库,因此让 server2 创建 Swarm 集群(作为manager)
docker swarm init:初始化集群,根据提示在其他docker节点上执行命令
请添加图片描述
server3/4加入集群
请添加图片描述
请添加图片描述
查看swarm集群节点,可以看到server2是leader
请添加图片描述
将真机的myapp.tar传给server1,后续实验需要
请添加图片描述
导入镜像(两个版本),修改标签为仓库中的library项目
请添加图片描述
上传至仓库
请添加图片描述
上传成功
请添加图片描述
创建集群服务,命名为webservice,物理机的80端口映射到容器内的80端口,副本数量为3,使用myapp:v1镜像;
查看服务是否运行;
请添加图片描述
在server3/4上可以看到容器已经运行起来了
请添加图片描述
请添加图片描述
测试,可以看到访问的服务自动负载均衡,因为刚才 开启三个节点,所以负载均衡每三次是一个循环
请添加图片描述
弹性伸缩:扩充服务的数量为6,平均的分布在三个服务器上
请添加图片描述
可以看到访问的服务自动负载均衡,六个结点
请添加图片描述
访问server2,3,4哪个IP都可以看到
请添加图片描述

3.Docker Swarm监控

先将上面的实验清理,删除所创建的集群服务
请添加图片描述
真机将虚拟化工具的tar包传给server1
请添加图片描述
server1导入visualizer镜像,修改标签为仓库library中,并上传镜像到仓库
请添加图片描述
请添加图片描述
创建服务,–replicas :设置启动的示例数为6 (副本6个)
请添加图片描述
创建监控,名字叫viz,8080端口映射到8080
请添加图片描述
网页访问监控visualizer,映射端口到主机的8080,可以看到六个服务,一个监控
请添加图片描述
扩容到20个
请添加图片描述
把原来的v1更新为v2,parallelism参数表示一次五个;delay参数是表示每隔5秒更新一次
在这里插入图片描述
查看
请添加图片描述
查看日志
请添加图片描述
测试访问,版本为v2
请添加图片描述
回滚到v1版本,默认是一个一个回滚
请添加图片描述
请添加图片描述
回滚到v1
请添加图片描述

二、docker stack部署

基于 Docker Swarm 之上来完成应用的部署,面向大规模场景下的多服务部署和管理。
docker stack与docker-compose的区别:
1、Docker stack不支持“build”指令,它是需要镜像是预先已经构建好的, 所以docker-compose更适合于开发场景;Docker Compose是一个Python项目,使用Docker API规范来操作容器。
2、Docker Stack功能包含在Docker引擎中,是swarm mode的一部分,Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理;
3、docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。

docker stack相关命令:
在这里插入图片描述
在前面的操作中,我们采用命令行的方式建立了swarm集群,但是这样的操作比较麻烦,可以编写脚本自动创建;
删除上面的实验环境
请添加图片描述
请添加图片描述
编写docker-compose脚本

[root@server2 ~]# cat docker-compose.yml
version: "3.8"
services:
  web:
    image: myapp:v1
    ports:
      - "80:80" 			%端口映射,主机80映射容器80
    networks:
      - webnet 				%网络接口为webnet
    deploy:
      replicas: 6 			%副本数量为6
      update_config:
        parallelism: 2 		%每次更新的数量为2
        delay: 5s  			%更新时间间隔
      restart_policy:
        condition: on-failure

  visualizer:
    image: visualizer:latest
    ports:
      - "8080:8080" 		%监控端口为主机映射8080到容器的8080
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"

networks:
  webnet:

请添加图片描述
使用脚本部署集群,名为mycluster;
查看stack进程:六个节点已经成功拉起
请添加图片描述
页面查看
请添加图片描述
修改脚本,扩容为60个
请添加图片描述
重新执行脚本
请添加图片描述
查看页面监控
请添加图片描述
再次修改脚本将镜像改为v2时
请添加图片描述
就会实现滚动更新
请添加图片描述
查看监控,发现开始逐渐变化为v2
请添加图片描述
查看到原来的v1也在,这是为了便于回滚
请添加图片描述
swarm集群在创建成功时会自动添加虚拟网卡
请添加图片描述

三、Portainer可视化

在前面的操作中,我们采用命令行的方式建立了swarm集群,接着为swarm集群管理添加图形化管理界面;
为了更好的区分,在仓库中新建一个项目portainer
请添加图片描述
请添加图片描述
导入镜像,修改标签,上传到仓库的portainer项目中
请添加图片描述
请添加图片描述
将portainer-agent-stack.yml文件传给server2
请添加图片描述

version: '3.2'

services:
  agent:
    image: portainer/agent
    environment:
      # REQUIRED: Should be equal to the service name prefixed by "tasks." when
      # deployed inside an overlay network
      AGENT_CLUSTER_ADDR: tasks.agent
      # AGENT_PORT: 9001
      # LOG_LEVEL: debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "9000:9000"
    volumes:
      - portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay
    attachable: true

volumes:
  portainer_data:

在server2上执行脚本,查看portainer开启了9000端口
请添加图片描述
网页访问进入图形界面(设置两次密码)
请添加图片描述
即可进入管理界面
请添加图片描述
scale修改数字,直接就可以扩/缩容,修改启动的示例数为6
请添加图片描述
然后展开看到只剩6个
请添加图片描述
查看监控
请添加图片描述
请添加图片描述
添加仓库信息
请添加图片描述
请添加图片描述
请添加图片描述
仓库中已有镜像game2048
请添加图片描述
权限访问打开
请添加图片描述
添加service,选择刚才创建的仓库名,添加服务game2048,8000端口映射为80
请添加图片描述
可以看见服务创建成功
请添加图片描述
因为刚才设置端口映射为8000,所以访问serve2的8000端口:
172.25.36.2:8000
请添加图片描述
由于server2/3/4是一个集群,也可以访问172.25.36.3:8000或者172.25.36.4:8000
请添加图片描述
实验完毕,关闭并离开集群,worker主机输入docker swarm leave
请添加图片描述
manager主机 输入docker swarm leave --force
请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值