UDN-企业互联网技术人气社区

板块导航

浏览  : 553
回复  : 1

[技术交流] Docker Swarm入门:启动Swarm管理者及代理

[复制链接]
瞌睡虫的头像 楼主
发表于 2016-8-2 09:24:52 | 显示全部楼层 |阅读模式
  启动Swarm管理者及代理

  首先,启动Swarm管理者,然后创建代理加入Swarm集群。这两步都在上一篇启动“Swarm”容器时已经完成,下面将使用不用的参数启动集群。由于管理者已经是‘激活’节点,所以可使用以下命令创建Swarm集群:

  $Dockerrun-d-p3376:3376-t-v~/.Docker/machine/machines/manager:/certs:roswarmmanage-H0.0.0.0:3376

  --tlsverify

  --tlscacert=/certs/ca.pem

  --tlscert=/certs/server.pem

  --tlskey=/certs/server-key.pem

  token://7c14cbf2a86ecd490a7ea7ae4b795a6b

  使用以下配置运行Swarm集群:

  -d(or–detach):通过后台运行方式运行Swarm容器,并在启动后输出容器ID

  -t:分配一个伪终端的输出

  -p:映射Docker容器的3376端口到Docker主机(你的笔记本)的3376端口,这是容器命令网络连接的默认端口

  -v:使用只读方式(ro),将容器的本地卷(~/.Docker/machine/machines/manager)挂载到指定路径(/certs)

  令牌:这就是在上篇中已创建的发现令牌

  设置中所面临最大的挑战是设置正确的证书路径。不同的Docker版本及操作系统,证书存放的路径不同。在撰写本文时,Macs环境下,Docker会在home目录下创建一个.Docker的文件夹。当我们创建管理者虚拟机时,将在以下路径创建配置文件:machine/machines/manager。

  若在启动过程中遇到问题需找到server.key或server-key.pem文件。可在Docker配置中找到这些文件,便可修改相应的卷挂载路径。

  管理者启动后,下一步是启动代理。若需要修改激活的Docker主机为Agent1,可使用如下命令:

  $eval$(Docker-machineenvagent1)

  此命令是告诉Docker客户端,将所有的Docker命令到发送给‘Agent1’主机上的Docker引擎。下面让我们启动Agent1:

  $Dockerrun-dswarmjoin--addr=$(Docker-machineipagent1):2376token://7c14cbf2a86ecd490a7ea7ae4b795a6b

  Unabletofindimage'swarm:latest'locally

  latest:Pullingfromlibrary/swarm

  eada7ab697d2:Pullcomplete

  afaf40cb2366:Pullcomplete

  7495da266907:Pullcomplete

  a3ed95caeb02:Pullcomplete

  Digest:sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116

  Status:Downloadednewerimageforswarm:latest

  99c5ec703dc3230fcf769eb13e639079803ee36c33447a0290a2fb7ffe5e7952

  此命令同上一个命令类似,也是启动DockerSwarm容器,但这次是“join”模式,运行在detached方式下(-d)并传递两个参数:

  addr:标识IP地址及端口,用来通知管理者代理的存在;

  令牌:就是之前创建的发现令牌,用来启动管理者

  第二个代理也以此类推:

  $eval$(Docker-machineenvagent2)

  $Dockerrun-dswarmjoin--addr=$(Docker-machineipagent2):2376token://7c14cbf2a86ecd490a7ea7ae4b795a6b

  Unabletofindimage'swarm:latest'locally

  latest:Pullingfromlibrary/swarm

  eada7ab697d2:Pullcomplete

  afaf40cb2366:Pullcomplete

  7495da266907:Pullcomplete

  a3ed95caeb02:Pullcomplete

  Digest:sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116Status:Downloadednewerimageforswarm:latest

  0b16ee511399c27d849c6a6c628822375c27755b14719b5295c9038f97ede72a

  至此,管理者和两个代理都已启动。下面开始配置连接DockerSwarm管理者的Docker客户端,并查看环境参数。首先设置Docker_HOST环境变量来指向管理者Docker主机:

  $Docker_HOST=$(Docker-machineipmanager):3376

  下面的例子中使用Docker-machine的IP命令查找管理者主机的IP地址。同样的,Windows操作系统可执行SETDocker_HOST来配置环境变量。只要有Docker_HOST环境变量,便可通过执行以下命令查看Swarm集群的相关信息:

  $Dockerinfo

  Containers:2

  Running:2

  Paused:0

  Stopped:0

  Images:2

  ServerVersion:swarm/1.2.2

  Role:primary

  Strategy:spread

  Filters:health,port,containerslots,dependency,affinity,constraint

  Nodes:2

  agent1:192.168.99.101:2376

  -ID:RDNQ:VD3I:AZPE:LSWW:7NND:XV7C:KHGH:5KR5:MZHG:4I7H:7RMU:XGQG

  -Status:Healthy

  -Containers:1

  -ReservedCPUs:0/1

  -ReservedMemory:0B/1.021GiB

  -Labels:executiondriver=,kernelversion=4.4.8-boot2Docker,operatingsystem=Boot2Docker1.11.1(TCL7.0);HEAD:7954f54-WedApr2716:36:45UTC2016,provider=virtualbox,storagedriver=aufs

  -Error:(none)

  -UpdatedAt:2016-05-22T19:03:35Z

  -ServerVersion:1.11.1

  agent2:192.168.99.102:2376

  -ID:DXN7:FLLA:RMDW:HSPS:WT74:YM2I:CM3G:QBY7:FR7G:4WEO:LJ72:XB6L

  -Status:Healthy

  -Containers:1

  -ReservedCPUs:0/1

  -ReservedMemory:0B/1.021GiB

  -Labels:executiondriver=,kernelversion=4.4.8-boot2Docker,operatingsystem=Boot2Docker1.11.1(TCL7.0);HEAD:7954f54-WedApr2716:36:45UTC2016,provider=virtualbox,storagedriver=aufs

  -Error:(none)

  -UpdatedAt:2016-05-22T19:03:32Z

  -ServerVersion:1.11.1

  Plugins:

  Volume:

  Network:

  KernelVersion:4.4.8-boot2Docker

  OperatingSystem:linux

  Architecture:amd64

  CPUs:2

  TotalMemory:2.042GiB

  Name:77d61b0fe67f

  DockerRootDir:

  Debugmode(client):false

  Debugmode(server):false

  WARNING:Nokernelmemorylimitsupport

  输出信息表示目前有两个正在运行的容器(Swarm容器运行在“join”模式)作为代理,并且这些代理是健康的。注意是Docker的主机容器而非客户端应用容器,我们可以通过ps命令查看运行客户端应用的容器:

  $DockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES

  如上所料,没有任何客户端应用容器正在运行。

  运行Docker容器

  三个Docker主机启动后,便可启动一个Docker客户端容器。管理者主机已激活,因此Docker命令行工具发送命令给管理者。执行以下命令来启动Nginx的容器实例:

  $Dockerrun-d-p80:80nginxcc6d627873f7b33f910129fafdcc5c544048cc864ef5433e667afc9a88632931

  此命令通过nginx:latest镜像启动了容器,运行在detached模式下,并绑定容器的80端口到Docker主机的80端口。下面执行ps命令查看这个容器运行在哪:

  $DockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES

  cc6d627873f7nginx"nginx-g'daemonoff"28secondsagoUp27seconds192.168.99.101:80->80/tcp,443/tcpagent1/goofy_bassi

  输出显示容器运行在Agent1。可打开连接Agent1的浏览器确认容器正在运行:

  http://192.168.99.101/

  如图二所示:

  
