1.  理解swarm

swarm(译:集群)

一个swarm是一组运行着Docker的机器,它们一起加入到一个集群。swarm中的机器既可以是物理机,也可以是虚拟机。在加入到一个swarm后,每台机器被称为一个节点。以前,我们执行docker命令由对应的机器去执行,而现在多台机器组成swarm后,命令由swarm manager去执行。

swarm manager 可以用多种策略来运行容器,比如“empties node”,用容器填充利用率最低的机器;或者“global”,它确保每台机器只获得指定容器的一个实例。

swarm manager 是在一个swarm中唯一能够执行你的命令的机器,或者授权其它机器以workers身份加入。Workers仅仅只是在提供生产能力,它没有权力告诉其他机器它能做什么和不能做什么。

到目前为止,你一直在本地机器上以single-host mode(单机模式)使用Docker。但是Docker也可以切换到swarm mode(群集模式),这就是启用群集的原因。启用群集模式将立即使当前机器成为swarm manager。从那时起,Docker将运行你所管理的swarm上执行的命令,而不仅仅是在当前机器上。

小结&回顾:

  • swarm就是集群,是Docker集群,它是一组运行着Docker的机器组成的
  • 组成Docker集群以后,集群中的每台机器被称之为一个node,其中有一台机器是这个集群的管理者,称之为manager,其余的称之为worker
  • 在集群中,你的命令都是由manager去执行的,这与你当前在那台机器上输入的命令无关
  • 与集群模式相对的是单机模式,之前我们一直是以单机模式使用Docker的
  • 类比Redis机器的话,manager就相当于master,worker相当于slave

2.  设置swarm

集群由多个节点组成,可以是物理节点,也可以是虚拟节点。

运行docker swarm init以启用群集模式,并且使当前的机器成为一个群集manager,然后在其它机器上运行docker swarm join,让它们作为worker加入到群集中。

3.  创建集群

首先,我们需要hypervisor来创建虚拟机。官方支持的是VirtualBox,因此首先要安装VirtualBox

https://www.virtualbox.org/wiki/Downloads

https://docs.docker.com/machine/drivers/

安装完以后,使用 docker-machine 命令来创建两个虚拟机

现在我们就有了两个虚拟机,分别是myvm1和myvm2,接下来可以通过 docker-machine ls 命令查看

我们可能看到这样的输出

有了虚拟机以后,接下来初始化集群并添加节点

第一台启动的机器是集群中的manager,它可以执行管理命令,并且授权其它的机器以worker身份加入到该集群中。

第二台启动的机器是worker

通过 docker-machine ssh 命令,可以远程登录到刚才我们创建的虚拟机上,就像我们在Linux系统上使用ssh远程登录一样

也就是说,通过 docker-machine ssh 我们可以与远程虚拟机通讯

还可以对虚拟机进行启动和停止操作

登录到虚拟机以后就可以像在本机上那样执行各种命令了,比如:

4.  部署应用到集群

前面我们也说过,只有集群中的manager才能执行命令,因此我们可以登录到myvm1上创建一个docker-compose.yml文件

当然最简单的是使用docker-machine scp命令从本地拷贝一个,比如:

语法格式如下:

现在,myvm1上有了docker-compose.yml文件,

于是,我们就可以在myvm1上执行 docker stack deploy -c docker-compose.yml getstartedlab 命令

应用已经部署到集群了,接下来我们可以访问任意机器,简单起见就不用浏览器访问了,直接curl

看下集群中是如何负载均衡的,默认策略是随机

查看一下stack,确实启动了5个服务实例

5.  完整演示

6.  备忘单

7.  文档

https://docs.docker.com/get-started/part4/

https://docs.docker.com/machine/reference/create/

Docker 集群的更多相关文章

  1. [经验交流] Apache Mesos Docker集群初探

    前言 因工作需要,我对基于Apache Mesos 的 Docker 集群作了一点研究,并搭建了一套环境,以下是资料分享. 1. Apache Mesos概述 Apache Mesos是一款开源群集管 ...

  2. Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)

    1. Mesos简介 1.1 Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理. Mesos主要由以下几部分组成: Master: 管理各Slave节点 S ...

  3. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  4. Docker集群实验环境布署--swarm【1 架构说明】

    在读完<Docker技术入门与实践>这本书后,基本上已对Docker了有一些入门的理解,以及我们为什么要使用Docker 答:我们发现在实际工作中,通过openstack一旦把一个VM创建 ...

  5. Docker 集群环境实现方式

    Docker 集群环境实现的新方式 近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展 ...

  6. Docker 集群环境实现的新方式

    近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展,加之企业业务需求的不断变化,紧随技 ...

  7. Docker Swarm搭建多服务器下Docker集群

    对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...

  8. 05 Docker集群/基础设施 - DevOps之路

    05 Docker集群/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Docker的集群目前主流的 ...

  9. k8s docker集群搭建

    一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器 ...

随机推荐

  1. 使用 Babylon.js 在 HTML 页面加载 3D 对象

    五一 Windwos Blogs 推了一篇博客, Babylon.js v3.2 发布了.因为一直有想要在自己博客上加载 3D 对象的冲动,这两天正好看到了,就动手研究研究.本人之前也并没有接触过 W ...

  2. VueJs(9)---vue-router(进阶1)

    vue-router 本文是基于官网学习,官网具体学习目录:vue-router 一.安装 基于vue-cli脚手架安装还是蛮简单的:在文件当前目录下运行: npm install vue-route ...

  3. CentOS6系列系统启动常见故障排查与解决方法

    情景一.内核文件损坏 /boot/vmlinuz-2.6.32-642.el6.x86_64 内核文件 1.故障现象 2.解决方法:挂载光盘,进入rescue(救援)模式 3.选择--English- ...

  4. 工作中常用的JS函数整理分享(欢迎大家补充)

    今年在渣X工作整理的常用JS函数 今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是 ...

  5. JaveScript基础(2)之数据类型转换和常用字符串的操作方法

    1.JaveScript数据类型转换: A.转字符串:通过"+"或toString(); PS:如果都是数值类型,'+'会进行求和运算,否则会做字符串连接: var s=2.5;d ...

  6. MySql中innodb存储引擎事务日志详解

    分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...

  7. 如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等

    之前一直不理解spring的一些基础特性是什么意思,虽然网上的解释也很多,但是由于我比较笨,就是看不懂,知道最近才稍微了解,下面就以通俗讲解的方式记录下来. 前言 假设我是一个没有开店经验的小老板,准 ...

  8. PAT1031:Hello World for U

    1031. Hello World for U (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Giv ...

  9. @SpringBootApplication注解理解

    @SpringBootApplication包含三个有用的注解,包括 @SpringBootConfiguration:看源码其实就是@Configuration,表示当前类是一个配置类,就像xml配 ...

  10. MAMP环境下为Mac OSX安装设置PHP开发环境

    一.简单介绍: PHP 页需要通过 Web 服务器处理.因此,要在 PHP 进行开发,您需要访问支持 PHP 的 Web 服务器和 MySQL 数据库.phpMyAdmin 也很实用,它是 MySQL ...