案例一概述及前置知识点
概述:
创鑫公司给云计算工程师提出新的要求,可将集群中所有Docker Engine整合进一个虚拟的资源池,通过执行命令与单一的主Swarm进行沟通,而不必分别和DockerEngine沟通。在灵活的调度策略下,IT团队可以更好地管理可用的主机资源,保证应用容器的高效运行
- DockerSwarm是Docker公司2014年出品的基于Docker集群管理调度工具,能够将多台主机构建成一个Docker集群,并结合Overlay网络实现容器调度和互访
- 用户可以通过Swarm API来管理多个主机的Docker
- Swarm集群包含Manager和Worker两类节点,基于Docker Engine可以部署任何类型的工作节点
- 在Swarm集群中部署镜像创建一个服务时,一些大型的应用上下文环境(运行环境)中需要各种服务配合工作,这些服务称之为微服务
- 创建服务时,可以指定要使用的容器镜像以及容器中要运行的命令,同事可以定义以下选项: 
  - 群集要对外服务的端口
- 在群集中用于服务之间相连的Overlay网络
- 滚动更新策略
- 群集总运行的副本数量、
 
- Docker Swarm基本特性 
  - 去中心化设计
- 声明式服务模型
- 协调预期转台与实际状态的一致性
- 多主机网络
- 负载均衡
- 安全策略(使用TLS对数据进行保护)
- 滚动更新
 
- Docker Swarm架构图 
  - Docker Swarm提供强大的集群能力,能够使多个Docker Engine组合形成一个group,提供多容器服务
- Swarm使用标准的Docker API
 

案例一:Docker Swarm群集部署

- 把需要的镜像同步到三个主机

- 初始化一个集群,指定一个节点并生成一个集群


(使用上述docker swarm join 命令那一行语句,在其他的worker节点上执行这个语句,即可将此节点加入到swarm集群当中,并作为一个worker节点)
- 创建完成之后,可以使用docker info 命令来查看当前集群的节点信息

2377:TCP端口,建立集群使用的端口
7946:TCP/UDP,节点之间进行通信的端口
4789:TCP/UDP端口,数据存储使用的端口
也可使用docker node ls 查看节点的信息

Active:能运行容器
pause:当前容器继续执行,新调度过来的容器不接收
drain:(污点)新调度过来的容器不接收,原有的容器调度走,保持自身没有容器运行
- 改变Manager管理节点的状态

- 给节点打标签,将指定的容器运行在指定的节点之上

--label-add:添加标签
group=g2:这是一个完整的标签名,是一个键值对
- 查看指定节点的详细信息

- 在swarm中跑一个服务

- 查看服务创建是否成功

- 给其他worker节点提权

提权过后,他们有一些特点定的权限,但不是实际的Leader
- 给其他集群降权

- 脱离集群。解散集群的命令

若是想节点脱离集群,在worker节点上执行此命令即可
若是想解散该集群,在Manager节点上执行此命令
--force:强制执行
- 创建服务并且指定副本数量

- 查看服务日志



扩容

缩容

删除服务

滚动更新

更新已创建服务的镜像

Docker的四种网络模式:
- bridge
- host
- none
- container
创建网络

创建服务端的时候指定网络

创建数据卷以实现数据共享
一、直接创建数据卷,将创建的数据卷直接在创建服务的时候指定给服务
(这种方式的弊端是,需要到每个节点依次修改数据)
1、先创建数据卷

2、创建的数据卷的位置:/var/lib/docker/volumes/

2、创建服务时直接指定数据卷

3、查看创建的数据卷

二、共享存储(NFS)数据卷
- 先创建一个共享目录(所有的节点都要创建)

- 给每个节点安装NFS,以便实现卷数据的共享

- 在Manager节点,设置配置文件(/etc/exports)

- 修改配置文件里边的内容

- 在Manager节点上开启以下两种服务

- 在worker节点上挂载目录

- 在Manager节点上创建新的服务,并重新指定挂载类型,以及来源共享目录

- 查看创建的结果

- 在Manager节点创建一个测试文件,会发现其他的worker节点会有相同的数据内容 
  - 在Manager节点创建测试内容 
    - echo "test" > /var/vhost/www/aa/index.html
 
- 在worker节点创建测试内容 
    - echo "test" > /var/share/nginx/html/index.html
 
 
- 在Manager节点创建测试内容 
    
经过对比,发现无论在那个节点上创建测试文件,最终都会共享到所有节点上,因为在Manager节点把创建的共享目录已经挂载到其他的worker节点上的目录当中










