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)下发至工作节点执行。
  • 集群中管理节点和工作节点的关系:

image.png

服务和任务

  • 任务(Task)是 Swarm 中的最小调度单位,目前来说就是一个单一的容器。
  • 服务(Services)是指一组任务的集合,服务定义了任务的属性。
  • 服务有两种模式:
    • replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
    • global services 每个工作节点上运行一个任务。
  • 两种模式通过 docker service create--mode 参数指定。
  • 容器、任务、服务的关系:

image.png

3. 创建 Swarm 集群


创建一个包含一个管理节点和两个工作节点的最小 Swarm 集群。

1. 初始化集群

  • 使用 docker swarm init 在本机初始化一个 Swarm 集群。

    1. docker swarm init --advertise-addr 10.9.104.10
  • 如果你的 Docker 主机有多个网卡,拥有多个 IP,必须使用 --advertise-addr 指定 IP。

  • 执行 docker swarm init 命令的节点自动成为管理节点。

    2. 增加工作节点

  • 在另外两台服务器上执行上一步创建管理节点时候的输出的加入 swarm 集群的命令。

    1. docker swarm join --token SWMTKN-1-48gv64hrggttsbgtas45tnf9vsn65ajr5kqerwmdnf963mik6v-eitxbh4nh1ksc8y96p6bfqgg6 10.9.104.10:2377
  • 假如之后忘记命令,查看加入的命令

    1. docker swarm join-token manager

3. 查看集群

  • 在管理节点使用 docker node ls 查看集群。
    1. docker node ls

4. 将其他节点设置为管理节点

  1. docker node promote HOSTNAME
  • 将集群中的其他节点设置为管理节点,此时,就形成了一个高可用的 swarm 集群。

    4. 部署服务


使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点上运行。

1. 新建服务

  • 在创建好的 Swarm 集群中运行一个名为 nginx 的服务。

    1. docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
  • 现在我们使用浏览器,输入任意节点 IP,即可看到 nginx 默认页面。

    2. 查看服务

  • 使用 docker service ls 来查看当前 Swarm 集群运行的服务。

    1. docker service ls
  • 使用 docker service ps 来查看某个服务的详情。

    1. docker service ps nginx
  • 使用 docker service logs 来查看某个服务的日志。

    1. docker service logs nginx

3. 删除服务

  • 使用 docker service rm 从 Swarm 中移除某个服务。
    1. docker service rm nginx

5. Portainer


portainer 是 Docker 的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。

portainer 集群运行

  • 下载 portainer 镜像

    1. # 查询当前有哪些 portainer 镜像
    2. docker search portainer
    3. docker pull portainer/portainer
  • 安装 portainer

    1. docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer