学习目标:
- Docker的网络管理
- Docker Swarm集群的使用
- Volumes数据卷的使用
1 Docker Swarm 概述
Docker Swarm集群的主要特点如下。
- 方便创建和管理集群
- 可扩展
- 可实现期望的状态调节
- 集群中多主机网络自动拓展管理
- 提供服务发现能力
- 可实现负载均衡
- 安全性强
- 支持延迟更新和服务回滚
2 Docker Swarm 使用
2.1 环境搭建
(1)准备3台Ubuntu系统主机(即用于搭建集群的 3 个 Docker 机器),每台机器上都需要安装 Docker 并且可以连接网络,同时要求 Docker 版本必须是 1.12 及以上,因为老版本不支持 Docker Swarm。
(2)集群管理节点 Docker 机器的 IP 地址必须固定,集群中的所有节点都能够访问该管理节点。
(3)集群节点之间必须使用相应的协议并保证其以下端口号可用:
- 用于集群管理通信的 TCP 端口 2377;
- TCP 和 UDP 端口7946,用于节点间的通信;
- UDP 端口 4789,用于覆盖网络流量。
为了进行下面示例的演示,此处按照要求在虚拟机中分别安装了 3 台使用 Ubuntu16.04 系统的机器,这三台机器的主机名称分别为 manager1 (作为管理节点)、worker1 (作为工作节点)和 worker2 (作为工作节点),其 IP 地址分别如下。
manager1: 192.168.197.143
worker1: 192.168.10.144
worker2: 192.168.10.145
2.2 创建 Docker Swarm 集群
(1)在名为manager1的Docker机器上创建Docker Swarm集群,具体操作指令如下。
$ docker swarm init --advertise-addr 192.168.197.143
然后在此节点查看集群节点信息。
(2)在管理节点上,使用 docker node ls 指令查看集群节点信息。
2.3 向 Docker Swarm 集群添加工作节点
(1)启动另外两台 Docker 机器 worker1 和 worker2,分别打开终端窗口,向集群中加入工作节点的指令,具体操作指令如下。
$ docker swarm join --token SWMTKN-1-5brzty1cm6w9hmpej4viggq7ekclpdlq08r sfupzdi20u5wldg-2n0mw1wvli3qdjvzauxrida26 192.168.197.143:2377
Note:需要特别注意的是,上述指令的 --token 表示向指定集群中加入工作节点的认证信 息,一定要使用自己在前面创建 Docker Swarm 集群时返回的向集群中添加工作节点的指令。这一点在管理节点上执行 docker node join-token worker 指令进行查看。
(2)再次在集群管理节点上使用 docker node ls 指令查看集群节点信息。
2.4 向 Docker Swarm 集群部署服务
在向 Docker Swarm 集群中部署服务时,既可以使用 Docker Hub 上自带的镜像来启动服务,也可以使用自己通过 Dockerfile 构建的镜像来启动服务。若使用自己通过 Dockerfile 构建的镜像来启动服务,那么必须先将镜像推送到 Docker Hub 中心仓库。
这里使用 Docker Hub 上自带的 alpine 镜像为例来部署集群服务,具体操作指令如下。
$ docker service create --replicas 1 --name helloworld alpine ping docer.com
2.5 查看 Docker Swarm 集群中的服务
(1)当服务部署完成后,在管理节点查看当前集群中的服务列表信息。
$ docker service ls
(2)查看部署的服务的具体详情。
$ docker service inspect helloworld
(3)查看指定服务在集群上节点的分配和运行情况。
$ docker service ps helloworld
2.6 更改 Docker Swarm 集群服务副本数量
$ docker service scale helloworld=5
2.7 删除服务
对于不需要的服务,可以进行删除,操作指令如下。
$ docker service rm helloworld
在集群管理节点 manager1 上执行上述删除服务后,该服务就会在集群中彻底删除。
2.8 访问服务
前面部署的服务都没有直接向外界暴露服务端口,外界也无法正常访问服务。接下来我们就通过自定义 overlay 驱动网络为例来讲解集群下的网络管理与服务访问。
(1)在集群管理节点 manager1 上,查看网络列表。
$ docker network ls
(2)在集群管理节点 manager1 上,创建以 overlay 为驱动的自定义网络。
$ docker network create --driver overlay my-multi-host-network
(3)在集群管理节点 manager1 上,
$ docker service create --network my-multi-host-network --name my-web --publish 8080:80 --replicas 2 nginx
(4)在集群管理节点 manager1 上,查看服务的两个服务副本运行情况。
$ docker service ps my-web
(5)外界访问服务
打开浏览器,使用任意一台节点机器的 “IP + 8080” 端口进行服务访问,都可以正常显示。