73.Docker的中级使用:服务和集群
2017-05-03 14:30
375 查看
服务
集群
转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/71123165
上面的YAML文件定义如下几个规则:
运行5个
如果某个实例失败,立即重启容器。
建立宿主机的80端口到容器的80端口的映射。
令
首先初始化集群服务:
先登录Docker Hub再运行服务,
通过如下命令查看容器运行情况:
浏览器访问主机的80端口,刷新几次浏览器可以发现Hostname是变化的,证明进行了负载均衡:
![](http://img.blog.csdn.net/20170503143231088?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTQ2NDA1NzIxNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170503143239135?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTQ2NDA1NzIxNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果要增加容器运行的实例数量,直接修改YAML文件,然后
停止运行应用:
查看所有的应用列表:
查看某个应用的所有服务:
查看某个应用运行的所有容器:
Swarm manager可以按不同策略运行容器,比如“空闲模式”——分配容器给利用率最低的机器,“全局模式”——确保每台机器都获得容器的一个运行实例。在Docker集群中,swarm manager起到管理作用,其余swarm worker仅仅起到扩容作用。
在swarm manager机器上使用
如果出现类似
worker加入集群后,在swarm manager上使用
如果集群中加入了新的机器,在swarm manager上重新运行
![](http://img.blog.csdn.net/20170507100425530?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTQ2NDA1NzIxNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
即HTTP请求无论发往哪个机器的80端口,通过负载均衡算法,均可将请求转发至集群内的所有容器。使能入口网络依赖集群中的节点开放如下端口:
网络发现依赖TCP/UDP的7946端口
Ingress网络依赖UDP的4789端口
接下来请继续阅读通过栈的方式在产品中使用Docker。
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!
集群
转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/71123165
服务
实际生产中使用docker run的方式启动容器是非常不易管理的,Docker提供了服务编排的功能可以方便扩展应用规模、配置流量负载均衡等。服务编排通过
docker-compose.yml(YAML文件的名字是任意的)定义,例如:
version: "3" services: web: image: hub.c.163.com/learndocker/learndocker:v1 deploy: replicas: 5 resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: on-failure ports: - "80:80" networks: - webnet networks: webnet:
上面的YAML文件定义如下几个规则:
运行5个
learndocker的实例作为名为
web的服务,每个实例限制最高使用10%的CPU和50M内存。
如果某个实例失败,立即重启容器。
建立宿主机的80端口到容器的80端口的映射。
令
web服务的5个容器通过名为
webnet的网络共享80端口。
webnet网络采用默认配置,即负载均衡。
首先初始化集群服务:
$ docker swarm init Swarm initialized: current node (<node ID>) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token <token> \ <ip>:<port> To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
先登录Docker Hub再运行服务,
learndocker是给应用启的名字:
# Written by: CSDN - Mars Loo的博客 $ docker login hub.c.163.com Username: marsloo Password: Login Succeeded $ docker stack deploy -c docker-compose.yml learndocker Creating network learndocker_webnet Creating service learndocker_web
通过如下命令查看容器运行情况:
# Written by: CSDN - Mars Loo的博客 $ docker stack ps learndocker ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS kymj866ml0n0 learndocker_web.1 hub.c.163.com/learndocker/learndocker:v1 localhost.localdomain Running Preparing about a minute ago cnebfmpfmoob learndocker_web.2 hub.c.163.com/learndocker/learndocker:v1 localhost.localdomain Running Preparing about a minute ago d6h6nlvqzb2x learndocker_web.3 hub.c.163.com/learndocker/learndocker:v1 localhost.localdomain Running Preparing about a minute ago i7ezt3v2veas learndocker_web.4 hub.c.163.com/learndocker/learndocker:v1 localhost.localdomain Running Preparing about a minute ago o32fpbvvdtdm learndocker_web.5 hub.c.163.com/learndocker/learndocker:v1 localhost.localdomain Running Preparing about a minute ago
浏览器访问主机的80端口,刷新几次浏览器可以发现Hostname是变化的,证明进行了负载均衡:
如果要增加容器运行的实例数量,直接修改YAML文件,然后
docker stack deploy -c docker-compose.yml learndocker即可,docker会增加相应的数量的容器,而不会影响已经运行的容器。
停止运行应用:
docker stack rm <appname>
查看所有的应用列表:
docker stack ls
查看某个应用的所有服务:
docker stack services <appname>
查看某个应用运行的所有容器:
docker stack ps <appname>
集群
Docker swarm适用于多机多容器场景,swarm指运行Docker且加入同一个集群的机器(物理机或虚拟机)的集合。在swarm manager执行命令,相当于在集群执行命令,其余机器的角色是swarm worker。加入集群后,机器称为节点。Swarm manager可以按不同策略运行容器,比如“空闲模式”——分配容器给利用率最低的机器,“全局模式”——确保每台机器都获得容器的一个运行实例。在Docker集群中,swarm manager起到管理作用,其余swarm worker仅仅起到扩容作用。
在swarm manager机器上使用
docker swarm init使能集群模式,然后在其他worker机器上使用类似如下命令加入集群:
# Written by: CSDN - Mars Loo的博客 docker swarm join \ --token <token> \ <ip>:<port> This node joined a swarm as a worker.
如果出现类似
Error response from daemon: rpc error: code = 14 desc = grpc: the connection is unavailable的错误,可能是由于防火墙引起的,解决方案是正确配置防火墙或关闭防火墙(为了应用安全,建议正确配置防火墙)。
worker加入集群后,在swarm manager上使用
docker stack deploy -c config.yml <appname>启动应用,然后使用
docker stack ps <appname>命令即可查看容器在集群中的分布情况:
# Written by: CSDN - Mars Loo的博客 $ docker stack ps learndocker ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS hff3wyl7ax3c learndocker_web.1 hub.c.163.com/learndocker/learndocker:v1 bogon Running Starting 2 seconds ago exxmh1oj8e1w learndocker_web.2 hub.c.163.com/learndocker/learndocker:v1 bogon Running Starting 1 second ago 6b2mnx6n9zal learndocker_web.3 hub.c.163.com/learndocker/learndocker:v1 centos7.bak Running Preparing 6 seconds ago qsv3sxschn1n learndocker_web.4 hub.c.163.com/learndocker/learndocker:v1 bogon Running Starting 1 second ago yr58eka5b7gs learndocker_web.5 hub.c.163.com/learndocker/learndocker:v1 centos7.bak Running Preparing 6 seconds ago
如果集群中加入了新的机器,在swarm manager上重新运行
docker stack deploy -c config.yml <appname>命令即可。通过集群方式部署服务后,通过两个节点的80端口均可访问服务,Docker底层通过入口网络(ingress network)实现此功能,入口网络图式如下:
即HTTP请求无论发往哪个机器的80端口,通过负载均衡算法,均可将请求转发至集群内的所有容器。使能入口网络依赖集群中的节点开放如下端口:
网络发现依赖TCP/UDP的7946端口
Ingress网络依赖UDP的4789端口
接下来请继续阅读通过栈的方式在产品中使用Docker。
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!
相关文章推荐
- 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务
- 使用Heartbeat在Linux搭建高可用(High-Availability)的集群服务
- 使用Docker搭建consul集群+registrator实现服务自动注册。
- 搭建及使用K8s集群 <使用ingress 暴露springcloud服务>
- 搭建Docker Swarm集群实战(二)(服务发现使用consul)
- 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务
- 离线部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大数据平台集群服务
- 使用RedisLive监控Redis集群服务
- 微服务:使用Eureka构建集群
- 离线部署 Cloudera Manager 5 和 CDH 5.12.1 及使用 CDH 部署 Hadoop 集群服务
- memcache集群服务:memagent配置使用
- Windows上运行Eclipse使用virtualbox搭建的Ubuntu的hadoop集群服务
- memcache集群服务:memagent配置使用
- 使用CM 5.3.x安装集群监控服务CMS.mp4
- 使用Docker搭建consul集群+registrator实现服务自动注册。
- 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务(DR模式
- 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法
- 搜索服务Solr集群搭建 使用ZooKeeper作为代理层
- (升级修改版1.1)集群配置(Torque安装配置+Maui安装配置+SSH免验证设置+节点共享目录(NFS服务)设置+NIS服务设置+用户硬盘空间限制和核心使用限制设置)异常详细版
- 离线部署 CDH 5.12.1 及使用 CDH 部署 Hadoop 大数据平台集群服务