在Swarm里管理服务和程序

我们的集群已经OK,是时候计划部署几个服务了。之前提到,管理者节点的角色是接受Docker命令,并且将他们应用到集群里面。因此,我们会在管理者节点创建服务。

注意

在这点上,确实没有什么工作需要在工作节点完成,因为他们受到管理者节点全面控制。

创建一个服务

命令如下:

docker service create --replicas  -p : --name

我们在管理者节点运行上面的命令。下面,我们使用WordPress例子来向大家介绍。由于我们已经在本地拥有了这个镜像,所以省去了从hub上面下载的过程。

我们使用副本数量为3,因为我们现在有三个工作节点;使用docker node ls命令可以查到我们有几个节点。

注意

We do not create a replica count; this introduces the following topics. -p参数 :将容器内部的端口映射到主机端口。我们没有必要创建和节点数量相同的副本数量。其他节点可以处理不同的应用,比如数据库:




容器内 用主机dns 容器ip地址_WordPress


我们创建了一个web,基于WordPress镜像,并且将主机的80端口映射给容器的80端口。

服务列表

命令如下:

docker service ls

该命令查看当前运行的服务以及其他信息,比如副本数量,镜像文件,端口等等。

从输出可以看出,我们刚刚启动的服务以及相关信息:


容器内 用主机dns 容器ip地址_容器内 用主机dns_02


服务状态

通过如下命令,我们可以知道我们的服务是否正常运行:

docker service ps

从服务列表中,我们看不到所有我们需要的信息,比如,该服务部署到了哪个节点。但是我们可以知道服务是否正常运行,以及遇到的问题,如果有的话。当我们在管理者节点上运行的时候,我们有如下输出:


容器内 用主机dns 容器ip地址_WordPress_03


注意

查看状态很重要。有一种情况,当我们在节点升级或者更新节点的时候,docker ps会告诉我们节点的状态。在理想的DockerSwarm设置中,当一个节点异常,管理者节点可以将业务流量定向到其他可用节点,因此会有一点点宕机时间,除非监控可行。在节点上运行的之前,首先使用该命令看看节点的状态。

我们如何知道我们的站点运行了?

我们可以通过在浏览器里面输入工作节点的IP地址,来验证我们的WordPress是否正常运行。


容器内 用主机dns 容器ip地址_docker_04


下面是验证截图:


容器内 用主机dns 容器ip地址_docker_05


注意

打开任何运行WordPress web服务的ip地址,包括管理者节点,会打开相同的地址。

行动2-在Swarm里面运行服务

首先,确保我们的管理者节点在运行。

下面就让我们来熟悉Swarm里的服务管理。

下面我们被要求在swarm里面部署一个新的postgre服务。

  • 创建一个节点,命名为dbworker:
docker-machine create --driver virtualbox dbworker


容器内 用主机dns 容器ip地址_容器内 用主机dns_06


  • 将新worker节点加入到swarm里面:


容器内 用主机dns 容器ip地址_WordPress_07


  • 创建一个新的数据库服务,命名为db,使用postgre镜像:
docker service create --replicas 1 --name db postgres
  • 输出如下:


容器内 用主机dns 容器ip地址_WordPress_08


  • 使用如下的步骤验证postgre的运行情况:
  • 端口映射,将主机的5432端口映射给db容器的5432端口:
docker run --name db -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres


容器内 用主机dns 容器ip地址_swarm 容器固定ip地址_09


  • 运行docker ps查看正在运行的容器列表;我们能看到postgre容器是在UP状态:


容器内 用主机dns 容器ip地址_WordPress_10


  • 停止容器的命令如下:


容器内 用主机dns 容器ip地址_容器内 用主机dns_11