Docker入门六部曲——Swarm
原文链接:http://www.dubby.cn/detail.html?id=8738
准备工作
- 安装Docker(版本最低1.13)。
- 安装好Docker Compose,上一篇文章介绍过的。
- 安装好Docker Machine,上一篇文章也提到了,Mac和Windows已经预先安装了,但是Linux需要你自己安装。如果是Windows10,那么请使用Docker Toolbox。
- 阅读完Docker入门六部曲——基本引导。
- 阅读完Docker入门六部曲——容器。
- 阅读完Docker入门六部曲——服务。
- 确保你已经按照前几篇所介绍的,把你的镜像push到远端仓库了。
- 确保你的镜像可以正常的部署。
- 按照Docker入门六部曲——服务介绍的,写出了你的
docker-compose.yml
文件。
介绍
Docker入门六部曲——服务我们已经足额会了定义服务,并且伸缩服务的容量。
这一篇,你可以看到如何把应用部署到集群中去,运行在多个机器上。Swarm可以帮助我们在多容器,多机器上部署服务。
理解Swarm集群
Swarm就是一个运行着Docker的集群。并且,你还可以使用Docker名来控制这个集群,但是你只能对swarm manager下达命令。集群中的机器可以是真实的物理机,也可以是虚拟机。加入swarm之后,他们都是一个节点。
Swarm manager可以使用不同的策略来运行容器,例如“最空节点”策略——选择使用率最低的节点来运行容器;或者“全局”策略——每一个节点至少有一个镜像的容器。你可以在Compose文件里指定策略。
Swarm manager就是在这个集群中,你可以执行命令,或者授权其他工作节点加入的那个管理节点。工作节点就是那些只提供资源,但不能授权其他节点加入集群的节点。
配置你的swarm
一个swarm集群由很多个机器组成,不管是虚拟机还是物理机都可以。最简单的方式就是执行docker swarm init
来开启一个swarm节点,并且把当前执行命令的节点作为管理节点,然后在其他机器上执行docker swarm join
来加入这个swarm集群。
本地虚拟机(Mac,Linux,Windows7,Windows8)
为了简单,我们用虚拟机来完成swarm集群配置吧。你需要安装VirtualBox。
然后使用docker-machine
来创建几个虚拟机:
$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2
这个需要下载镜像,如果网络不好,请耐心等待。
现在,你本地已经有了两个虚拟机了,分别是myvm1和myvm2(可以使用docker-machine ls
查看)。我们准备把myvm1作为管理节点,myvm2作为工作节点。
我们可以使用docker-machine ssh
来登录虚拟机或者发送命令。我们先把myvm1初始化成管理节点吧:
$ docker-machine ssh myvm1 "docker swarm init"
Swarm initialized: current node <node ID> is now a manager.To add a worker to this swarm, run the following command:docker swarm join \--token <token> \<ip>:<port>
执行失败,提示要加
--advertise-addr
?
使用docker-machine ls
查看虚拟机,然后拷贝myvm1的ip,指定端口2377
,例如:
docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
初始化成功后,会返回一个提示信息,告诉你怎么加入这个集群。把这个命令拷贝下来,然后去myvm2执行:
$ docker-machine ssh myvm2 "docker swarm join \
--token <token> \
<ip>:<port>"This node joined a swarm as a worker.
注意:反斜线不能丢。
使用docker-machine ssh myvm1
可以登录到myvm1上,使用docker node ls
可以查看当前swarm集群中的所有节点:
docker@myvm1:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd myvm2 Ready Active
rihwohkh3ph38fhillhhb84sk * myvm1 Ready Active Leader
执行exit
退出登录,返回原来的机器。当然也可以直接发送命令:
docker-machine ssh myvm1 "docker node ls"
部署应用
你一定没有想到,最难的部分已经被你度过去了。现在我们只需要重复上一篇文章的的步骤就可以了。不过要记住,我们只可以在myvm1上执行dokcer命令,因为他才是管理节点。
把之前的docker-compose.yml
拷贝过来。使用docker-machine scp
上传到myvm1上:
docker-machine scp docker-compose.yml myvm1:~
我们要开始使用swarm来部署啦!同样还是docker stack deploy
:
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
结束了!
我们来查看一下容器吧:
$ docker-machine ssh myvm1 "docker stack ps getstartedlab"ID NAME IMAGE NODE DESIRED STATE
jq2g3qp8nzwx test_web.1 username/repo:tag myvm1 Running
88wgshobzoxl test_web.2 username/repo:tag myvm2 Running
vbb1qbkb0o2z test_web.3 username/repo:tag myvm2 Running
ghii74p9budx test_web.4 username/repo:tag myvm1 Running
0prmarhavs87 test_web.5 username/repo:tag myvm2 Running
注意:DESIRED 和STATE,第一次执行命令部署时,需要从远端仓库下载镜像,所以如果网络不好的话,会过一段时间才会是Running。
访问集群
你可以使用myvm1和myvm2任意一个ip来访问这个集群。这个集群内部的网络是共享的,而且是负载均衡的。可以使用docker-machine ls
查看ip。然后在浏览器中打开,不断的刷新,你会看到5个容器的id,因为是负载均衡的。
网络示意图:
伸缩应用
和上一篇文章的一样,你只需要修改docker-compose.yml
,然后重新执行docker stack deploy
就可以了,swarm会自动帮你调整。
你也可以再创建几个虚拟机,然后加入集群。再使用docker stack deploy
重新部署,swarm就会把新的节点利用起来了。
清扫战场
如果你想把应用给下掉:
docker-machine ssh myvm1 "docker stack rm getstartedlab"
如果想让工作节点脱离swarm集群:
docker-machine ssh myvm2 "docker swarm leave"
如果关闭管理节点:
docker-machine ssh myvm1 "docker swarm leave --force"
相关文章:

Ubuntu 查看磁盘空间大小命令转
df -hDf命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式:df -hl显示格式为: 文件系统 容量 已用 可用 已用% 挂载点 Filesystem Size Used Avail Use% Moun…

MSSQLid清零
truncate table [cellphone2016].[dbo].[tp_phone_9]转载于:https://www.cnblogs.com/wangchuang/p/5259615.html

Blender 3D插图插画设计视频教程 Fantastic 3D illustration with Blender
Blender 3D插图插画设计视频教程 Fantastic 3D illustration with Blender Blender 3D插图插画设计视频教程 Fantastic 3D illustration with Blender Blender 3D插图插画设计视频教程 Fantastic 3D illustration with Blender Brellias |时长:1h 30m |视频:H264 1920x1080 |音…

Linux搜索文件&搜索文件名&替换文件内容
locate是Linux系统提供的一种快速检索全局文件的系统命令,它并不是真的去检索所以系统目录,而是检索一个数据库文件locatedb(Ubuntu系置/var/cache/locate/locatedb),该数据库文件包含了系统所有文件的路径索引信息,所以查找速度很快。time结尾的选项,其单位为天,min结尾的选项其单位为分钟,这些选项的值都为一个正负整数, 如+7,表示,7天以前被访问过的文件,-7表示7天以内被访问过的文件,7表示恰好7天前被访问的文件。:快速返回某个指定命令的位置信息。

Lock和Synchronize区别详解
synchronized是Java中的一个关键字,当我们调用它时会从在虚拟机指令层面加锁,关键字为monitorenter和monitorexitLock是Java中的一个接口,它有许多的实现类来为它提供各种功能,加锁的关键代码为大体为Lock和unLock;synchronized可对实例方法、静态方法和代码块加锁,相对应的,加锁前需要获得实例对象的锁或类对象的锁或指定对象的锁。说到底就是要先获得对象的监视器(即对象的锁)然后才能够进行相关操作。

android usb 触摸屏 apk,Android插入USB设备,自动弹出提示运行apk
USB HOST模式开发下可能会遇到这个问题。第一步是在AndroidManifest.xml文件中修改,主意下面红色字体......一般调用的activity都是Main和Lanunch入口,加入上面的action后,在SDK中以Run As Android Application时,仅执行安装动作,…

sskeychain使用(轻量级框架)
原文地址:http://www.ithao123.cn/content-2407927.html keychain的主要功能就是帮助用户安全地记住他的密码,keychain保存的密码文件都是经过加密的,其它人不能直接通过打开keychain的文件获得保存在keychain中的密码。在mac上可以安装钥匙串…

如何在团队中做好Code Review
一、Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1、互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务开发团队,大家的技术能力、经验都是有差异的。 通过Code…

分布式服务框架 Zookeeper -- 管理分布式环境中的数据
2019独角兽企业重金招聘Python工程师标准>>> 转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题&am…

ubuntu18下配置VS Code
配置逻辑主要是 launch.json指定预先处理的任务(preLaunchTask)及读取build文件(program) tasks.json指定输入原始文件和输入build文件(args) 参考:https://www.cnblogs.com/JsonZhangAA/p/9750282.html launch.json中的配置 {"version": "0.2.0","co…

Blender钢铁机器人建模与动画全流程制作视频教程
Blender钢铁机器人建模与动画全流程制作视频教程 流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确) |大小:15.8 GB |时长:19.5小时 使用软件:…
android 模板 ui布局,Android UI布局
一、线性布局-LinearLayout(至上而下布局)其中android:orientation”vertical”意思为垂直方向的线性布局,此处的”vertical”可改为”horizontal”,意思是水平方向的线性布局。android:layout_width”match_parent”意思为这个控件的宽度占满整个屏幕或者父控件&am…

