dockerswarm回滚(docker swarm 指定节点运行)
Docker-Swarm三节点部署
在开始之前,Dcoker Swarm 集群部署 机器需要满足以下几个条件:
swarm集群中node的availability状态可以为 active或者drain,其中:
active状态下,node可以接受来自manager节点的任务分派;
drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)
可以看到 swarm-node1 已经关闭了
我们可以看到原来 swarm-node1 上的nginx 已经关闭了,而且在其他节点上再创建了等量的 nginx 服务
当我们重新恢复 swarm-node1 节点的 docker 服务(模拟机器恢复了)
分配到 swarm-node1 节点的并没恢复
docker service部署的是单个服务,我们可以使用docker stack进行多服务编排部署
创建 docker-compose.yml
Docker Swarm
Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具。 Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker 原生的 Swarm 集群具备与 Mesos 、 Kubernetes 竞争的实力。使用 Swarm 集群之前需要了解以下几个概念。
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。节点分为 管理 (manager) 节点和工作 (worker) 节点 。
管理节点用于 Swarm 集群的管理, docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader ,leader 通过 raft 协议实现。
工作节点是任务执行节点,管理节点将服务 ( service ) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系。
任务(Task) 是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器; 服务(Services) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
两种模式通过 docker service create 的 --mode 参数指定。来自 Docker 官网的这张图片形象的展示了容器、任务、服务的关系。
我们这里利用上一节的 docker machine 来充当集群的主机,首先先创建一个 manager 节点,然后在该节点上执行初始化集群命令:
执行 docker swarm init 命令的节点自动成为管理节点。
管理节点初始化完成后,然后同样的用 docker-machine 创建工作节点,然后将其加入到管理节点之中去即可:
我们可以看到上面的提示信息: This node joined a swarm as a worker. ,表明节点已经加入到 swarm 集群之中了。
经过上边的两步,我们已经拥有了一个最小的 Swarm 集群,包含一个管理节点和两个工作节点。
管理节点使用 docker node ls 查看集群:
使用 docker service logs 来查看某个服务的日志。
使用 docker service rm 来从 Swarm 集群移除某个服务:
正如之前使用 docker-compose.yml 来一次配置、启动多个容器,在 Swarm 集群中也可以使用 compose 文件(docker-compose.yml)来配置、启动多个服务。
上一节中,我们使用 docker service create 一次只能部署一个服务,使用 docker-compose.yml 我们可以一次启动多个关联的服务。
我们以在 Swarm 集群中部署 WordPress 为例进行说明:(docker-compose.yml)
其中 constraints: [node.role == manager] 是调度策略,文档地址:
在 Swarm 集群管理节点新建该文件,其中的 visualizer 服务提供一个可视化页面,我们可以从浏览器中很直观的查看集群中各个服务的运行节点。
在 Swarm 集群中使用 docker-compose.yml 我们用 docker stack 命令,下面我们对该命令进行详细讲解。
部署服务使用 docker stack deploy ,其中 -c 参数指定 compose 文件名。
要移除服务,使用 docker stack down :
该命令不会移除服务所使用的 数据卷 ,如果你想移除数据卷请使用 docker volume rm 。
五十九、Docker Swarm-Overlay网络详解
对于理解swarm的网络来讲,个人认为最重要的两个点:
这个网络会同步到所有的swarm节点上
创建一个服务连接到这个 overlay网络, name 是 test , replicas 是 2
可以看到这两个容器分别被创建在worker1和worker2两个节点上
到worker1和worker2上分别查看容器的网络连接情况
这个容器有两个接口 eth0和eth1, 其中eth0是连到了mynet这个网络,eth1是连到docker_gwbridge这个网络
在这个容器里是可以直接ping通worker2上容器的IP 10.0.1.9的