Docker学习笔记#5

一、介绍

docker swarm是创建服务器集群的工具,只需要几条命令就可以创建一个服务器集群。它内置一些服务器集群需要的工具,比如说:服务查找,网络,负载均衡等等。

docker swarm
先初始化一个集群(docker swarm init),然后让服务器加入到这个集群里面(docker swarm join),这样就可以在这个集群服务器上面与创建服务(docker service create),一个服务可以用一个或多容器来支持,容器之间会通过overlay网络类型进行通信。每一个服务器节点都知道这个集群里的其他服务器,如果某一个服务器节点出了问题,docker会将出了问题的服务器上面运行的容器,转移到集群里的其他服务器上面。我们不需要配置容器之间和服务器之间的负载均衡,因为它是docker swarm内置的功能。

二、集群

我在本地使用虚拟机创建了3个Linux系统的虚拟机,模拟三台服务器(node1[192.168.33.10], node2[192.168.33.11], node3[192.168.33.12])。

nodes

1. 创建集群 - swarm init##

首先进入到node1中,初始化一个集群:

docker swarm init --advertise-addr 192.168.33.10:2377
swarm init

说明:192.168.33.10是node1的ip地址,--advertise-addr选项是设置监听的IP和端口号。执行完,看到提示「集群已经初始完,当前节点是管理员」表示初始化成功。后面还有添加woker节点的指示和命令。

docker swarm join \\
     --token SWMTKN-1-6cqcc65jtfmldojryxg7s4rpljekcdrobz288mycgyu12gfxlf-bg27cxk75qhbgwjngxn500lqg \\
     192.168.33.10:2377

初始化完,查看集群上节点的列表,可以执行:

docker node ls
node ls

目前只有node1一个节点,状态为Ready,是个Leader。

2. 添加服务器到集群里 - swarm join##

接着登录到node2中,执行初始化完成后返回的指令。

swarm join

这里会提示「这个节点已作为worker加入到集群中」,再登录到node3,同样的也把它加入到集群中。

swarm join

然后回到node1,查看集群的节点列表:

node ls

现在这个集群里一共有三个服务器。node1为管理员,node2,node3为worker。

3. 创建集群网络 - overlay##

在集群节点中运行的容器需要一种overlay类型的网络,我们可以先去创建一个overlay网络,然后在创建服务的时候使用这个网络。

docker network create --driver overlay skynet
network

可以看到新创建的网络skynet,类型为overlay。

4. Swarm - 状态的图形界面##

为了更好的理解集群,我们可以创建一个visualizer,可以即时的查看集群中服务器的状态和服务器上面运行容器的状态。

登录到manager node1上,执行:

docker run -itd -p 5000:5000 -e HOST=192.168.33.10 -e PORT=5000 -v /var/run/docker.sock:/var/run/docker.sock manomarks/visualizer
visualizer

(这之前我已经pull过manomarks/visualizer的镜像)
打开浏览器,访问http://192.168.33.10:5000:

web ui

三、服务

1. 创建服务 - service create##

创建好集群服务器以后就可以创建服务了,创建服务可以执行:

docker service create --name web --network skynet --publish 3000:3000 --replicas 1 ninghao/node

创建一个名字叫web,网络使用刚刚创建的skynet,使用--publish指定发布的端口号,这里的3000:3000是ninghao/node镜像里的nodejs应用使用的端口号,--replicas指定需要的数量。

接着查看一下服务的列表:

docker service ls

刚创建完成的服务web,REPLICASE的值为0/1,表示正处于prepare的状态,还没正式运行。

查看服务的状态可以执行:

docker service ps web
service

等待状态变为Running的时候,在浏览器打开http://192.168.33.10:5000 就可以查看到新增的服务:

service

访问http://192.168.33.10:3000 :

3000

2. 负载均衡 - load balancing##

现在我们已经在集群里创建一个web服务,服务现在只有一个容器,使用docker service ps web可以查看到容器在node1机器上面。上面我们通过访问node1的ip:192.168.33.10:3000查看到页面,那么尝试访问node2(192.168.33.11)和node3(192.168.33.12)的3000端口看看。

node2
node3

你会发现虽然在node2和node3上没有容器运行那个应用,但还是可以打开页面,观察页面显示的Container ID是一样的,可见页面是同一个容器提供的服务。这就docker里面的routing mesh技术,而且还内置了负载均衡的功能。如果访问的服务器上没有提供服务的容器,那docker会重定向到有这个服务容器的机器上面。

3. 扩展服务 - service scale##

scale up一下web服务,现在这个服务只有一个容器,在node1上面执行:

docker service scale web=6

web表示服务名称,= 右边表示容器的数量,执行完,回到浏览器查看,会陆陆续续出现其他的5个容器,分别分布在3台机器上

scale

重新访问一下:http://192.168.33.10:3000 ,留意Container ID会有变化,现在同时使用多个容器提供服务:


scale可以增加容器,也可以减少容器。执行:

docker service scale web=3
scale down

现在每台服务器上都只有一个容器提供服务,总共3个容器。这是我们设置的web的状态,docker会维护这个状态,现在我们关闭node3的机器:

halt
halt

node3关闭后,它上面的容器也不见了,但过了一会,少了的容器,会出现在集群里其他机器上面。这里是跑到了node2上面:

halt

更新服务 - service update
如果我们想要更新提供服务的容器中的一些信息,比如:端口、数据卷、镜像等等,可以使用:

docker service update [OPTIONS]

先scale up 到6个,下面我们更新一下服务使用的镜像:

docker service update web --image ninghao/node:hola

开始更新:

update

完成更新:

update

你会发现docker会使用我们指定的镜像去逐个逐个更新(旧版本好像会一次全部停掉,再逐个更新),新的容器创建好以后,我们再去浏览一下。

hola

已更新,hello会变成hola。这个更新的动作过程我们可以指定,比如说想一次更新两个容器,每次更新的时候中间停几秒。这次换回原来的hello

docker service update web --image ninghao/node --update-parallelism 2 --update-delay 6s

--update-parallelism指定每次更新的容器数。
--update-delay指定容器更新的间隔。

执行的一开始会消失掉两个容器,随后更新完成两个容器后,会等待6秒,然后再更新两个。具体可以在http://192.168.33.10:5000 观察完整过程。

update
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 背景 凭借敏捷开发部署理念的推行,相信对于很多人来说docker这项容器技术已经并不陌生,Docker 1.12引...
    点融黑帮阅读 3,221评论 3 14
  • 自从docker的出现,web架构方式也出现了新的变化。这几年一直在关注docker,但是从未实践过。最近有点时间...
    luax阅读 10,228评论 10 39
  • 散场本就无可厚非,谢谢你珍惜我。我会努力寻找自己想要的。
    橙色苦瓜阅读 110评论 0 0
  • 昨天夜里吃了三个酸豆角包子,一大盘菜,包括大块的油炸豆腐和辣椒炒肉,一碗白粥。吃完后我感到胃部很硬,像吞下了石头,...
    杨知行阅读 141评论 0 0
  • 最近接连发生两起丢车事件,让我深感祸不单行。心情一度很低落,能量很低。 首先是把自己上下班常用的电动自行车丢了,是...
    凤九觉察阅读 263评论 0 1