1. Docker Swarm
- Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
- 使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
- 注意:Docker 1.12.0+ Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm,绝大多数用户已经开始使用 Swarm mode,Docker 引擎 API 已经删除 Docker Swarm。
2. 基本概念
Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。
节点
- 运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点(node)。
- 节点分为管理(manager)节点和工作(worker)节点。
- 管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行。
- 工作节点是任务执行节点,管理节点将服务(service)下发至工作节点执行。
- 集群中管理节点和工作节点的关系:
服务和任务
- 任务(Task)是 Swarm 中的最小调度单位,目前来说就是一个单一的容器。
- 服务(Services)是指一组任务的集合,服务定义了任务的属性。
- 服务有两种模式:
- replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
- global services 每个工作节点上运行一个任务。
- 两种模式通过
docker service create
的--mode
参数指定。 - 容器、任务、服务的关系:
3. 创建 Swarm 集群
创建一个包含一个管理节点和两个工作节点的最小 Swarm 集群。
1. 初始化集群
使用
docker swarm init
在本机初始化一个 Swarm 集群。docker swarm init --advertise-addr 10.9.104.10
如果你的 Docker 主机有多个网卡,拥有多个 IP,必须使用
--advertise-addr
指定 IP。执行
docker swarm init
命令的节点自动成为管理节点。2. 增加工作节点
在另外两台服务器上执行上一步创建管理节点时候的输出的加入 swarm 集群的命令。
docker swarm join --token SWMTKN-1-48gv64hrggttsbgtas45tnf9vsn65ajr5kqerwmdnf963mik6v-eitxbh4nh1ksc8y96p6bfqgg6 10.9.104.10:2377
假如之后忘记命令,查看加入的命令
docker swarm join-token manager
3. 查看集群
- 在管理节点使用
docker node ls
查看集群。docker node ls
4. 将其他节点设置为管理节点
docker node promote HOSTNAME
使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点上运行。
1. 新建服务
在创建好的 Swarm 集群中运行一个名为 nginx 的服务。
docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
现在我们使用浏览器,输入任意节点 IP,即可看到 nginx 默认页面。
2. 查看服务
使用 docker service ls 来查看当前 Swarm 集群运行的服务。
docker service ls
使用 docker service ps 来查看某个服务的详情。
docker service ps nginx
使用 docker service logs 来查看某个服务的日志。
docker service logs nginx
3. 删除服务
- 使用 docker service rm 从 Swarm 中移除某个服务。
docker service rm nginx
5. Portainer
portainer 是 Docker 的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
portainer 集群运行
下载 portainer 镜像
# 查询当前有哪些 portainer 镜像
docker search portainer
docker pull portainer/portainer
安装 portainer
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer