从主机的层面来看,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. 35.QT-多线程

    程序和进程的区别 进程是动态的,程序是静态的,进程是程序运行时的实例,是占用系统运行资源的程序 进程是暂时的,程序是永久的, 进程是通过程序运行时得到的 程序是一个数据文件,进程是内存中动态的运行实体 ...

  2. 5. CopyOnWriteArrayList 的适用场景

    package com.gf.demo04; import java.util.ArrayList; import java.util.Collections; import java.util.It ...

  3. Java学习笔记之——常用类

    Random,String,Math 1.Random Random()  创建一个新的随机数生成器 案例:产生3个5-10的随机数 运行结果 注意:   2.StingBuffer,StringBu ...

  4. mysql基础整理01

    在终端或命令行中和数据库软件建立连接 mysql -uroot -p 数据库相关SQL 查看所有数据库 show databases; 创建数据库 create database 数据库名; crea ...

  5. Mac包管理神器Homebrew

    概念 简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,相当于Red hat的yum.Ubuntu的apt-get. 安装命令 ruby -e "$( ...

  6. spring-framework-中文文档三:依赖注入DI

    5.4依赖性 典型的企业应用程序不包含单个对象(或Spring的说法中的bean).即使最简单的应用程序也有几个对象一起工作来展示最终用户将其视为一个连贯的应用程序.下一节将介绍如何从定义许多独立的b ...

  7. 抛弃console.log(),拥抱浏览器Debugger

    译者按: 切换成本真的不高,建议使用开发者工具来Debug! 原文:How to stop using console.log() and start using your browser's deb ...

  8. 类修饰符为abstract与final

    类修饰符为abstract:这个类可以被继承,因此可以通过子类来产生实例. 类修饰符为final:这个类不能被继承. 类修饰符不能同时为abstract.final:编译器会提示: 非法的修饰符组合: ...

  9. CSS效果:CSS改变下拉列表select框的默认样式

    原理 原理是将浏览器默认的下拉框样式清除,然后应用上自己的,再附一张向右对齐小箭头的图片即可.当然右侧的小箭头可以用伪元素before或者after来实现. select { /*Chrome和Fir ...

  10. git 入门教程之本地仓库

    本地仓库 背景 创建工作目录 平时工作时我们习惯对文档分门别类进行管理,.doc .txt 等文本类型的文件习惯存在 doc文件下,开发java js 等源代码文件存在在 src 目录下,这一点很好理 ...