回到目录

Swarm概念

  Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用go语言来完成开发,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。
  Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息.

Swarm结构图

Swarm的基本命令

docker node 用来显示集群的节点,默认建立时只有一个节点,当然也就谈不上高可用了,可以使用docker node --help来查看所有node参数

集群初始化 docker swarm init

当已经被初始化后,就不能重新执行这个操作了,使用docker node ls 来查看刚建立的集群

集群中的管理节点和工作节点功能图

添加管理节点 docker swarm join

Docker Swarm 命令中还需要添加一些选项:

* join:表明一个新的节点将被添加进 Swarm

* –manager:表明节点的性质(manager vs worker)

* –listen-addr:让一个新添加的节点可以访问 Swarm 内的其他节点

* 最后的参数就是第一管理节点的地址(即这一命令将被送到的那个节点)

注意:由于 –auto-accept manager 选项会在 Swarm 初始化的过程中被提供,所以第二管理节点会被自动接受。如果没有这一选项,那么第二管理节点需要被第一管理节点手动接受。

$ MANAGER2_IP=$(docker-machine ip manager2)
docker-machine ssh manager2 docker swarm join --manager --listen-addr $MANAGER2_IP:2377 $MANAGER1_IP:2377

Swarn部署时使用的脚本,来自网络

下面是一小段用来创建 Docker 主机并部署 Swarm 的 Shell 脚本。当然了,管理/工作节点的数字都是可以随意改动的。
注意:创建两个管理节点和两个工作节点,仅仅是用来作示范。在工业生产中,我们可能需要在集群里搭建 3 个管理节点和 5 个工作节点。

# Define the number of managers/workers
MANAGER=
WORKER= # Create the Docker hosts
for i in $(seq $MANAGER); do docker-machine create --driver virtualbox manager$i; done
for i in $(seq $WORKER); do docker-machine create --driver virtualbox worker$i; done # Init the swarm
docker-machine ssh manager1 docker swarm init --auto-accept manager --auto-accept worker --listen-addr $(docker-machine ip manager1): # Add additional manager(s)
for i in $(seq $MANAGER); do docker-machine ssh manager$i docker swarm join --manager --listen-addr $(docker-machine ip manager$i): $(docker-machine ip manager1):; done # Add workers
for i in $(seq $WORKER); do docker-machine ssh worker$i docker swarm join --listen-addr $(docker-machine ip worker$i): $(docker-machine ip manager1):; done

对于上面文章中,只提到了集群,而没有谈到如何去使用,在建立集群后,服务的部署我们可以用

docker stack deploy  -c test.yml test

下面给出自己写的一个服务,版本3的

version: ""

services:
loggerapi:
image: logger.api
build:
context: ./src/Logger.Api
dockerfile: Dockerfile
ports:
- "5000:80"
networks:
- ingress loggermanager:
image: logger.manager
build:
context: ./src/Logger.Manager
dockerfile: Dockerfile
ports:
- "5050:80"
networks:
- ingress networks:
ingress:

这里有个服务要注意,服务的名称一定不能有点,如logger.manager这是错误的!

来建立一个服务,同时可以使用docker service来查看已经运行的服务!

还有一点要注意,yml在进行v3版后,不再支持build,也就是说,你需要先把镜像建立好才行!

回到目录

最新文章

  1. 2MyBatis入门--深入浅出MyBatis技术原理与实践(笔记)
  2. Mesh Data Structure in OpenCascade
  3. 【BZOJ 3050】【USACO2013 Jan】Seating 线段树
  4. jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用
  5. c 深度剖析 6
  6. JDBC连接各种数据库的方法(经典)
  7. patch与diff的恩怨
  8. SQL Server 2014 64位版本链接32位Oracle数据库
  9. web项目错误页面友好处理404,500等
  10. ceph rbd 封装api
  11. IIS中报错弹出调试,系统日志-错误应用程序名称: w3wp.exe,版本: 8.5.9600.16384,时间戳: 0x5215df96(360主机卫士)
  12. django - 总结 - form表单
  13. 使用shell解析脚本依赖关系,并自动补数
  14. Matrix 高斯消元Gaussian elimination 中的complete pivoting和partial pivoting
  15. asp:LinkBtton PostBackUrl 中文乱码
  16. linux系统编程:cp的另外一种实现方式
  17. android开发资源
  18. LeetCode: Minimum Path Sum 解题报告
  19. openstack部署心得
  20. zookpeer应用和zkclient实践

热门文章

  1. BootStrapTable获取选中数据值并传参至父页面
  2. ThreadPoolExecutor简介
  3. 【BZOJ 3534】: [Sdoi2014]重建
  4. bzoj 4173 打表???
  5. 分布式系统关注点(17)——先写DB还是「缓存」?
  6. safari 浏览器 input textarea select 等不能响应用户输入
  7. tcp套接字粘包解决办法
  8. php session序列化攻击面浅析
  9. SpringBoot进阶教程(二十七)整合Redis之分布式锁
  10. VS2017、VS2019没有Setup安装项目(Visual Studio Installer)_解决方案