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. Docker Swarm(八)滚动更新、回滚服务

    滚动更新.回滚服务 默认情况下, swarm一次只更新一个副本,并且两个副本之间没有等待时间,我们可以通过: # 定义并行更新的副本数量--update-parallelism# 定义滚动更新的时间间 ...

  2. 自动做bond的脚本

    #!/bin/bash # 先备份原来的网卡配置文件 find /etc/sysconfig/network-scripts/ -type f -name "ifcfg*"|xar ...

  3. 046.Python协程

    协程 1 生成器 初始化生成器函数 返回生成器对象,简称生成器 def gen(): for i in range(10): #yield 返回便能够保留状态 yield i mygen = gen( ...

  4. Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体

    Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...

  5. haproxy env 安装与基础配置

    1. 安装 Use docker.package or source installations to install 第三方仓库 https://pkgs.org/download/haproxy ...

  6. 八、.net core(.NET 6)配置读取appsettings文件内容的通用功能

     添加通用读取配置文件功能 在Wsk.Core.Package项目下,新增Microsoft.Extensions.Configuration包: 在启动项目下,设置appsettings.json属 ...

  7. Go语言协程并发---管道信号量应用

    package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...

  8. Go基础结构与类型04---基本数据类型

    package main import "fmt" func main() { //整型 var a byte = 123 var b rune = 123 var c int = ...

  9. 2021.5.23 noip模拟2(排序|划艇|放棋子)

    今天比昨天更惨,惨炸了 看到T1不会,跳!!! T2不会,再跳!!!! T3不会,后面没题了:::: 无奈无奈,重新看T1,然鹅时间已经过去了一个小时 然而我一想不出题来就抱着水瓶子喝水,然后跑厕所, ...

  10. GPU加速计算

    GPU加速计算 NVIDIA A100 Tensor Core GPU 可针对 AI.数据分析和高性能计算 (HPC),在各种规模上实现出色的加速,应对极其严峻的计算挑战.作为 NVIDIA 数据中心 ...