1 什么是swarm
Swarm是Docker公司推出的docker集群管理平台,它将一群Docker主机变成了一台单一的虚拟Docker主机。
Swarm使用标准的Docker API接口,因此,任何支持Docker API的工具都能使用Swarm,包括Docker Compose、Docker Machine、Jenkins等等。
Docker 1.12版本之后,Swarm已经包含在Docker引擎中了,不需要再手动安装Swarm相关的组件了。
Swarm遵循可插拔原则(swap, plug, and play),它的后台引擎是可替换的,在大规模生产环境中,可以将Swarm后端替换成更强大的后端(比如Mesos)。

2 swarm中的几个概念
(1)Node
Swarm节点,是运行Docker引擎的一个实例,通常是一台物理服务器或者是云服务器。节点有两类:
worker node:工作节点,接收和执行任务,运行具体的服务。
manager node:管理节点,用于执行集群命令,调度任务等等。默认情况下管理节点同时也具有工作节点的功能,可以接收和执行任务。

(2)Service
集群中具体要运行的容器。

(3)Task
集群中要执行的命令。

3 Swarm常用命令
(1)集群和节点操作

使用以下3台服务器演示swarm命令:

ecs-dev-07
ecs-dev-08
ecs-dev-09

[root@ecs-dev-07 ~]# docker swarm init
Swarm initialized: current node (w45oeu9569u5vcp0f2i0z26xc) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3qhvwlzbh084t0xygh7semasver547auakxdo5xzdwp5mt91vk-10eep4z6ic54ws8zc7r6aqmhp 172.19.141.21:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. # 将从节点加入集群
docker swarm join --token SWMTKN-1-2v0mg19ouxu6svqdc1ufbwgz7tfrd9f0uhwqeriogygdcovowx-4d558q9qb51429j27at6teq2j 172.19.141.21:2377 # 如果希望从节点作为manager角色加入集群,则主节点上运行以下命令,重新创建token
[root@ecs-dev-07 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-3qhvwlzbh084t0xygh7semasver547auakxdo5xzdwp5mt91vk-2zhuddonlxe1m0d4agpqzopyw 172.19.141.21:2377 # 查看集群信息
[root@ecs-dev-07 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
w45oeu9569u5vcp0f2i0z26xc * ecs-dev-07 Ready Active Leader 19.03.5
x6io92f7wb9sb9ivq0hrr0xja ecs-dev-08 Ready Active Reachable 19.03.4
vsf9pkvxai5m3184evskl2dsc ecs-dev-09 Ready Active Reachable 19.03.5 # 将leader节点停掉,可以看到原来的leader节点状态变成了Unreachable,另外一台主机的角色变成了Leader
[root@ecs-dev-08 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
w45oeu9569u5vcp0f2i0z26xc ecs-dev-07 Unknown Active Unreachable 19.03.5
x6io92f7wb9sb9ivq0hrr0xja * ecs-dev-08 Unknown Active Leader 19.03.4
vsf9pkvxai5m3184evskl2dsc ecs-dev-09 Unknown Active Reachable 19.03.5 # 将当前节点从集群中删除
docker swarm leave -f

 (2)服务操作

# 创建一个具有2个实例的nginx集群
docker service create --name nginx --replicas 2 --network actinia nginx:1.15 # 查看所有的服务列表
[root@ecs-dev-08 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
nyyub2v4xt6s nginx replicated 2/2 nginx:1.15 # 查看nginx服务的具体运行情况
[root@ecs-dev-08 ~]# docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
rb4jd9t95hun nginx.1 nginx:1.15 ecs-dev-08 Running Running 45 seconds ago
s5ljg8d2nf38 nginx.2 nginx:1.15 ecs-dev-07 Running Running 46 seconds ago # 将nginx实例数量变成3个
[root@ecs-dev-08 ~]# docker service scale nginx=3
nginx scaled to 3
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged # 再次查看nginx服务的运行情况,可以看到当前nginx服务数量已经变成了3个
[root@ecs-dev-08 ~]# docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
rb4jd9t95hun nginx.1 nginx:1.15 ecs-dev-08 Running Running 2 minutes ago
s5ljg8d2nf38 nginx.2 nginx:1.15 ecs-dev-07 Running Running 2 minutes ago
r6ptddryp0pq nginx.3 nginx:1.15 ecs-dev-09 Running Running 8 seconds ago # 还可以使用更强大的docker service update命令,对服务进行更多的修改,比如服务的镜像版本、重启策略、环境变量等等。
# 例如,修改服务的镜像版本
docker service update --image nginx:1.14 nginx # 再次查看服务运行情况
# 可以看到1.15版本的nginx服务已经停掉,当前运行的是1.14版本的nginx服务
[root@ecs-dev-08 ~]# docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xcrxhdhuuajo nginx.1 nginx:1.14 ecs-dev-09 Running Running about a minute ago
rb4jd9t95hun \_ nginx.1 nginx:1.15 ecs-dev-08 Shutdown Shutdown 5 minutes ago
afec10q894s9 nginx.2 nginx:1.14 ecs-dev-07 Running Running 56 seconds ago
s5ljg8d2nf38 \_ nginx.2 nginx:1.15 ecs-dev-07 Shutdown Shutdown about a minute ago

(3)网络操作

Docker Swarm使用overlay类型的网络。在同一个overlay网络中的容器,即使是在不同的宿主机上,互相之间也能通讯。不同的overlay网络内的容器是相互隔离的。
overlay网络为每一个服务提供了一个虚拟IP(VIP)和一个域名,同一个网络中的容器可以互相通过虚拟IP和域名进行访问。

# 创建网络
[root@ecs-dev-07 ~]# docker network create --subnet 172.30.0.0/16 --gateway 172.30.0.1 --driver overlay --attachable actinia # 查看网络
[root@ecs-dev-07 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
giepr8kjiq1z actinia overlay swarm
8c85d1fdd11c bridge bridge local
90e4ef8ecdf3 docker_gwbridge bridge local
e945204eb642 host host local
ho2oi9uyks7h ingress overlay swarm
3c325566a9c8 none null local

Docker Swarm介绍的更多相关文章

  1. Docker Swarm 介绍 or 工作原理

    Docker Swarm 介绍 Swarm 简介 Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swar ...

  2. Docker(六):Docker 三剑客之 Docker Swarm

    实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容器集群系统,我们该如何选择 ...

  3. (转) Docker swarm 之介绍与使用

    今天,在站内看到一篇关于Docker Swarm 的文章,非常好,在这里转过来,方便日后查阅 :) 原贴链接: http://www.cnblogs.com/rio2607/p/4445968.htm ...

  4. 本文介绍如何使用 Docker Swarm 来部署 Nebula Graph 集群,并部署客户端负载均衡和高可用

    本文作者系:视野金服工程师 | 吴海胜 首发于 Nebula Graph 论坛:https://discuss.nebula-graph.com.cn/t/topic/1388 一.前言 本文介绍如何 ...

  5. 通过docker-machine和etcd部署docker swarm集群

    本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使 ...

  6. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  7. (转) Docker swarm - 使用体验 1+2

    背景 凭借敏捷开发部署理念的推行,相信对于很多人来说docker这项容器技术已经并不陌生,Docker 1.12引擎发布了快两个月,新引擎中包含了许多特性.诸如: Swarm模式,容器集群的健康检查, ...

  8. 基于 Consul 的 Docker Swarm 服务发现

    Docker 是一种新型的虚拟化技术,它的目标在于实现轻量级操作系统的虚拟化.相比传统的虚拟化方案,Docker 虚拟化技术有一些很明显的优势:启动容器的速度明显快于传统虚拟化技术,同时创建一台虚拟机 ...

  9. 生产环境中使用Docker Swarm的一些建议

    译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...

随机推荐

  1. http协议工作原理及工作流程

    什么是url ? url = 协议 + 域名 + 资源路径 比如: https://www.baidu.com/index.html http : 超文本传输协议 https: 安全套接字协议 HTT ...

  2. Jquery 常用方法及实例(Day_15)

    想要做一件事,永远都不要怕晚.只要你开始做了,就不晚. 而若是你不开始,仅仅停留在思考.犹豫甚至焦虑的状态,那就永远都是零. mouseover() / mouserout() 当鼠标进入 / 离开某 ...

  3. flink Checkpoint优化

    一.设置最小时间间隔 当flink应用开启Checkpoint功能,并配置Checkpoint时间间隔,应用中就会根据指定的时间间隔周期性地对应用进行Checkpoint操作.默认情况下Checkpo ...

  4. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  5. OpenCV 查找轮廓

    本文将结合实例代码,介绍 OpenCV 如何查找轮廓.获取边界框. 代码: contours.py OpenCV 提供了 findContours 函数查找轮廓,需要以二值化图像作为输入.并指定些选项 ...

  6. Go slice 扩容机制分析

    前言 我们都知道 Go 语言中的 slice 具有动态扩容的机制(不知道的同学请先补课 Go 切片) 但是其底层机制是什么呢?本着知其然,知其所以然的探索精神去研究一番.还不是为了应试 手动狗头 go ...

  7. 激光SLAM与视觉SLAM的特点

    激光SLAM与视觉SLAM的特点 目前,SLAM技术被广泛运用于机器人.无人机.无人驾驶.AR.VR等领域,依靠传感器可实现机器的自主定位.建图.路径规划等功能.由于传感器不同,SLAM的实现方式也有 ...

  8. RTOS诊断和错误检查

    RTOS诊断和错误检查 RTOS diagnostics and error checking 查看RTOS显示系列 错误处理不太可能是任何用于嵌入式系统应用程序的操作系统的主要功能.这是资源限制的必 ...

  9. 面试官:说一下JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置

    今天去看牙医,他问我年级轻轻牙齿怎么磨损这么严重?我说,没有人点赞的这些年,我都是咬着牙过来的. Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的 ...

  10. 练习(time.tick定时器监控数据库)

    设立个定时器,监控数据库里fb_state(发布状态),并将数据库中一条记录的开始时间与截止时间和当前时间进行比对.若当前时间在开始时间与结束时间之间,则将发布状态设为1,否则为0. 同时,将此段代码 ...