Docker Swarm的主要目标是将多个Docker主机分组为一个逻辑虚拟服务器-通过将应用程序分布在多个Docker主机(而不是一个)上,从而确保应用程序的可用性和高性能。
在本教程中,您将学习:
- 什么是Docker Swarm
- 如何配置主机
- 如何安装和运行Docker服务
- 如何配置管理器节点以进行群集集群初始化
- 如何配置工作节点加入Swarm集群
- 如何验证群群集
- 如何在Swarm群集上部署新服务
使用的软件要求和约定
类别 | 使用的要求,约定或软件版本 |
---|---|
系统 | Ubuntu 18.04 |
软件 | Docker-CE 18.09 |
其他 | 以root身份或通过Linux特权访问Linux系统sudo 命令。 |
约定 |
#-要求linux命令可以直接以root用户身份或通过使用root特权以root特权执行sudo 命令$-要求linux命令以普通非特权用户身份执行 |
群概念详细
Docker Engine中嵌入的集群管理和编排功能是使用swarmkit构建的。
一个群集由多个Docker主机组成,这些Docker主机以群集模式运行,并充当管理器(管理成员资格和委派)和工作人员(运行群集服务)。给定的Docker主机可以是管理员,工作人员或同时担任这两个角色。创建服务时,您要定义其最佳状态,例如副本数,可用的网络和存储资源,将服务公开给外界的端口等。如果工作节点不可用,则Docker会将该节点的任务安排在其他节点上。任务是一个正在运行的容器,它是群集服务的一部分,由群集管理器管理。
(adsbygoogle = window.adsbygoogle || [])。push({});
与独立容器相比,群集服务的主要优势之一是,您可以修改服务的配置,包括它所连接的网络和卷,而无需手动重新启动服务。 Docker将更新配置,使用过期的配置停止服务任务,并创建与所需配置匹配的新任务。
当Docker以群体模式运行时,您仍然可以运行独立的容器在参与集群的任何Docker主机以及集群服务上。独立容器和群集服务之间的主要区别在于,只有群集管理器可以管理群集,而独立容器可以在任何守护程序上启动。 Docker守护程序可以以管理人员,工作人员或两者兼有的形式参与。
配置Docker主机
在为swarm集群安装必要的Docker软件包之前,我们将在所有Ubuntu节点上配置hosts文件。
Manager Node – 192.168.1.103 (hostname - dockermanager)
Worker Node1 – 192.168.1.107 (hostname – dockerworker1)
Worker Node2 – 192.168.1.108 (hostname - dockerworker2)
编辑/etc/hosts
通过三个文件跨所有节点gedit
要么vim
并进行以下更改:
192.168.1.103 dockermanager
192.168.1.107 dockerworker1
192.168.1.108 dockerworker2
在hosts文件中使用上述详细信息进行修改后,请使用ping
在所有节点之间。
从Docker Manager主机
# ping dockerworker1
# ping 192.168.1.107
# ping dockerworker2
# ping 192.168.1.108
从Docker Worker节点1
# ping dockermanager
# ping 192.168.1.103
从Docker Worker节点2
# ping dockermanager
# ping 192.168.1.103
安装并运行Docker服务
要创建群集集群,我们需要在所有服务器节点上安装docker。我们将在所有三台Ubuntu计算机上安装docker-ce,即Docker Community Edition。
在新主机上首次安装Docker CE之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。在所有三个Ubuntu节点上执行以下所有步骤。
更新apt包索引:
# apt-get update
安装软件包以允许通过HTTPS使用存储库:
# apt-get install apt-transport-https ca-certificates curl software-properties-common -y
(adsbygoogle = window.adsbygoogle || [])。push({});
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
使用以下命令设置稳定的存储库:
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再次更新apt软件包:
# apt-get update
安装最新版本的Docker CE:
apt-get install docker-ce
安装完成后,启动docker服务,并使其在每次系统引导时启动。
# systemctl start docker
# systemctl enable docker
要将docker配置为以普通用户或非root用户身份运行,请运行以下命令:
# usermod -aG docker <username>
# usermod -aG docker manager
# usermod -aG docker worker1
# usermod -aG docker worker2
现在,以指定用户身份登录并运行dockerhello-world
核实。
# su - manager
$ docker run hello-world
成功运行后,将给出以下输出
配置管理器节点以进行群集集群初始化
在这一步中,我们将创建节点的群集集群。要创建群集集群,我们需要在’dockermanager’节点上初始化群集模式,然后将’dockerworker1’和’dockerworker2’节点加入群集。
通过在’dockermanager’节点上运行以下docker命令来初始化Docker Swarm模式。
(adsbygoogle = window.adsbygoogle || [])。push({});
docker swarm init --advertise-addr <manager node IP address>
$ docker swarm init --advertise-addr 192.168.1.103
‘dockermanager’已生成’join token’,将工作节点加入集群管理器将需要’dockermanager’。
配置工作节点加入Swarm集群
现在,要将工作程序节点加入集群,我们将在集群初始化步骤中收到的所有工作程序节点上运行docker swarm join命令:
$ docker swarm join --token SWMTKN-1-4htf3vnzmbhc88vxjyguipo91ihmutrxi2p1si2de4whaqylr6-3oed1hnttwkalur1ey7zkdp9l 192.168.1.103:2377
验证群群集
要查看节点状态,以便我们可以确定节点是否处于活动状态/可用状态等,请从管理器节点中列出群集中的所有节点:
$ docker node ls
如果您在任何时候丢失了联接令牌,可以通过在管理器节点上为管理者令牌运行以下命令来检索它:
$ docker swarm join-token manager -q
检索工作者令牌的相同方法在管理器节点上运行以下命令:
$ docker swarm join-token worker -q
在Swarm群集上部署新服务
在此步骤中,我们将创建第一个服务并将其部署到集群群集。新服务Nginx Web服务器将在默认的http端口80上运行,然后将其公开到主机上的端口8081。我们将使用2个副本创建此nginx服务,这意味着我们的集群中将运行2个容器。如果这些容器中的任何一个失败,它们将再次产生以具有我们在复制选项上设置的所需数量。
$ docker service create --name my-web1 --publish 8081:80 --replicas 2 nginx
成功部署服务后,您将看到以下输出:
(adsbygoogle = window.adsbygoogle || [])。push({});
使用以下docker service命令检查新创建的nginx服务。
$ docker service ls
docker service ps <service name>
$ docker service ps my-web1
如果需要检查nginx服务是否工作正常,可以使用curl命令,也可以在主机的浏览器中检查nginx Web服务器欢迎页面。
$ curl http://dockermanager:8081
在主机上的浏览器中,我们可以访问nginx的欢迎页面
现在,如果需要扩展Nginx服务,我们将制作3个副本,并在管理器节点上运行以下命令:
$ docker service scale my-web1=3
要在缩放后检查输出,我们可以使用docker service ls
要么docker service ps
命令。
我们可以用docker service inspect
命令以检查swarm上已部署服务的扩展详细信息。默认情况下,这会将所有结果呈现在JSON数组中。
结论
Docker已成为使用容器配置,保存和共享服务器环境的一种非常流行的方式。因此,安装应用程序甚至大型堆栈通常可以像运行docker pull或docker run一样简单。将应用程序功能分离到不同的容器中还提供了安全性和依赖性管理方面的优势。