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
复制代码
  1. 第一台机器,执行命令设置为主节点
  2. 第二台机器,执行上图中倒数第二段的命令
  3. 然后回到第一台manager机器查看一下当前节点
  4. 剩下的几台机器依次执行同样的命令
  5. 再次查看第一台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
复制代码
  1. 举例: 执行命令 docker service create --name demo busybox sh -c"while true;do sleep 3600;done"
  2. 执行命令docker service ls查看,REPLICAS表示水平扩展
  3. 执行命令docker service ps demoNODE显示node3表示demo service在我们的第三台机器上
  4. 执行命令docker service scale=5,水平扩展5个相同的服务,此时REPLICAS是5/5,5/5是什么意思呢,第一个5是表示有多少个是ready(准备),第二个5是有多少个scheuld(分片实例
  5. 执行命令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
复制代码
  1. 执行命令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
  2. 查看service mysql部署情况 3.执行命令docker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network demo wordpress
  3. 执行命令docker service ps wordpressdocker ps查看wordpress部署情况

swarm 底层机制会同步网络的创建,因为它要实现多个节点之间容器的通信。

swarm集群服务间通信

  1. docker network create -d overlay demo创建名为demo的docker network

  2. 执行命令docker service create --name whoami -p 8000:8000 --network demo -d jwilder/whoami

  3. 执行命令docker service lsdocker service ps whoami查看,可以看出service在当前机器上

  4. 执行命令curl 127.0.0.1:8000,结果返回了host name

  5. 执行命令docker service create --name client -d --network demo busybox sh -c "while true;do sleep 4600;done"

  6. 执行命令docker service lsdocker service ps client查看,可以看出service在另一台机器上

  7. 查看并进入service client

  8. 看到可以ping通whoami主机地址,但是主机地址显示10.0.0.7,很显然这不是真是的ip地址

  9. 进入service whoami机器执行docker service scale whoami=2,横向扩展2个

  10. 再次重复第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进行负载均衡
  1. 使用之前的例子service whoami,NODE分别在swarm-manager、swarm-manager2两台机器上
  2. 可以发现每次都会返回不同的host name,负载均衡
  3. 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(六)相关推荐

  1. 浅述 Docker 的容器编排

    作者 | 天元浪子 来源 | CSDN博客 概述 作为容器引擎,Docker为容器化的应用程序提供了开放标准,使得开发者可以用管理应用程序的方式来管理基础架构,实现快速交付.测试和部署代码.随着容器的 ...

  2. Docker学习(六):docker compose容器编排

    Docker-compose 实现对容器集群的快速编排 多服务部署的管理工具 定义docker-compose.yml文件,写好容器之间的调用关系,通过命令完成多个容器的同时启动关闭 解决了容器与容器 ...

  3. Docker compose 容器编排

    1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...

  4. Docker Compose 容器编排基础使用

    Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务.然后,使用一个命令,就可以从 YML 文件配置中创建并启 ...

  5. Docker Compose容器编排

    Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用.你需要定义一个 YAML 格式的配置文件docker-compose.yml, 写好多个容器之间 ...

  6. 这就是你日日夜夜想要的docker!!!---------Docker Compose容器编排理论+实操

    文章目录 一.Compose简介 1.在Compose中有两个重要的概念 2.docker,dockerfile与docker-compose区别 二.Compose安装与卸载 1.Centos系统安 ...

  7. docker Swarm容器编排工具

    目录 一.什么是docker swarm 二.Docker Swarm 基本结构 三.Swarm的几个关键概念 四.swarm的调度策略 五.Swarm Cluster模式特性 六.搭建docker ...

  8. 1.07 容器编排docker Swarm

    1.编排swarm简介 学习怎么将docker用于生产环境,前面学的是用于本地测试环境 之前学的是通过docker客户端连接安装好docker的linux机器,如下图 生产环境下机器和容器都非常多,怎 ...

  9. K8S精华问答 | Kubernetes用的是Docker的容器?

    kubernetes,简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,目标是让部署容器化的应用简单并且高,并提供了应用部署,规划,更新,维护的一种机制.今天,我们就来看看关于K8S ...

最新文章

  1. python3与python2的编码问题
  2. 从JavaScript函数重名看其初始化方式
  3. 第五章 软件下载与安装(二、Ubuntu安装Mininet)
  4. js含有特定文字不能跳转
  5. linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)
  6. Java并发:Callable、Future和FutureTask
  7. yolo算法python代码_深度学习目标检测系列:一文弄懂YOLO算法|附Python源码
  8. EXCEL实现自动填充
  9. edm java_EDM推送
  10. MacBook外接显示器的显示模式介绍及设置说明(分屏/多屏)
  11. [JZOJ5987] 仙人掌毒题
  12. mysql多表查询分页面_mysql多表联合查询分点经验给大家
  13. 《指数基金投资指南》笔记整理
  14. 附录002《 Git 中的重要概念》
  15. OpenSSL心血漏洞分析
  16. JDK1.8新特性:lambda表达式
  17. 首篇NLP领域图神经网络综述:127页,从图构建到实际应用面面观
  18. 软件开发技术,自学靠谱吗?
  19. 能批量管理大量电脑文件的工具
  20. H3CSE路由-路由过滤

热门文章

  1. 安防行业为何缺少真正适用的AI芯片?
  2. AI教父杰弗里辛顿:AI反学习可能揭开人类梦境的奥秘
  3. 颠覆性技术丨无人驾驶
  4. 机器视觉成熟技术,推进“机器换人”步伐。
  5. 浅谈机器学习在市场营销中的应用
  6. 巨变的时代、人工智能AI带来颠覆性的影响、技术十大趋势
  7. python内置函数:iter、enumerate和next
  8. The following packages will be SUPERCEDED by a higher-priority channel
  9. UC伯克利发现「没有免费午餐定理」加强版:每个神经网络,都是一个高维向量...
  10. 游戏的「隐藏身份」:AI与现实世界的「王牌训练师」