Docker 多容器编排Swarm(六)
docker swarm简介
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。
docker swarm 体系结构如如所示:
一个Manager下面有多个Worker(实际运行中每个都是一个container)
下图是一个Service和Replicas(复制品)模型图, service是nginx,但是下面有3个replicas nginx构成了一个集群
如何创建swarm集群
swarm node节点的分配是默认随机,起初我们是不知道的
docker swarm --help #查看帮助
docker swarm init --advertise-addr=198.168.205.10 #初始化一个docker swarm manager
docker node ls
复制代码
- 第一台机器,执行命令设置为主节点
- 第二台机器,执行上图中倒数第二段的命令
- 然后回到第一台manager机器查看一下当前节点
- 剩下的几台机器依次执行同样的命令
- 再次查看第一台manager机器,会发现已经有3个docker swarm node 至此,一个简单的docker swarm集群创建完成
创建维护和水平扩展
docker service create --help
docker service ls #查看所有
docker service scale #水平扩展
docker service scale [serviceName] = [num] #设置service(container)数目
docker service ps [serviceNmae] #查看当前service详细
docker ps
复制代码
- 举例: 执行命令
docker service create --name demo busybox sh -c"while true;do sleep 3600;done"
- 执行命令
docker service ls
查看,REPLICAS表示水平扩展 - 执行命令
docker service ps demo
NODE显示node3表示demo service在我们的第三台机器上 - 执行命令
docker service scale=5
,水平扩展5个相同的服务,此时REPLICAS是5/5,5/5是什么意思呢,第一个5是表示有多少个是ready(准备),第二个5是有多少个scheuld(分片实例 - 执行命令
docker service ps demo
可以看到该servie所有部署情况
第一台机器,也就是Docker Swarm Manange执行docker service rm demo
命令后,则以上创建的service demo 的container全部销毁,可以执行docker service ps demo
, docker ps
再次查看详情。
实战-swram集群里部署wordpress
docker network create -d overlay demo #创建名为demo的docker network
docker network ls #查看
docker exec [containerID] ip a #查看容器ip
复制代码
- 执行命令
docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress --network demo --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysq
- 查看service mysql部署情况 3.执行命令
docker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network demo wordpress
- 执行命令
docker service ps wordpress
,docker ps
查看wordpress部署情况
swarm 底层机制会同步网络的创建,因为它要实现多个节点之间容器的通信。
swarm集群服务间通信
docker network create -d overlay demo
创建名为demo的docker network执行命令
docker service create --name whoami -p 8000:8000 --network demo -d jwilder/whoami
执行命令
docker service ls
,docker service ps whoami
查看,可以看出service在当前机器上执行命令
curl 127.0.0.1:8000
,结果返回了host name执行命令
docker service create --name client -d --network demo busybox sh -c "while true;do sleep 4600;done"
执行命令
docker service ls
,docker service ps client
查看,可以看出service在另一台机器上查看并进入service client
看到可以ping通whoami主机地址,但是主机地址显示10.0.0.7,很显然这不是真是的ip地址
进入service whoami机器执行
docker service scale whoami=2
,横向扩展2个再次重复第7、8步,还是同样的结果,其实这个一个vip(虚拟IP),可以使用
nslookup
命令查看DNS在部署了service whoami的机器上执行
docker exec [containerID] ip a
查看对应的容器IP地址,即可知道真实IP,VIP(虚拟IP)不会经常变动,机器IP可能变动
此时多次执行命令curl 127.0.0.1:8000
,会发现每次返回的host name可能会变,这是因为已经提供了负载均衡功能了。
Internal Load Balancing 图:
DNS+VIP+iptables+LVSRouting Mesh的两种体现
- Internal——Container和Container之间的访问通过overlay网络(通过VIP虚拟ip)
- Ingress——如果服务有绑定接口,则此服务可以通过任意swarm节点的相应接口访问
上述的操作分别采用了这2种方式
Ingress负载均衡
- 外部访问的负载均衡
- 服务端口被暴露到各个swarm节点
- 内部通过IPVS进行负载均衡
- 使用之前的例子service whoami,NODE分别在swarm-manager、swarm-manager2两台机器上
- 可以发现每次都会返回不同的host name,负载均衡
- swarm-manager1没有service whoami,也能访问
swarm-manager1执行sudo iptables -nL -t nat
查看转发规则
执行ip a
可以看出在同一网段 2. brctl show
3. docker network ls
docker network inspect docker_gwbridge
4. docker_gwbridge 具体内容 5. sudo ls /var/run/docker/netns
sudo nsenter --net=/var/run/docker/netns/ingress_sbox
6. iptables -nL -t mangle
,白色处具体是做负载均衡的 7. 下载LVS管理工具,yum install ipvsadm
8. 再次进入root,执行ipvsadm -l
Ingress Network的数据包走向详情
Docker 多容器编排Swarm(六)相关推荐
- 浅述 Docker 的容器编排
作者 | 天元浪子 来源 | CSDN博客 概述 作为容器引擎,Docker为容器化的应用程序提供了开放标准,使得开发者可以用管理应用程序的方式来管理基础架构,实现快速交付.测试和部署代码.随着容器的 ...
- Docker学习(六):docker compose容器编排
Docker-compose 实现对容器集群的快速编排 多服务部署的管理工具 定义docker-compose.yml文件,写好容器之间的调用关系,通过命令完成多个容器的同时启动关闭 解决了容器与容器 ...
- Docker compose 容器编排
1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...
- Docker Compose 容器编排基础使用
Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务.然后,使用一个命令,就可以从 YML 文件配置中创建并启 ...
- Docker Compose容器编排
Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用.你需要定义一个 YAML 格式的配置文件docker-compose.yml, 写好多个容器之间 ...
- 这就是你日日夜夜想要的docker!!!---------Docker Compose容器编排理论+实操
文章目录 一.Compose简介 1.在Compose中有两个重要的概念 2.docker,dockerfile与docker-compose区别 二.Compose安装与卸载 1.Centos系统安 ...
- docker Swarm容器编排工具
目录 一.什么是docker swarm 二.Docker Swarm 基本结构 三.Swarm的几个关键概念 四.swarm的调度策略 五.Swarm Cluster模式特性 六.搭建docker ...
- 1.07 容器编排docker Swarm
1.编排swarm简介 学习怎么将docker用于生产环境,前面学的是用于本地测试环境 之前学的是通过docker客户端连接安装好docker的linux机器,如下图 生产环境下机器和容器都非常多,怎 ...
- K8S精华问答 | Kubernetes用的是Docker的容器?
kubernetes,简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,目标是让部署容器化的应用简单并且高,并提供了应用部署,规划,更新,维护的一种机制.今天,我们就来看看关于K8S ...
最新文章
- python3与python2的编码问题
- 从JavaScript函数重名看其初始化方式
- 第五章 软件下载与安装(二、Ubuntu安装Mininet)
- js含有特定文字不能跳转
- linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)
- Java并发:Callable、Future和FutureTask
- yolo算法python代码_深度学习目标检测系列:一文弄懂YOLO算法|附Python源码
- EXCEL实现自动填充
- edm java_EDM推送
- MacBook外接显示器的显示模式介绍及设置说明(分屏/多屏)
- [JZOJ5987] 仙人掌毒题
- mysql多表查询分页面_mysql多表联合查询分点经验给大家
- 《指数基金投资指南》笔记整理
- 附录002《 Git 中的重要概念》
- OpenSSL心血漏洞分析
- JDK1.8新特性:lambda表达式
- 首篇NLP领域图神经网络综述:127页,从图构建到实际应用面面观
- 软件开发技术,自学靠谱吗?
- 能批量管理大量电脑文件的工具
- H3CSE路由-路由过滤
热门文章
- 安防行业为何缺少真正适用的AI芯片?
- AI教父杰弗里辛顿:AI反学习可能揭开人类梦境的奥秘
- 颠覆性技术丨无人驾驶
- 机器视觉成熟技术,推进“机器换人”步伐。
- 浅谈机器学习在市场营销中的应用
- 巨变的时代、人工智能AI带来颠覆性的影响、技术十大趋势
- python内置函数:iter、enumerate和next
- The following packages will be SUPERCEDED by a higher-priority channel
- UC伯克利发现「没有免费午餐定理」加强版:每个神经网络,都是一个高维向量...
- 游戏的「隐藏身份」:AI与现实世界的「王牌训练师」