从主机的层面来看,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. 关于laravel5 消息订阅/发布的理解初

    laravel5.4感觉官网文档说滴不够详细...安装predis官网很详细,这里略过.... 生成命令 直接使用 Artisan 命令 make:command,该命令会在 app/Console/ ...

  2. struts2_struts2基本配置

    基本配置 1.新建web项目 2.导入jar包 struts2所需jar包下载: https://files.cnblogs.com/files/aihuadung/struts%E6%89%80%E ...

  3. 阿里云oss,简单上传

    描述:oss比较方便,省去了自己搭建文件服务器的时间,价格比较便宜,下面是java基于oss的简单上传代码 a.添加maven依赖 <dependency> <groupId> ...

  4. Java中的匿名内部类及内部类的二三事

    匿名内部类适合创建那些只需要使用一次的类,它的语法有些奇怪,创建匿名内部类会立即创建一个该类的实例,这个类定义立即消失,且不能重复使用. 定义匿名类的格式如下: new 实现接口() |父类构造器(实 ...

  5. springboot 开发 Tars

    1,创建 springboot 项目,并在启动类添加 @EnableTarsServer 注解 @SpringBootApplication @EnableTarsServer public clas ...

  6. Android udp json+数组 --->bytes发送数据

    Android  json支持五种数据类型 String / int(float)/bool / null  / object 今天说 object  : json = new JSONObject( ...

  7. Flutter 布局(一)- Container详解

    本文主要介绍Flutter中非常常见的Container,列举了一些实际例子介绍如何使用. 1. 简介 A convenience widget that combines common painti ...

  8. 应用生命周期终极 DevOps 工具包

    [编者按]本文作者为 Kevin Goldberg,主要介绍了在开发.运营应用的完整生命周期当中,可能用到的 DevOps 工具大集合.文章系 OneAPM 工程师编译整理. DevOps工具包中合适 ...

  9. websocket后台数据推送

    Websocket定义: 说明: 作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等等.这其中有“Web 的 TCP ...

  10. 洗礼灵魂,修炼python(91)-- 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

    首先你得学会基本的mysql操作语句:mysql学习 其次,python要想操作mysql,靠python的内置模块是不行的,而如果通过os模块调用cmd命令虽然原理上是可以的,但是还是不太方便,那么 ...