19c267c5acc7612ac98a5cb413e3d87e.png


  下面再启动一个实例来展示如何使用DockerSwarm部署第二个实例:

  $Dockerrun-d-p80:80nginx

  $Dockerps

  CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES

  737d5d37d5a6nginx"nginx-g'daemonoff"AboutaminuteagoUpAboutaminute192.168.99.102:80->80/tcp,443/tcpagent2/condescending_galileo

  cc6d627873f7nginx"nginx-g'daemonoff"3minutesagoUp3minutes192.168.99.101:80->80/tcp,443/tcpagent1/goofy_bassi

  Docker的ps命令显示一个实例运行在Agent1,另一个运行在Agent2上。Swarm使用了一种算法来决定每个代理运行容器的数量,并部署新的容器在运行容器数量最少的代理上。本例中Agent1上运行了1个容器,而Agent2没有运行容器,因此Swarm将新的容器发布到了Agent2。

  可通过以下浏览器URL地址来测试第二个实例:

  http://192.168.99.102/

  恭喜你,现在有了一个Swarm管理者,两个代理,以及运行在代理上的两个容器。

  清理

  一旦完成以上步骤可以通过以下步骤来清理环境:

  指定容器前的ID号可停止Docker容器:

  $Dockerstop737

  $Dockerstopcc6

  $DockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES

  使用Docker-machine命令停止Docker主机:

  $Docker-machinestopagent1

  Stopping"agent1"...

  Machine"agent1"wasstopped.

  $Docker-machinestopagent2

  Stopping"agent2"...

  Machine"agent2"wasstopped.

  $Docker-machinestopmanager

  Stopping"manager"...

  Machine"manager"wasstopped.

  $Docker-machinelsNAMEACTIVEDRIVERSTATEURLSWARMDockerERRORSagent1-virtualboxStoppedUnknownagent2-virtualboxStoppedUnknowndefault-virtualboxStoppedUnknownmanager-virtualboxStoppedUnknown

  这样您便安全的停止了Docker。

  结论

  本文介绍了DockerSwarm,一种Docker的原生集群解决方案,并一步一步的演示了如何建立一个本地的DockerSwarm集群。DockerSwarm提供了管理代理和运行Docker引擎主机的基本功能,并通过一组代理实现部署Docker容器的功能。当在AWS上运行Docker时,亚马逊ECS是一种可选的方案,但如果在本地数据中心或另外的私有云环境,Swarm也是一个相当有竞争力的备选方案。

文章来源:DockOne.io
文章作者:chilly_2016

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部