容器化-Docker集群
笔记
课程专题:微服务容器化
四、容器化-Docker集群
1、Docker集群理解
docker集群:多个docker实例组成的集合
1、保证docker高可用
2、解决项目高性能和高可用
docker集群搭建前提
docker集群内部概念
1、worker 工作者 运行项目
2、manager 管理者 管理其他docker实例。安排项目到哪个worker运行
docker集群内部关系
manager 和 worker
一对多关系
3个docker
只有一个manager 。2个worker
2、Docker集群搭建
swarm
1、创建docker manager 角色
2、创建docker worker角色
条件
1、准备2台虚拟机
2、每台虚拟机安装docker
3、再使用swarm
1、先创建manager 角色 192.168.142.129
2、然后创建worker角色
注意:关闭防火墙
3、Docker node
node:节点。管理集群
前提:必须在manager 节点上才能使用
node:就是用来管理节点。
4、Docker service
目标:docker 集群运行webapi镜像
docker run
docker service
1、先确认service在哪里
2、然后再使用service运行镜像
docker service create webapi
运行流程:
1、创建service :管理容器
2、创建task(线程):调度任务
3、分配哪一个docker运行镜像。得到容器
docker run webapi(调度去完成)
strange_ellis--->strange_ellis.1------>strange_ellis.1.pktse7sdtfocw1k1glb3ktbpv
service ---->容器关系
一对多关系:一个service可以管理多个容器
service访问
访问流程
客户端---->Linux---->Docker---->Service----->容器---->项目
9099 ------> 80 80 80
service运行项目集群(扩容)
scale
客户端---->Linux---->Docker---->Service----->容器---->项目
容器---->项目
容器---->项目
容器---->项目
1、轮询算法
2、最小活跃数算法(默认)
service作用:
1、运行镜像
2、管理容器
3、负载均衡
service运行webapi
service运行ydtnginx
5、Docker stack
service :只能做到镜像一个一个运行。
需求:批量运行镜像
service编排。批量创建service
核心:stack
deploy 命令
1、docker-compose.yml
json
docker客户端--->docker 服务器
1、先准备docker-compose.yml
2、然后配置docker-compose.yml
3、运行docker-compose.yml
stack:
1、deploy 命令
2、docker-compose.yml
应用:
1、微服务部署
2、多租户部署
6、Docker config
service之间通信
webapi
客户端---->Linux---->Docker---->Service----->容器---->项目
容器---->项目
容器---->项目
容器---->项目
nginx
客户端---->Linux---->Docker---->Service----->容器---->项目
容器---->项目
容器---->项目
容器---->项目
通信前提
1、service名称通信
docker-compose.yml文件
ydtnginx webapi
2、config。集群配置
只需要配置一次,整个集群可以使用
原理:主节点创建,同步到其他节点。
实现service之间通信。
目标:实现nginx和webapi之间通信
1、先创建nginx.conf
2、配置nginx.conf配置文件
3、使用config实现集群配置
1、先创建config
2、使用config
/usr/local/nginx/conf/nginx.conf
4、最后使用stack运行
docker 集群搭建,出现了网络问题。
1、无法使用名称通信
2、只能主节点访问,工作节点不能访问
下节课
使用k8s。
1、如果master节点宕机,可以使用吗?
答案:可以使用。集群节点之间选举
2、只能用主节点访问,这样有什么好处吗?
答案:所有节点都能访问。才合理。
3、docker service在manager节点、worker节点都可以运行?
答案:service只能在manager节点。容器可以运行在manager 和 worker节点
4、复制集是什么?为什么要用复制集?
答案:多个相同的实例。
5、如果是winform项目或者是WPF项目的话和这个webapi项目的操作过程是一样的吗?
答案:没有任何区别。
6、所以总的层次是:客户端->linux->docker->stack->service->容器->服务实例 吗?
答案:客户端->linux->docker->service->容器->服务实例 吗?
7、之前安装虚拟机机,内存需要16G?
答案:虚拟机内存大一点好一些
8、复制集 和 集群 有本质区别吗?
答案:复制集是集群的特例。实例作用完全一样
集群
1、实例作用完全一样
2、实例作用不一样
9、docker里有没有用其他操作系统的?
docker 容器里面。默认使用的Linux 乌班图。ubantu
apt yum
docker-集群
什么是docker集群
什么是集群
1、先生活中集群
2、再软件中集群
3、最后总结
总结:不同服务实例,来共同提供服务的一组集合就是集群
集群类型
1、先看两个集群例子:nginx集群,redis集群
2、然后总结
1、对称集群
不同服务实例,功能地位相等(每一个实例提供的功能机会相同)
定位:数据计算
2、非对称集群
不同服务实例,功能地位不相等(每一个实例提供功能的机会不相同)
定位:数据存储
什么是docker集群
接下来,考一下大家,大家认为docker集群是个什么集群
总结
1、docker集群是非对称集群
见图进行解析
为什么要使用docker集群
从docker集群图来进行分析,docker里面运行着容器,如果docker宕机?
docker容器对外提供 访问,如果访问量越大,一台docker的并发量毕竟有限
总结:
1、单点故障问题
2、性能问题
所以为了解决这两个问题,就出现了docker集群
实现docker集群方式
1、swarm
2、k8s
但是我们今天只会讲解swarm,今天我们选择swarm
选择原因
1、swarm是docker官方提供的集群工具
2、k8s是谷歌开发的
3、k8s理解使用起来比较难
swarm如何管理docker集群
swarm是什么,怎么理解?
swarm 就好比是地铁购票机安装员。同理swarm就是地铁购票机安装员
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
swarm内部概念
1、node节点概念
2、task概念 — 后面再引入
3、service概念 — 后面再引入
4、stack概念 — 后面再引入
就是将集群的docker通过node分配角色的方式进行维护
node 就是docker的别名,就好比,我们去公司上班,每一个人都有一个工号,工号就是我们的别名,那么node就是docker的别名,但是node有两个类型,manager 和work,就是讲docker分成了两类,就好比,公司里面有老板和员工,manager就是老板,work就是员工,老板是管理的,员工是干事的。有时候人工不够的时候,老板也过来干事。
1、node :docker主机
2、管理节点(manager)
管理docker集群
1、集群配置
2、容器服务管理。
3、负载均衡
4、集群管理?
3、工作节点 (worker)
1、提供容器服务
swarm是如何操作集群节点容器的?===目前先不讲
在使用之前我们必须要准备一些概念,这些概念是swarm的核心,掌握了这些概念,就已经理解了swarm 50%
后面都是基于这些概念的操作
service是什么?
是指不同节点容器集合,用来维护容器
task是什么?
在集群环境中,用来运行容器
stack是什么?
是指stack的集合,用来维护service
swarm如何创建docker集群
条件
1、两台以上docker主机
2、docker swarm
步骤
1、安装两台docker主机,使用linux或者centos7.0以上
安装1.12 版本以上的docker,会在主机上默认提供支持
2、如何使用docker swarm?
1、输出docker命令,会看到有一个swarm管理命令
docker swarm
2、然后输入docker swarm 命令
可以看到很多的帮助命令
3、创建集群管理节点
docker swarm init –advertise-addr 192.168.44.4
4、创建工作节点
docker swarm join –token SWMTKN-1-2bomg3tb4cs8f5g7oqrw34k1mql9i0tr2msn8leqyphgac5hct-db4iwy32sdr6m0bmqyhi47jyn 123.57.164.54:2377
5、查看集群消息,查看工作节点和管理节点
docker info
docker swarm运行商品微服务镜像
条件
1、productservice_micro镜像
2、docker service
步骤
1、查看productservice_micro镜像
输入命令:docker images
![image-20220717162852586](D:\work\net-project\微服务专题\29、微服务部署-Docker(三)-应用\assets\image-20220717162852586.png)
2、如何使用docker service?
2.1、输出docker命令,会看到有一个service管理命令
docker service
2.2、然后输入docker service命令
如图所示:
![image-20220717163121561](D:\work\net-project\微服务专题\29、微服务部署-Docker(三)-应用\assets\image-20220717163121561.png)
2.3、创建服务
docker service create –replicas 1 – name productservice_service productservice_micro
–replicas 配置服务副本(容器在不同节点启动)
–name 服务名称
3.1 暴露服务(修改服务)
docker service update –publish-add 6066:80 productservice_service
2.4、列表服务
docker service ls
2.5、查看服务运行在哪个节点
docker service ps productservice_service
2.6、查看服务部署详细信息
docker service inspect –pretty productservice_service
2.7、服务动态伸缩(向其他节点添加服务副本)
docker service scale productservice_service=2
2.8、删除服务
docker service rm productservice_service
2.9、服务如何进行外部访问
docker service create –replicas 1 – name –publish 6066:80 productservice_service
–publish 发布端口例如 6066:80
2.10、进行网络访问
192.168.44.4:6066
192.168.44.6:8088
docker swarm运行Nginx镜像
条件
1、ydtnginx镜像
2、docker service
步骤
1、查看ydtnginx镜像
输入命令:docker images
![image-20220717163714982](D:\work\net-project\微服务专题\29、微服务部署-Docker(三)-应用\assets\image-20220717163714982.png)
2、如何使用docker service?
2.1、输出docker命令,会看到有一个service管理命令
docker service
2.2、然后输入docker service命令
如图所示:
![image-20220717163121561](D:\work\net-project\微服务专题\29、微服务部署-Docker(三)-应用\assets\image-20220717163121561.png)
2.3、创建服务
docker service create –replicas 1 – name ydtnginx_service ydtnginx
–replicas 配置服务副本(容器在不同节点启动)
–name 服务名称
3.1 暴露服务(修改服务)
docker service update –publish-add 8088:80 ydtnginx_service
2.4、列表服务
docker service ls
2.5、查看服务运行在哪个节点
docker service ps ydtnginx_service
2.6、查看服务部署详细信息
docker service inspect –pretty ydtnginx_service
2.7、服务动态伸缩(向其他节点添加服务副本)
docker service scale ydtnginx_service=2
2.8、删除服务
docker service rm ydtnginx_service
2.9、服务如何进行外部访问
docker service create –replicas 1 – name –publish 6066:80 ydtnginx_service
–publish 发布端口例如 8088:80
2.10、进行网络访问
192.168.44.4:6066
192.168.44.6:8088
docker swarm批量运行(商品微服务镜像/Nginx镜像)
条件
1、商品微服务镜像
2、Nginx镜像
3、docker-compose.yml
4、stack
1、查看rmcore镜像和nginx镜像
使用rmcore镜像来进行集群服务部署
2、如何使用docker stack?
1、输出docker命令,会看到有一个service管理命令
docker stack
2、然后输入docker stack命令
有很多的帮助命令
3、创建堆栈(服务集合)
1、创建一个stack目录(在当前目录/root下创建一个stack)
mkdir stack
2、配置yml文件
在原有docker.compose.yml增加配置
version: ‘3.4’
deploy: #集群模式配置
mode:
replicated #配置副本模式,gloab
replicas: 2 # 副本份数
3、创建stack
docker stack deploy -c docker-compose.yml rmstack
-c 是指定docker-compose.yml文件
rmcorestack 指定stack 标识(名称)
4、查看stack列表
docker stack ls
5、查看stack 服务列表信息
docker stack ps rmstack
或者 docker service ls
5、删除stack
docker stack rm rmstack
通过两个节点查看,所有的信息是否删除
version: '3.7'
services:
ydtnginx:
image: ydtnginx
ports:
- 8088:80
deploy:
mode:
replicated
replicas: 2
productservice:
image: productservice_micro
ports:
- 8090:80
deploy:
mode:
replicated
replicas: 2
6、进行网络访问
192.168.44.4:6066
192.168.44.6:6066
docker swarm service之间通信
条件
1、configs
2、docker-compose.yml
步骤
1、修改配置
version: '3.7'
services:
ydtnginx:
image: ydtnginx
ports:
- 8088:80
deploy:
mode:
replicated
replicas: 2
configs:
- source: ydtnginx_config_3
target: /usr/local/nginx/conf/nginx.conf
productservice:
image: productservice_micro
ports:
- 8090:80
deploy:
mode:
replicated
replicas: 2
configs:
ydtnginx_config_3:
file: /root/ydt/compose/nginx.conf
2、运行stack
docker stack deploy -c docker-compose.yml ydtmicroservice
docker swarm config实战
1、创建config
[root@tony02 ydt]# docker config create conf default.conf
je21ykql9tzebr0j2v7ep0kat
12
2、查看config
[root@tony02 ydt]# docker config ls
ID NAME CREATED UPDATED
je21ykql9tzebr0j2v7ep0kat conf 5 minutes ago 5 minutes ago
3、使用config
在conf配置中,将nginx的监听端口改成了88,替换掉nginx中的默认80端口的配置文件,创建service时,将容器内部端口88端口映射成主机上90端口
[root@tony02 ydt]# service create --replicas 1 --name ydtnginx_nginx --publish 6066:80 --config source=ydtnginx_config,target=/usr/local/nginx/conf/nginx.conf ydtnginx
pocy3ph88gy7ng9g2lbq9jvnw
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged