分享

Docker Swarm入门(四)Demo

gefieder 发表于 2015-4-22 18:38:21 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 1 18935
问题导读:
1、如何使Docker Swarm集群运行起来以及如何与它进行交互?
2、如何搭建集群?
3、浏览器中访问Consul的地址是?




【编者的话】本文作者Matt Bajor热衷Docker及相关产品的研究,本文是他写的Docker Swarm入门系列的第四篇,通过一个Demo让读者更好地了解Docker Swarm。

我的hackweek努力的主要方向是Vagrant环境下的Docker Swarm集群。这篇文章将看看如何使它运行起来以及如何与它进行交互。
它是什么?这是一个在Vagrant环境中运行的Docker Swarm集群,包括4个节点:
  • dockerhost01
  • dockerhost02
  • dockerhost03
  • dockerswarm01

Docker节点(dockerhost01到dockerhost03)运行了Docker守护进程以及一些配套服务,如下:
  • Docker daemon:配置了一系列参数后运行的进程。
  • Registrator daemon:这个守护进程可以连接到Consul,以注册和注销有端口公开的容器。相关的端口配置信息可以在/services路径下的Consul的键/值存储中看到。
  • Swarm客户端:Swarm客户端维护在Consul中的Swarm节点列表。此列表保存在/swarm下,包含集群中参与的Swarm节点<ip>:<ports>的列表。

Docker Swarm节点(dockerswarm01)同样也运行了几个服务。由于这仅仅是一个例子,所以我们只使用了一台机器。如果是生产环境,你可以使用多台机器来运行Docker Swarm节点。
  • Swarm daemon:作为master以及监听Docker的命令而代理他们到Docker主机。
  • Consul:单个节点的Consul实例。它的用户界面在这里
  • Nginx:代理Consul的UI。

如何搭建集群1.安装前提
  • GitHub Repo:docker-swarm-demo
  • Vagrant(最新):Vagrant下载
  • Vagrant主机插件:vagrant plugin install vagrant-hosts
  • VirtualBox:VirtualBox下载
  • Ansible:brew install ansible
  • 主机信息:添加以下行到/etc/hosts文件:

10.100.199.200 dockerswarm0110.100.199.201 dockerhost0110.100.199.202 dockerhost0210.100.199.203 dockerhost03
2a. Clone && Vagrant up(无TLS这个过程可能会耗费一些时间,因为要下载几G的数据。这种情况是不使用TLS的。如果你想要Swarm使用TLS,去步骤2b。
  1. # Clone our repo
  2. git clone https://github.com/technolo-g/docker-swarm-demo.git
  3. cd docker-swarm-demo
  4. # Bring up the cluster with Vagrant
  5. vagrant up
  6. # Provision the host files on the vagrant hosts
  7. vagrant provision --provision-with hosts
  8. # Activate your enviornment
  9. source bin/env
复制代码

2b. Clone && Vagrant up(有TLS这种情况会生成证书而且集群会启用TLS。
  1. # Clone our repo
  2. git clone https://github.com/technolo-g/docker-swarm-demo.git
  3. cd docker-swarm-demo
  4. # Generate Certs
  5. ./bin/gen_ssl.sh
  6. # Enable TLS for the cluster
  7. echo -e "use_tls: True\ndocker_port: 2376" > ansible/group_vars/all.yml
  8. # Bring up the cluster with Vagrant
  9. vagrant up
  10. # Provision the host files on the vagrant hosts
  11. vagrant provision --provision-with hosts
  12. # Activate your TLS enabled enviornment
  13. source bin/env_tls
复制代码

3. 确认正常工作现在,集群已经配置完毕并运行,你需要确认它是否正常工作。首先看一下Docker客户端:
  1. $ docker version
  2. Client version: 1.4.1
  3. Client API version: 1.16
  4. Go version (client): go1.4
  5. Git commit (client): 5bc2ff8
  6. OS/Arch (client): darwin/amd64
  7. Server version: swarm/0.0.1
  8. Server API version: 1.16
  9. Go version (server): go1.2.1
  10. Git commit (server): n/a
  11. $ docker info
  12. Containers: 0
  13. Nodes: 3
  14. dockerhost02: 10.100.199.202:2376
  15. dockerhost01: 10.100.199.201:2376
  16. dockerhost03: 10.100.199.203:2376
复制代码

然后在浏览器中输入http://dockerswarm01/ui/#/test/kv/swarm/来访问Consul,并确认Docker主机以及它的端口信息:
        af9846e894b6127a03631647d737ca79.png

集群好像可以正常工作了,现在让我们在上边配置一个应用吧。

如何使用它现在,你可以使用Swarm集群来配置节点。在Vagrant配置期间相关的镜像已经下载完毕,所以运行时速度会非常快。关于命令有两件事情需要注意:
  • 启动Docker后,约束需要与相应的标签匹配,Swarm的过滤器需要知道当前哪些主机是可供调度的。
  • SERVICE_NAME变量是为Registrator设置的。由于我们使用的是通用的容器,所以以这种方式来代替指定服务的名称。
  1. # Primary load balancer
  2. docker run -d \
  3. -e constraint:zone==external \
  4. -e constraint:status==master \
  5. -e SERVICE_NAME=proxy \
  6. -p 80:80 \
  7. nginx:latest
  8. # Secondary load balancer
  9. docker run -d \
  10. -e constraint:zone==external \
  11. -e constraint:status==non-master \
  12. -e SERVICE_NAME=proxy \
  13. -p 80:80 \
  14. nginx:latest
  15. # 3 Instances of the webapp
  16. docker run -d \
  17. -e constraint:zone==internal \
  18. -e SERVICE_NAME=webapp \
  19. -p 80 \
  20. nginx:latest
  21. docker run -d \
  22. -e constraint:zone==internal \
  23. -e SERVICE_NAME=webapp \
  24. -p 80 \
  25. nginx:latest
  26. docker run -d \
  27. -e constraint:zone==internal \
  28. -e SERVICE_NAME=webapp \
  29. -p 80 \
  30. nginx:latest
复制代码

现在你如果运行docker ps 或者输入http://dockerswarm01/ui/#/test/kv/services来浏览Consul会得到如下页面:
        f17a89957bec149ca8cb3a89ef916f3a.png

你可以看到有两个已经注册的服务!由于路由和服务发现部分是额外的,这个程序实际上不会工作,但我觉得你已经有了思路。

我希望你喜欢有关Docker Swarm的这个系列。我发现Docker Swarm是由一个伟大的且非常敏捷的团队开发的一个前景广阔的应用。我相信它将改变我们使用Docker主机的方式,并大大简化使用复杂应用程序的流程。

原文链接:Intro to Docker Swarm: Part 4 - Demo (翻译:田浩浩 校对:郭蕾)
资料来源:http://dockerone.com/article/203


欢迎加入about云群371358502、39327136,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

已有(1)人评论

跳转到指定楼层
spf7331 发表于 2015-4-22 21:07:59
Docker 越来越复杂了
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条