Docker Swarm入门:启动Swarm管理者及代理

本文讲的是Docker Swarm入门:启动Swarm管理者及代理【编者的话】在上一篇文章中开始 介绍Docker Swarm入门 ,并已建好了令牌,下面让我们开始启动管理者容器,这是一切的基础。

启动Swarm管理者及代理

首先,启动Swarm管理者,然后创建代理加入Swarm集群。这两步都在上一篇启动“Swarm”容器时已经完成,下面将使用不用的参数启动集群。由于管理者已经是‘激活’节点,所以可使用以下命令创建Swarm 集群:
$ docker run -d -p 3376:3376 -t -v ~/.docker/machine/machines/manager:/certs:ro swarm manage -H 0.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-machine env agent1)

此命令是告诉Docker客户端,将所有的Docker命令到发送给‘Agent1’主机上的Docker引擎。下面让我们启动Agent1:
$ docker run -d swarm join --addr=$(docker-machine ip agent1):2376 token://7c14cbf2a86ecd490a7ea7ae4b795a6b
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
eada7ab697d2: Pull complete
afaf40cb2366: Pull complete
7495da266907: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116
Status: Downloaded newer image for swarm:latest
99c5ec703dc3230fcf769eb13e639079803ee36c33447a0290a2fb7ffe5e7952

此命令同上一个命令类似,也是启动Docker Swarm容器,但这次是“join”模式,运行在detached方式下(-d)并传递两个参数:
  • addr:标识IP地址及端口,用来通知管理者代理的存在;
  • 令牌:就是之前创建的发现令牌,用来启动管理者

第二个代理也以此类推:
$ eval $(docker-machine env agent2)
$ docker run -d swarm join --addr=$(docker-machine ip agent2):2376 token://7c14cbf2a86ecd490a7ea7ae4b795a6b
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
eada7ab697d2: Pull complete
afaf40cb2366: Pull complete
7495da266907: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116 Status: Downloaded newer image for swarm:latest
0b16ee511399c27d849c6a6c628822375c27755b14719b5295c9038f97ede72a

至此,管理者和两个代理都已启动。下面开始配置连接Docker Swarm 管理者的Docker客户端,并查看环境参数。首先设置DOCKER_HOST环境变量来指向管理者Docker主机:
$ DOCKER_HOST=$(docker-machine ip manager):3376

下面的例子中使用docker-machine的IP命令查找管理者主机的IP地址。同样的,Windows操作系统可执行SET DOCKER_HOST来配置环境变量。只要有DOCKER_HOST环境变量,便可通过执行以下命令查看Swarm集群的相关信息:
$ docker info
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 2
Server Version: 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
- Reserved CPUs: 0 / 1
- Reserved Memory: 0 B / 1.021 GiB
- Labels: executiondriver=, kernelversion=4.4.8-boot2docker, operatingsystem=Boot2Docker 1.11.1 (TCL 7.0); HEAD : 7954f54 - Wed Apr 27 16:36:45 UTC 2016, 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
- Reserved CPUs: 0 / 1
- Reserved Memory: 0 B / 1.021 GiB
- Labels: executiondriver=, kernelversion=4.4.8-boot2docker, operatingsystem=Boot2Docker 1.11.1 (TCL 7.0); HEAD : 7954f54 - Wed Apr 27 16:36:45 UTC 2016, provider=virtualbox, storagedriver=aufs
- Error: (none)
- UpdatedAt: 2016-05-22T19:03:32Z
- ServerVersion: 1.11.1
Plugins:
Volume:
Network:
Kernel Version: 4.4.8-boot2docker
Operating System: linux
Architecture: amd64
CPUs: 2
Total Memory: 2.042 GiB
Name: 77d61b0fe67f
Docker Root Dir:
Debug mode (client): false
Debug mode (server): false
WARNING: No kernel memory limit support

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

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

运行Docker容器

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

此命令通过nginx:latest镜像启动了容器,运行在detached模式下,并绑定容器的80端口到Docker主机的80端口。下面执行ps命令查看这个容器运行在哪:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc6d627873f7 nginx "nginx -g 'daemon off" 28 seconds ago Up 27 seconds 192.168.99.101:80->80/tcp, 443/tcp agent1/goofy_bassi

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

如图二所示:
15-nginx-1024x466.png

下面再启动一个实例来展示如何使用Docker Swarm部署第二个实例:
$ docker run -d -p 80:80 nginx
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
737d5d37d5a6 nginx "nginx -g 'daemon off" About a minute ago Up About a minute 192.168.99.102:80->80/tcp, 443/tcp agent2/condescending_galileo
cc6d627873f7 nginx "nginx -g 'daemon off" 3 minutes ago Up 3 minutes 192.168.99.101:80->80/tcp, 443/tcp agent1/goofy_bassi

Docker的ps命令显示一个实例运行在Agent1,另一个运行在Agent2上。Swarm使用了一种算法来决定每个代理运行容器的数量,并部署新的容器在运行容器数量最少的代理上。本例中Agent1上运行了1个容器,而Agent2没有运行容器,因此Swarm将新的容器发布到了Agent2。
可通过以下浏览器URL地址来测试第二个实例:
http://192.168.99.102/

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

清理

一旦完成以上步骤可以通过以下步骤来清理环境:
  1. 指定容器前的ID号可停止Docker容器:
    $ docker stop 737
    $ docker stop cc6
    $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    
  2. 使用docker-machine 命令停止Docker主机:
    $ docker-machine stop agent1
    Stopping "agent1"...
    Machine "agent1" was stopped.
    $ docker-machine stop agent2
    Stopping "agent2"...
    Machine "agent2" was stopped.
    $ docker-machine stop manager
    Stopping "manager"...
    Machine "manager" was stopped.
    $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS agent1 - virtualbox Stopped Unknown agent2 - virtualbox Stopped Unknown default - virtualbox Stopped Unknown manager - virtualbox Stopped Unknown
    

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

结论

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

原文链接:Getting Started with Docker Swarm: Part 2(翻译:Chilly)

原文发布时间为:2016-07-30

本文作者:Chilly

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Docker Swarm入门:启动Swarm管理者及代理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值