从主机的层面来看,docker swarm管理的是docker host集群。

什么是集群?

服务器集群由一组网络上相互连接的服务器组成,他们一起协同工作。

一个集群和一堆服务器的显著区别是:

集群能够像单个系统那样工作,同时提供高可用,负载均衡和并行处理。

这样,部署应用的时候,我们只考虑需要多少的内存和CPU,而不是考虑会使用哪台服务器的内存和CPU。我们不应该关心应用部署在哪里,我们应该关心运行这些应用需要哪些资源,然后将它部署到集群,集群管理程序(比如:docker swarm)会搞定这些细节。

集群整体容量的调整是通过集群中添加和删除主机节点实现的。但不管怎样的操作,集群始终还是一个整体

从今天开始,我们将重点学习docker swarm,我们会创建docker swarm集群,部署应用,伸缩扩展应用,以及对应用执行滚动升级

docker swarm Mode

docker v1.12是一个非常重要的版本,Docker重新实现了集群编排方式。再此之前,提供集群功能的docker swarm是一个单独的软件,而且依赖外部数据库(比如:consul。etcd。zookeeper)

从v1.12开始,docker swarm的功能已经完全与docker engine集成,要管理集群,只需要启动swarm mode。安装好docker ,swarm就已经在那里了,服务发现也已经在那里了(不需要安装consul等外部数据库)

相比kubnetes,用docker swarm创建集群非常简单,不需要额外安装任何软件,也不需要做任何额外的配置。

swarm

swarm是运行docker engine的多个主机组成的集群

从v1.12开始,集群管理和编排功能已经集成在docker engine。当docker engine初始化了一个swarm或者加入到一个存在的swarm时,他就启动了swarm mode。

没启动swarm mode时,docker 执行的是容器的命令;运行swarm mode后,docker 增加了编排service的能力

docker 允许在同一个docker 主机上即运行swarm service,又运行单独的容器。

node

swarm中每个docker engine都是一个node,有两种类型的node:manager和worker

为了向swarm中部署应用,我们需要在manager node上执行部署命令,manager node会将部署任务拆解并分配给一个或多个worker node完成部署。

manager node负责执行编排和集群管理工作,保持并维护swarm处于期望的状态。swarm中如果有多个manager node,他们会自动协商,并选举出一个leader执行编排任务。

worker node接受并执行由manager node派发的任务。默认配置下manager node同事也是一个worker node,不过可以将其配置成manager-only node,让其专门负责编排和集群管理工作。work node会定期向manager node报告自己的状态和他正在执行的任务的状态,这样manager就可以维护整个集群的状态。

service

service定义了worker node上要执行的任务。

swarm主要编排任务就是保证service处于期望的状态。

举个service例子:

在swarm中启动一个http服务,使用的镜像是httpd:latest,副本数为3

manager node负责创建这个service,经过分析知道需要启动3个httpd容器,根据当前各worker node的状态将运行容器的任务分配下去,比如worker1上运行两个容器,worker2上运行两个容器。

运行了一段时间,worker2突然宕机了,manager监控到这个故障,于是立即在worker3上启动一个新的httpd容器

这样就保证了service处于期望的三个副本状态

centos7下安装docker(20.docker swarm start)的更多相关文章

  1. Centos7下安装与卸载docker应用容器引擎

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  2. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

  3. Docker学习之Centos7下安装

    Docker学习之Centos7下安装 centos7 64下直接使用yum安装docker环境,步骤如下: 卸载旧版本docker sudo yum remove docker docker-com ...

  4. CentOS7下安装docker(Docker系列1)

    CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...

  5. centos7下安装docker与镜像加速

    1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...

  6. Docker学习笔记3:CentOS7下安装Docker-Compose

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip,请参考我的另一篇博文CentOS7下安装python-p ...

  7. centos7 下安装rpm的mysql 5.7

    在centos7下安装mysql5.7 一:下载mysql 去官网上去下载:这里我下载的二进制格式的 https://dev.mysql.com/downloads/mysql/ 去下载对应平台的my ...

  8. CentOS7 下 安装 supervisor以及使用

    CentOS7 下 安装 supervisor 以及使用 手动安装 [注] linux环境必须安装 python 1.获取supervisor包:[https://pypi.python.org/py ...

  9. Linux CentOs7 下安装 redis

    Linux CentOs7 下安装 redis 请将以下命令放入linux命令行中运行 如果安装过程前没有安装GCC请先安装  命令如下 $ yum install gcc-c++ $ wget ht ...

  10. Centos7下安装配置Redsocks

    Redsocks是一个开源的网络程序,代码依赖开源的libevent网络库.Redsocks允许你将所有TCP连接重定向到SOCKS或HTTPS代理,比如Shadowsocks(Centos7下安装配 ...

随机推荐

  1. List集合遍历整理

    遍历List集合的三种方式 0. 首先准备测试数据 List<String> list = new ArrayList<String>(); list.add("Ja ...

  2. JavaAndroid项目结构

    使用Java的Android项目的结构 src: 源码文件夹 gen: 自动生成的源码文件夹 assets: 资产目录 bin: 编译生成的文件目录(apk等) libs: jar包 res: 资源文 ...

  3. 全面掌握Node命令选项

    全面掌握Node命令选项 译者按:作为Node.js开发者,有必要全面了解一下节点命令的所有选项,这样在关键时刻才能得心应手. 原文:掌握Node.js的CLI和命令行选项 译者:Fundebug 为 ...

  4. 浅谈css中的盒模型(框模型)

    css中的盒模型是css的基础,盒模型的理解可以帮助我们进行对样式进行修改.废话不多说,进入正题: 在w3c中,CSS 框模型 (Box Model) 规定了元素框处理元素内容.内边框.边框 和 外边 ...

  5. js 判断数组中是否有某值

    function arrHasValue(v, arr) { var output = false; for (var i in arr) { if (v == arr[i]) { output = ...

  6. P2590 [ZJOI2008]树的统计

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u ...

  7. 微信小程序心得

    首先从官方文档给的框架说起,微信小程序官方文档给出了app.js, app.json, app.wxss. 先从这三个文件说起. - app.js 这个文件是整个小程序的入口文件,开发者的逻辑代码在这 ...

  8. 二路归并算法的java实现

    “归并”的含义是将两个或者两个以上的有序表组合成一个新的有序表. 假设待排序表含有n个元素,则可以看成是n个有序的子表,每个子表的长度为1,然后两两归并,得到(n/2)或者(n/2+1)个长度为2或1 ...

  9. ViewPager结合view无限滑动

    使用viewPager进无限滑动,这里的实现是在适配器里面进行,当然在外头使用滑动监听也行. import android.support.v4.view.PagerAdapter; import a ...

  10. Synchronized 和 Lock 锁在JVM中的实现原理以及代码解析

    一.深入JVM锁机制:synchronized synrhronized关键字简洁.清晰.语义明确,因此即使有了Lock接口,使用的还是非常广泛.其应用层的语义是可以把任何一个非null对象作为&qu ...