两数的加减乘除
设计思路: 首先要解决把输入的字符转化为计算的数字的问题,然后解决怎样用消息框输入输出即可。 程序流程图: 源代码: 实验结果: 转载于:https://www.cnblogs.com/wxyxxx/p/4859039.html

使用Docker搭建svn服务器教程
使用Docker搭建svn服务器教程 svn简介 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点…
SDK Instrumentation创建一个Note的实例
除了高层框架如Robotium的solo,我们也可以直接调用SDK底层的提供的Instrumentation的API来实现如前几篇文章描述的创建一个note的功能。总所周知之Robotium就是基于Instrumentation的框架高层抽象实现的一个项目,所以对比《Robotium创建一个Note的实例》…

UOJ #53.线段树区间修改
【题目描述】:如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x2.求出某区间每一个数的和 【输入描述】:第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个…

Blender三维插图设计视频教程 3D Characters and Illustrations in Blender 2.9
Blender三维插图设计视频教程 3D Characters and Illustrations in Blender 2.9 MP4 |视频:h264,1920x1080 |音频:aac,44100 Hz |时长:16h:06分钟|文件大小:4.75 GB 流派:电子学习|语言:英语 云桥网络 平台 获取 教程 本课程详细介绍了blender 4个案…

android mac测试地址,android获取有线网的Mac地址
Android TV开发中有的机器会接有线网,需要获取Mac地址,下面是我测试的两种Mac地址的获取方式。1.一共两个方法,目前第二个方法获取的不准,最后一位数取的不对。private String getMacAddress(){String strMacAddr null;try {Inet…

[高中作文赏析]感受冬天
转载于:https://www.cnblogs.com/zhangzujin/p/4864725.html

2022-2028年中国文化产业园投资分析及前景预测报告(全卷)
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国文化行业市场行业相关概述、中国文化行业市场行业运行环境、分析了中国文化行业市场行业的…

matlab 降维工具箱
Matlab Toolbox for Dimensionality Reduction降维方法包括:Principal Component Analysis (PCA) • Probabilistic PCA • Factor Analysis (FA) • Sammon mapping • Linear Discriminant Analysis (LDA) • Multidimensional scaling (MDS) • Isomap •…

程序还没写完只能当然计算器用,先发过来用着后面的慢慢写
真的是没办法,只好先发上来用着,后面的要先处理事情,等处理完接着写!! http://files.cnblogs.com/mari/starco.rar 这个是地址!!!转载于:https://www.cnblogs.com/mari/archive/2004/12/22/80317.html

Servlet生命周期与工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1&#…

ue4中面部动画制作视频教程 Facial Animation More In Unreal Engine 4
ue4中面部动画制作视频教程 Facial Animation & More In Unreal Engine 4 时长4h 包含项目文件 1920X1080 MP4 大小解压后:5.75G 语言:英语中英文字幕(根据原英文字幕机译更准确) 面部动画&虚幻引擎4中的更多内容 信息…

android c聊天功能,Android实现简单C/S聊天室应用
Android的网络应用:简单的C/S聊天室,供大家参考,具体内容如下服务器端:提供两个类创建ServerSocket监听的主类:MyServer.java负责处理每个Socket通信的线程类:ServerThread.java客户端:是一个Android应用程序>Multi…

docker 容器访问宿主机的解决方式
需求 基于本地docker的自研及使用需要,希望docker容器的服务能连接到宿主机提供的服务。 背景 网络上查阅了大量的资料,基本的解决办法是通过手动查阅IP的方式进行, 但docker宿主机的ip是会动态改变的,并不能保证永久不变。因此…

WinAPI: 输入光标相关的函数[3]
为什么80%的码农都做不了架构师?>>> 本例测试修改光标的形色, 效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 class(TForm)RadioGr…

用泛型方法Java从实体中提取属性值,以及在泛型方法中的使用
public <T> T getFieldValue(Object target, String fieldName, Class<T> typeName){try {Object fieldValue FieldUtils.readField(target, fieldName, true);return (T)fieldValue;} catch (IllegalAccessException e) {log.error("出错:实体类{}没有{}类型…

藤本植物和攀爬植物模型包 Globe Plants – Bundle 23 – Vines and Creepers 03 (3D Models)
藤本植物和攀爬植物模型包 Globe Plants – Bundle 23 – Vines and Creepers 03 (3D Models) 全球植物–第23束–藤本植物和攀缘植物03 (3D模型) 大小解压后:1.73G 云桥网络 平台huo取素材 这个捆绑包23包括15种3D藤本植物和攀缘植物,用于一般的景观…

蘑菇模拟器TV版 for Android,安卓NES模拟器TV版下载
NES Emulator TV精选了上千款经典的红白机小游戏,我们小时候玩过的经典游戏都能够在这里找到,每一款游戏在这里都能够分别存档,没有太多时间的上班族可以尝试一下,给玩家带来最好的游戏体验。软件简介NES模拟器精选上千款红白机游…