第八节:基于docker swarm进行集群管理和基于service/stack进行容器服务管理

一. 概念剖析

1. docker compose

 docker compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。它主要是通过docker-compose.yml文件进行相关容器的配置,然后通过一些简单的指令可以操作该配置文件所包含的容器,常见的操作有:创建容器并启动、关闭容器、删除容器等等。(详见:https://www.cnblogs.com/yaopengfei/p/13672708.html)

 注:docker compose相关指令主要是对一个docker-compose.yml文件进行管理,所以它的指令主要服务于单服务器,不适用于集群环境。

 另外,一个docker-compose.yml可以管理一组容器,也就是一组任务的集合,这个也叫作services

2. swarm

(1). 定义

 Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。Swarm 和 K8s 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。

 Swarm内部主要是通过节点(node)进行集群管理的,节点分为:管理节点和工作节点。

简单的说:swarm就是用来创建管理docker集群的。

(2). 节点概念

 运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) ,节点分为管理 (manager) 节点和工作 (worker) 节点。

 A. 管理节点:

  用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。

 B. 工作节点

  是任务执行节点,管理节点将服务 (service)下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。

3. services

 services是指一组任务的集合,服务定义了任务的属性,服务有两种模式,如下,两种模式通过 docker service create 的 --mode 参数指定。

 (1). replicated services 按照一定规则在各个工作节点上运行指定个数的任务。

 (2). global services 每个工作节点上运行一个任务

简单的说:services就是在swarm构建好的集群的基础上进行 “ 单容器创建等容器相关的管理工作 ”。(这里的单容器是指一条指令只能操作一个容器,但这条指令可以在集群的每个节点上生效)

4. stack

 Stack 是基于 Docker Swarm 之上来完成应用的部署,Stack 能够在单个声明文件中定义复杂的多服务应用。Stack 还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚,以及其他功能!它可以通过一个docker-compose.yml文件进行多个容器的管理。

简单的说:stack就是在swarm构建好的集群的基础上进行“ 多容器创建等容器相关的管理工作 ”。(这里的多容器是指基于docker-compose.yml可以操作多个容器,这条指令可以在集群的每个节点上生效)

换句话说:stack可以同时操作多个services。

 

 5. 总结

   Dockerfile、docker compose 、service、node、 swarm、stack

(1). Dockerfile是用来构建镜像的,一个Dockerfile只能构建一个镜像

(2). docker compose可以在单机上构建一组任务,可以管理多个容器

(3). service 是一组任务,包含多个镜像和容器,通常用于在集群的基础上管理容器

(4). node是swarm中的节点概念,一个节点对应一台服务器。

(5). swarm是用来构建集群

(6). stack是在集群的基础上管理容器,他可以操作多个service

二. swarm+service集群容器管理

1. 环境准备

 (1). 两台centos服务器:192.168.137.201 和 192.168.137.202

 (2). 每个服务器事先准备好两个webapi镜像:ypfwebapi1(暴露端口9001) 和 ypfwebapi2(暴露端口9002)

 (3). 服务器的防火墙要关闭,相关指令如下:

#查看防火墙服务
systemctl status firewalld.service
#关闭防火墙
systemctl stop firewalld.service
#永久关闭防火墙(可能不好用)
systemctl disable firewalld.service

2. 搭建集群的步骤

(1). 选择192.168.137.201作为管理(manager)节点,运行下面指令

docker swarm init --advertise-addr 192.168.137.201 

(2). 在192.168.137.202主机上执行下面指令,加入工作节点(worker)这个集群

 docker swarm join --token SWMTKN-1-254wexmq8blkpmi2ujs8o6job51u6e1jjy3k44pyngwjzx3my2-anldosyr1a9wbww4lriycuaxw 192.168.137.201:2377

PS:出现下面错误,说明201服务器的防火墙没关:(指令见上)

然后重新执行加入集群的命令,执行成功

3. 构建容器的步骤 

(1). 在管理(manager)节点上执行下面指令:  (201服务器)

# 基于镜像ypfwebapi1构建service_con1容器
docker service create --replicas 2 --name service_con1 --publish 8201:9001 ypfwebapi1
# 基于镜像ypfwebapi2构建service_con2容器
docker service create --replicas 2 --name service_con2 --publish 8202:9002 ypfwebapi2

 参数说明:

 A. - -replicas 2 : 代表在2个任务,即在两台主机上执行上述指令

 B. -- publish:端口映射,8201为容器的端口,9001是镜像的端口。

注:程序的端口必须写死在程序中或dockerfile中,因为这里不能动态传参。

运行如图:

(2). 查看相应信息

  A. 在管理节点服务器上: 用指令【docker service ls】查看集群中的容器情况  , 【docker node ls】查看节点情况。

 B. 在工作节点服务器上,用指令【docker ps】查看

4. 测试

 经测试,以下4个地址均可以正常访问。

 http://192.168.137.201:8201/weatherforecast    http://192.168.137.201:8202/weatherforecast  http://192.168.137.202:8201/weatherforecast  http://192.168.137.202:8202/weatherforecast

5. 指令总结

 

二. swarm+stack进行集群容器管理

1. 环境准备

   同上。

2. 搭建集群

   同上。

3. stack构建容器步骤 

(1). 在管理节点服务器上(201服务器)进行操作

  在工作目录上新建一个文件夹 【mkdir mystack】,然后新建一个docker-compose.yml文件【vi docker-compose.yml】,复制下面内容进去并保存。

内容如下:

{
  "version": "3.8",
  "services": {
    "api1": {
    "image": "ypfwebapi1", "ports": [ "8301:9001" ], "deploy": { "mode": "replicated", "replicas": 2 } }, "api2": {
    "image": "ypfwebapi2", "ports": [ "8302:9002" ], "deploy": { "mode": "replicated", "replicas": 2 } } } }

 PS: 这里个人倾向使用json格式,缩进的那种格式非常容易出错。 参数介绍详见:https://www.cnblogs.com/yaopengfei/p/13672708.html

(2). 进入mystack文件下,运行下面指令进行发布,其中ypfstack1是 stack的名称。

docker stack deploy -c docker-compose.yml ypfstack1

(3). 查看相关信息

 A. 查看所有的stack  【docker stack ls】

 B. 查看所有的service 【docker service ls】

4. 测试

 以下4个地址均能访问

 http://192.168.137.201:8301/weatherforecast   http://192.168.137.201:8302/weatherforecast  http://192.168.137.202:8301/weatherforecast  http://192.168.137.202:8302/weatherforecast

5. 其他

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
原文地址:https://www.cnblogs.com/yaopengfei/p/13710126.html