Docker Swarm 是一个用于创建和管理docker集群的工具。在1.12版本之后集成了swarmkit工具,该工具主要用于Docker集群管理和容器编排。
优势:
1.方便创建和管理集群
Docker Swarm是Docker源生的集群管理工具,可以直接使用Docker客户端来创建并管理一个Docker Swarm集群,然后在其中部署应用程序服务,而不需要额外的编配软件来创建和管理集群。
2. 可扩展
对于集群中的每个服务,都可以声明要运行的副本任务数量,当向上或向下进行扩展时候,集群管理器将通过添加或删除副本任务来自适应所需的状态
3. 可实现期望的状态调节
集群管理器节点不断监视集群状态,并协调实际和期望状态之间的任何差异
4. 集群中多主机网络自动扩展管理
Docker Swarm 为集群服务提供了一个覆盖网络,当它初始化或更新应用程序时,集群管理器会自动将在工作节点创建或更新网络来管理服务。
5. 提供服务发现功能
集群管理器节点为集群中的每个服务分配一个唯一的Dns名称,通过Docker Swarm集群提供的负载均衡功能,可以通过嵌入在集群中的Dns服务器来查询集群中运行的每个容器
6. 可实现负载均衡
可以将容器中服务的端口暴露给外部负载均衡器,而在内部,集群允许指定如何在节点之间分配服务容器
7. 安全性强
集群中的每个节点强制使用TLS相互认证和加密,以确保自身和其他节点之间的通信安全。此外,集群还支持使用自定义的自签名证书来保证安全
8. 支持延迟更新和服务回滚
在进行服务更新时候,可以将服务更新逐步延伸到每个节点上,集群管理器允许服务部署到不同节点组之间时出现延迟,如果某个及诶单出现问题,还可以将服务回滚到以前的版本
本地测试环境,三台Centos系统服务器
环境支持:
1. 安装Docker版本必须时1.12及以上
2.服务器Ip地址固定,保证集群中所有节点能够访问该管理节点
3.集群节点之间必须使用相应的协议保证一下端口可用:
1)用于集群通信的Tcp端口2377
2)Tcp和UDP端口7946, 用于节点间通信
3)UDP端口4789,用于覆盖网络流量
服务器信息:
manager1: 172.16.114.52 worker1: 172.16.109.67 worker2: 172.16.109.68 manager1: 管理节点 worker1:工作节点 worker2: 工作节点
开始搭建:
1. 在manager1所在的机器上创建Docker Swap集群
docker swarm init --advertise-addr 172.16.114.52 注意: 如果是测试单节点的集群,直接使用docker swarm init Swarm initialized: current node (ofv77vow2nhr4o9kpoof581ix) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-30e0wpgn5e0oq6i2vlvioqge3h2oawv52p0w1vdgq68gn8imwu-8lnpufoszaotkpe0mhchut2xk 172.16.114.52:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
此时创建成功了,可以查看集群节点信息
docker node ls
2. 向Docker Swarm集群添加工作节点
docker swarm join --token SWMTKN-1-30e0wpgn5e0oq6i2vlvioqge3h2oawv52p0w1vdgq68gn8imwu-8lnpufoszaotkpe0mhchut2xk 172.16.114.52:2377 注意: 这里--token表示向指定集群加入工作节点的认证信息
3. 向Docker Swarm集群部署服务
可以使用Docker Hub上自带的镜像来启动服务,也可以使用Dockerfile构建的镜像来启动服务。如果自己构建的镜像也需要先推送到Docker Hub中心仓库。
docker service create --replicas 1 --name helloworld alpine ping docker.com --replicas: 指定副本数量 ping docker.com:服务启动后执行的命令
集群服务相关操作:
# 查看当前集群中的服务列表信息 docker service ls # 查看部署的服务的具体详情 docker service inspect helloworld # 查看指定服务在集群节点上的分配和运行情况 docker service ps helloworld # 更改Docker Swarm 集群服务副本数量 docker service scale helloworld=5 # 删除服务 docker service rm helloworld
4. 访问服务
1)查看集群模式下的网络情况
docker network ls
会比非集群多一些网络方式,例如overlay
2) 在集群管理节点manage1上,创建以overlay为驱动的自定义网络
docker network create --driver overlay my-multi-host-network
3) 在集群管理节点上再次部署服务
docker service create --network my-multi-host-network --name my-web --publish 8080:80 --replicas 2 nginx 参数说明: --network 指定服务使用自定义的overlay驱动网络my-multi-host-network连接 --name. 指定服务启动后的名称 --publish(-p) 映射外部服务端口 --replicas 指定服务的副本数量 nginx 基于nginx镜像构建的服务
4)查看服务的两个副本运行情况
docker service ps my-web
5) 外部访问
打开浏览器,使用任意一台节点机器的IP+8080端口进行服务访问都可以
这是Docker Swarm负载均衡特点