在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法

介绍

Docker Swarm是用于部署Docker主机集群的Docker本地解决方案。您可以使用它来快速部署在本地计算机或受支持的云平台上运行的Docker主机集群。

在Docker 1.12之前,设置和部署Docker主机集群需要使用外部键值存储(如etcdConsul)来进行服务发现。但是,使用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容器集群的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Docker的安装方法及运行Docker Swarm模式的使用

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 概要 docker就给简单介绍这么多,这里主要说说docker swarm. docker engine本身只提供了容器技术,没有解决集群环境下的容器编排和通信.docker swarm是一个容器编排管理工具,docker-engine在1.12版本之后集成了docker

  • 详解使用docker 1.12 搭建多主机docker swarm集群

    swarm是docker公司自己的容器集群管理工具,本文介绍了使用docker 1.12 搭建多主机docker swarm集群,分享给大家 准备 准备至少两台的centos 7 主机(全新最小安装, 可以使用虚拟机安装) 开放端口2377 tcp端口, 7946 4789 tcp udp 端口 本文使用192.168.99.101(hostname:centos-node4) 作为swarm manager 192.168.99.102(hostname:centos-node5) 作为sw

  • Docker Swarm入门实例详解

    Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具.它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络. 1. Swarm 认识 Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具.Docker 1.

  • 轻松安装docker并运行docker swarm模式

    概要 docker 1.12版本最大的改变在于集成了docker swarm,在docker engine下提供了 swarm 模式,这里主要说一下docker swarm. docker engine本身只提供了容器技术,没有解决集群环境下的容器编排和通信.docker swarm是一个容器编排管理工具,docker-engine在1.12版本之后集成了docker swarm,不需要再单独安装. docker swarm的功能,举个例子,有3台机器都安装了docker环境,称为3台docke

  • 在Ubuntu 16.04上用Docker Swarm和DigitalOcean创建一个Docker容器集群的方法

    介绍 Docker Swarm是用于部署Docker主机集群的Docker本地解决方案.您可以使用它来快速部署在本地计算机或受支持的云平台上运行的Docker主机集群. 在Docker 1.12之前,设置和部署Docker主机集群需要使用外部键值存储(如etcd或Consul)来进行服务发现.但是,使用Docker 1.12,不再需要外部发现服务,因为Docker提供了一个内置的键值存储,可以开箱即用. 在本教程中,您将了解如何使用Docker 1.12上的Swarm功能部署一组Docker机器

  • Ubuntu 16.04上安装 Swift 3.0及问题解答

    我们对"让 Swift 3.0 在更多的 Linux 系统上运行"这件事充满了热情,因此我们开始在 Ubuntu 16.04,即 Xenial Xerus,X86 系统上构建 Swift 3.0.安装过程十分简单,只需要添加我们的 APT 仓库,并使用 apt-get 就可以了.二进制文件会被安装到 /opt/swift/swift-3.0 目录下,所以在安装 3.0 版本后需要更新 path 路径.编辑手记:对于我们为什么使用 /opt/swift 而不是 /usr/bin/ 目录,

  • 详解如何在Ubuntu 16.04上增加Swap分区

    前言 提高服务器响应速度和防止应用程序内存不足错误的最简单方法之一是添加一些交换空间. 在本指南中,我们将介绍如何将交换文件添加到Ubuntu 16.04服务器. 但是,请注意: 尽管swap区通常建议用于使用传统旋转硬盘驱动器的系统,但使用与SSD交换可能会导致随着时间的推移硬件退化问题. 由于这个考虑,我们不建议在DigitalOcean或任何其他使用SSD存储的供应商上启用swap分区. 这样做可能会影响到您和您的邻居的底层硬件的可靠性. 本指南仅供可能在其他地方有使用旋转磁盘系统的用户参

  • 使用Docker部署MySQL 5.7&8.0主从集群的方法步骤

    > 部署 MySQL 5.7 集群 master & slave (仅测试用) 镜像版本 5.7 1.创建 overlay 网络 docker network create --driver overlay common-network --attachable 2.编辑两个配置文件 master.cnf 与 slave.cnf !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] log-b

  • 在Ubuntu 16.04安装与使用Docker的教程详解

    介绍 Docker是一个应用程序,它使得在容器中运行应用程序进程变得简单和容易,这类应用程序就像虚拟机,只有更便携,更加资源友好,更依赖于主机操作系统. 有关详细介绍Docker容器的不同组件,请Docker生态系统:介绍公共组件 . 在Ubuntu 16.04上安装Docker有两种方法. 一种方法包括将其安装在操作系统的现有安装上. 其他涉及纺了一个名为工具的服务器Docker机即自动安装Docker就可以了. 在本教程中,您将学习如何在现有安装的Ubuntu 16.04上安装和使用它. 先

  • Ubuntu 16.04中Docker的安装和代理配置教程

    前言 最近想在测试环境下快速搭建一套gitlab ci环境,推进下项目组内规范化开发管理.自己在家里的nas上是用docker部署的gitlab,体验非常的好,正好ubuntu 16.04 lts发布了,也想借此机会接触下新版内核和systemd. Ubuntu的安装 这里就省略不介绍了.唯一的问题是当前版本的官方镜像,选中文在安装阶段会报一个busybox的错误,换成英文就好了. 大家也可以参考这篇文章:http://www.jb51.net/article/100919.htm,里面介绍的也

  • 详解ubuntu 16.04安装docker教程

    本文介绍了ubuntu 16.04安装docker教程,具体如下: 环境 操作系统:ubuntu 16.04 64位,默认安装 准备 1. 添加GPG key: $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 2. 添加源 新建文件:/etc/apt/sources.list.d/docker.list,

  • Ubuntu 16.04安装使用Docker教程

    题记 安装系列一篇,最近闲暇来折腾折腾Docker和spring boot.记录步骤,简要说明,目的是能够快速安装使用,方便查阅,这就是写安装文章的作用,我个人不喜欢写很多参数说明,有兴趣的人自会去深入阅读官方文档说明,就像app的理念一样,一次只做好一件事. Linux环境 Ubuntu 16.04(LTS) 简单方法 $ sudo apt-get update $ sudo apt-get install docker 搞定! 但是这种方法有一个缺点:安装的不一定是最新的docker,安装版

  • 在Ubuntu 16.04 Server上安装Zabbix的方法

    监控服务器 - 什么是 Zabbix Zabbix 是企业级开源分布式监控服务器解决方案.该软件能监控网络的不同参数以及服务器的完整性,还允许为任何事件配置基于电子邮件的警报.Zabbix 根据存储在数据库(例如 MySQL)中的数据提供报告和数据可视化功能.软件收集的每个测量指标都可以通过基于 Web 的界面访问. Zabbix 根据 GNU 通用公共许可证版本 2(GPLv2)的条款发布,完全免费. 在本教程中,我们将在运行 MySQL.Apache 和 PHP 的 Ubuntu 16.04

  • Ubuntu 20.04 上安装和使用 Docker的详细过程(安装包)

    目录 一.解压文件 二.拷贝解压后的文件到/usr/bin/下面 三.加入系统文件 四.启动Docker 五.Docker配置文件 六.重启Docker 七.检查Docker是否安装成功 八.总结 安装前将所有的软件包上传到系统的/opt路径,所有的操作都在/opt目录下 一.解压文件 tar -xzvf docker-19.03.0.tgz 二.拷贝解压后的文件到/usr/bin/下面 cp docker/* /usr/bin/ 三.加入系统文件 cat >/etc/systemd/syste

随机推荐