介绍

Docker Swarm是用于部署Docker主机集群的Docker本地解决方案。您可以使用它来快速部署在本地计算机或受支持的云平台上运行的Docker主机集群。
在Docker 1.12之前,设置和部署Docker主机集群需要使用外部键值存储(如etcd或Consul)来进行服务发现。但是,使用Docker 1.12,不再需要外部发现服务,因为Docker提供了一个内置的键值存储,可以开箱即用。
在本教程中,您将了解如何使用Docker 1.12上的Swarm功能部署一组Docker机器。集群中的每个Docker节点将运行Ubuntu 16.04。虽然您可以运行由数十,数百或数千个Docker主机组成的群集,但我们将在本教程中设置的群集将由一个管理器节点和两个工作节点组成,共有三个群集成员。完成本教程后,您可以轻松地向集群中添加更多节点。
先决条件
对于本教程,您需要:
安装了Docker的本地机器。您的本地计算机可以运行任何Linux发行版,甚至Windows或macOS。对于Windows和macOS,使用官方安装程序安装Docker。 如果您的本地计算机上运行了Ubuntu 16.04,但未安装Docker ,请参阅如何在Ubuntu 16.04上安装和使用Docker以获取相关说明。
DigitalOcean API令牌。如果没有,使用本指南生成它。生成令牌时,请确保它具有读写范围。这是默认值,因此如果您在生成它时不更改任何选项,它将具有读写能力。为了更容易在命令行中使用,请务必将令牌分配给该文章中给出的变量。
Docker Machine安装在本地计算机上,您将使用它来创建三台主机。 在Windows和macOS上,Docker安装包括Docker Machine。
第1步 – 配置群集节点
我们需要为集群创建几个Docker主机。 作为刷新程序,以下命令提供单个Docker化主机,其中$DOTOKEN是一个环境变量,其计算结果为您的DigitalOcean API令牌:
docker-machine create --driver digitalocean --digitalocean-image ubuntu-16-04-x64 --digitalocean-access-token $DOTOKEN machine-name
想象一下,必须设置一个由至少三个节点组成的集群,一次配置一个主机。
我们可以使用此命令并结合一些简单的Bash脚本自动化配置任何数量的Docker主机的过程。在本地机器上执行此命令以创建三个名为node-1 , node-2和node-3 Docker主机:
for i in 1 2 3; do docker-machine create --driver digitalocean \ --digitalocean-image ubuntu-16-04-x64 \ --digitalocean-access-token $DOTOKEN node-$i; done
命令成功完成后,您可以通过访问您的DigitalOcean仪表板或输入以下命令来验证是否已创建所有计算机:
docker-machine ls
输出应类似于以下内容,它应该作为查找节点的IP地址的快速参考:
Output NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS node-1 - digitalocean Running tcp://104.236.239.4:2376 v1.12.2 node-2 - digitalocean Running tcp://104.131.165.210:2376 v1.12.2 node-3 - digitalocean Running tcp://104.236.76.250:2376 v1.12.2
此时,所有三个Docker化主机已创建,并且您拥有每个主机的IP地址。他们也都运行Docker 1.12.x,但是还不是Docker集群的一部分。在接下来的步骤中,我们将配置防火墙规则,使节点成为集群成员,选择其中一个节点并将其作为Docker Swarm管理器,并将其余部分配置为Docker Swarm工作线程。
第2步 – 配置防火墙规则以允许Docker群交通
集群必须至少有一个节点作为管理器,但对于生产设置,建议使用三个管理器。对于此设置,让我们选择第一个节点,并将其设置为Swarm管理器。其他两个节点将是工作节点。
必须在将成为群集一部分的节点上打开某些网络端口,以使群集正常工作。这需要配置防火墙以允许通过这些端口的流量。因为有三个不同的防火墙应用程序可用于完成该任务,您需要在每个防火墙应用程序的节点上执行的命令已在单独的文章中记录。按照本指南并为每个主机配置防火墙。打开管理器上的适当端口,然后重复以打开两个客户机节点上的端口。
完成此步骤后,可以初始化集群管理器。
第3步 – 初始化集群管理器
我们已经决定node-1将是我们的集群管理器,所以从本地机器登录到节点:
docker-machine ssh node-1
命令提示符将更改以反映您现在已登录到该特定节点的事实。要将节点配置为Swarm管理器,请键入以下命令:
docker swarm init --advertise-addr node_ip_address
node_ip_address是节点的IP地址。 您可以从docker docker-machine ls的输出或从DigitalOcean仪表板获取它。
您将看到类似于以下内容的输出:
Output Swarm initialized: current node (a35hhzdzf4g95w0op85tqlow1) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-3k7ighcfs9352hmdfzh31t297fd8tdskg6x6oi8kpzzszznffx-6kovxm3akca2qe3uaxtu07fj3 \ 104.236.239.4:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
输出中是节点的ID,在此示例中为a35hhzdzf4g95w0op85tqlow1 ,以及有关如何将其他节点添加到集群的指示信息。
所以现在你有一个经理配置的Docker Swarm。让我们将剩余的节点添加为工人。
第4步 – 将节点添加到集群
要完成此步骤,您可能想要打开另一个终端,现在离开您用于单独登录到Swarm管理器的终端选项卡或窗口。
首先,从本地机器连接到node-2 :
docker-machine ssh node-2
然后执行此命令,其中your_swarm_token是在上一步创建集群时接收的令牌, manager_node_ip_address是Swarm管理器的IP:
docker swarm join \ --token your_swarm_token \ manager_node_ip_address:2377
命令成功执行后,您将看到此响应:
Output This node joined a swarm as a worker.
注销node-2 ,然后使用node-3重复此过程以将其添加到集群。
您现在已将两个工作节点添加到集群。如果防火墙规则配置正确,则现在具有正常运行的Docker Swarm,所有节点都已同步。
第5步 – 管理群集
在管理器和工作节点分配给集群后,所有Docker Swarm管理命令必须在管理器节点上执行。因此返回到您用于添加管理器的终端,并键入此命令以查看集群的所有成员:
docker node ls
输出应类似于:
Output ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 2qhg0krj00i4d3as2gpb0iqer node-2 Ready Active 6yqh4bjki46p5uvxdw6d53gc0 node-3 Ready Active a35hhzdzf4g95w0op85tqlow1 * node-1 Ready Active Leader
这个输出表明我们正在处理一个3节点的Docker Swarm及其节点 – 一个经理和两个工人。要查看可以在管理器节点上运行的其他管理命令,请键入:
docker node --help
有关集群的详细信息,您可以在manager或workers上使用以下命令(它是一个通用的Docker命令):
docker info
输出应该是这种类型,并且应该指示集群的状态( 活动或待决 ),集群中的节点数以及特定节点是管理者还是工作者。
Output ... Network: bridge host null overlay Swarm: active NodeID: a35hhzdzf4g95w0op85tqlow1 Is Manager: true ClusterID: f45u0lh7ag4qsl4o56yfbls31 Managers: 1 Nodes: 3 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Heartbeat Tick: 1 Election Tick: 3 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Node Address: 104.236.239.4 Runtimes: runc Default Runtime: runc Security Options: apparmor seccomp Kernel Version: 4.4.0-38-generic Operating System: Ubuntu 16.04.1 LTS OSType: linux ...
如果在工作线程节点上重复相同的命令, Is Manager行应显示为false 。
提示 :您可以随时从群集中添加或删除节点。 此外,工作节点可以升级为管理器,并且管理器可以转换为工作器。
现在让我们在集群上运行一个服务。
第6步 – 在Docker Swarm中运行服务
现在你有一个Docker Swarm并运行,让我们运行一个测试容器,看看管理器如何处理它。在运行Docker Engine 1.12或更高版本的计算机上,容器使用docker docker service命令部署为服务。 和docker node命令一样, docker service命令只能在管理器节点上执行。
所以让我们使用官方的Nginx容器图像部署一个web服务器服务:
docker service create -p 80:80 --name webserver nginx
在此命令中,我们将Nginx容器中的端口80映射到集群上的端口80 ,以便我们可以从任何位置访问默认的Nginx页面。
要查看集群上运行的服务,请键入:
docker service ls
输出应采取此形式。 REPLICAS列显示有多少服务实例正在运行:
Output ID NAME REPLICAS IMAGE COMMAND 0ymctkanhtc1 webserver 1/1 nginx
您可以通过使用docker service ps后跟服务名称来确定服务正在运行的节点。
docker service ps webserver
输出应类似于以下内容:
Output ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 39yprxsaaekuif951cl0o4wau webserver.1 nginx node-1 Running Running 7 hours ago
在此示例中, webserver服务在node-1上运行。 由于这是一个在默认端口上运行的Web服务器,您可以通过将浏览器指向http:// node-1_ip_address来访问它。试一试。你会看到Nginx的默认页面。
借助网状网络的魔力,可以在集群的任何其他节点上访问在节点上运行的服务。例如,此Nginx服务也可以通过将浏览器指向集群中任何节点的IP地址来访问,而不仅仅是它正在运行的节点的IP地址。试一试。
Docker Swarm的另一个功能是缩放服务的能力,即启动服务的其他实例。假设我们想将我们之前启动的webserver服务扩展为五个实例。为此,我们只需键入以下命令,系统将创建四个实例:
docker service scale webserver=5
并且docker docker service ps的输出将显示在哪些节点上启动的新实例:
Output ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 39yprxsaaekuif951cl0o4wau webserver.1 nginx node-1 Running Running 8 hours ago 1er2rbrnj6ltanoe47mb653wf webserver.2 nginx node-3 Running Running 14 seconds ago evassgyvruh256ebv5pj3bqcz webserver.3 nginx node-3 Running Running 14 seconds ago d453agrdpgng47klbl6yfjnka webserver.4 nginx node-1 Running Running 18 seconds ago 2hsdevx178rg15gqxhzrsnmg6 webserver.5 nginx node-2 Running Running 14 seconds ago
这表明四个新实例中的两个在node-3上启动,一个在node-1上启动,另一个在node-2上启动。
最后,如果服务关闭,如果原始节点不再可用,它会在同一节点或不同节点上自动重新启动。
结论
你已经看到了使用Docker Engine 1.12和新的Swarm模式设置Docker Swarm有多么容易。您还了解了如何在集群上执行几个管理任务。但还有更多。要查看可用的Docker Swarm命令,请在Swarm管理器上执行以下命令。
docker swarm --help
以上所述是小编给大家介绍的在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# docker
# swarm
# 集群
# digitalocean
# Docker stop停止/remove删除所有容器
# docker容器无法stop的解决办法
# Docker容器无法被stop or kill问题的解决方法
# 解决docker启动容器失败:cannot access‘/docker-entrypoint-in
# pycharm远程连接docker容器的操作流程
# pycharm使用docker容器开发的详细教程
# docker swarm如何在指定的node上运行指定的容器
# Docker无法stop或者rm指定容器问题解决方案
# 管理器
# 您可以
# 让我们
# 令牌
# 您的
# 在此
# 仪表板
# 您将
# 类似于
# 机上
# 几个
# 您现在
# 你有
# 正在运行
# 将是
# 您需要
# 它来
# 小编
# 键值
# 应用程序
相关文章:
想学网站制作怎么学,建立一个网站要花费多少?
如何在建站宝盒中设置产品搜索功能?
电商平台网站制作流程,电商网站如何制作?
英语简历制作免费网站推荐,如何将简历翻译成英文?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何在云服务器上快速搭建个人网站?
家庭服务器如何搭建个人网站?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
宁波自助建站系统如何快速打造专业企业网站?
如何在腾讯云服务器快速搭建个人网站?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何挑选优质建站一级代理提升网站排名?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
C#如何使用XPathNavigator高效查询XML
如何零基础开发自助建站系统?完整教程解析
建站之星导航配置指南:自助建站与SEO优化全解析
如何用好域名打造高点击率的自主建站?
大连网站制作公司哪家好一点,大连买房网站哪个好?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
建站DNS解析失败?如何正确配置域名服务器?
如何用AWS免费套餐快速搭建高效网站?
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何选择网络建站服务器?高效建站必看指南
郑州企业网站制作公司,郑州招聘网站有哪些?
如何在阿里云虚拟主机上快速搭建个人网站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
网站制作网站,深圳做网站哪家比较好?
如何将凡科建站内容保存为本地文件?
C++如何编写函数模板?(泛型编程入门)
如何在服务器上配置二级域名建站?
如何自定义建站之星网站的导航菜单样式?
制作证书网站有哪些,全国城建培训中心证书查询官网?
平台云上自助建站如何快速打造专业网站?
建站VPS选购需注意哪些关键参数?
兔展官网 在线制作,怎样制作微信请帖?
如何通过商城自助建站源码实现零基础高效建站?
如何在IIS服务器上快速部署高效网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
小程序网站制作需要准备什么资料,如何制作小程序?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何选择最佳自助建站系统?快速指南解析优劣
如何配置IIS站点权限与局域网访问?
建站之星展会模版如何一键下载生成?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
制作网站怎么制作,*游戏网站怎么搭建?
如何通过虚拟主机快速完成网站搭建?
*请认真填写需求信息,我们会在24小时内与您取得联系。