Docker Swarm
Docker Swarm提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
Swarm mode内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker原生的Swarm集群具备与Mesos、 Kubernetes 竞争的实力。
基本概念
Swarm 是使用SwarmKit构建的Docker引擎内置(原生)的集群管理和编排工具。
节点
运行Docker的主机可以主动初始化一个Swarm集群或者加入一个已存在的 Swarm 集群,这样这个运行Docker的主机就成为一个Swarm集群的节点 ( node ) 。节点分为管理节点和工作节点。

- 管理节点用于Swarm集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行) 。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader ,leader通过raft协议实现。
- 工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。可以通过配置让服务只运行在管理节点。
任务
任务(Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
服务
服务 ( Services ) 是指一组任务的集合, 服务定义了任务的属性。服务有两种模式,两种模式通过 docker service create 的 --mode 参数指定。
- replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
- global services 每个工作节点上运行一个任务。
服务和任务的关系如下图所示

创建Swarm集群
初始化集群
使用docker swarm init命令。如果Docker主机有多个网卡,拥有多个IP,必须使用--advertise-addr指定IP。执行docker swarm init命令的节点自动成为管理节点。
$ docker swarm init --advertise-addr 192.168.222.128
Swarm initialized: current node (ni1omlgyo0vw1h8e93e124srk) is now a manager.To add a worker to this swarm, run the following command:docker swarm join \--token SWMTKN-1-47jtzmzdyej3ey59gsgckk54gbt0cqe28gjvh9gg4j6uweccst-eugtpcgbm34370ljz1bvre6jy \192.168.222.128:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
增加工作节点
使用docker swarm join命令加入到集群中。使用docker node ls查看集群。
# 加入集群
$ docker swarm join \--token SWMTKN-1-2dqppg075l4xoozwsp8hts1v1ro750fhiawa28y8u9fpo0t0tf-74c7t1eglegf0h1z7jr6g6rjj \192.168.222.128:2377# 查看集群
$ docker node ls# 将worker节点提升为manager节点,在manager节点执行如下命令:
docker node promote 节点名称|节点ID# 将manager节点降低为worker节点,在manager节点执行如下命令:
docker node demote 节点名称|节点ID# 在要脱离集群的节点上使用以下命令, 主动离开集群,让节点处于down状态,才能删除
docker swarm leave# 节点脱离集群后,才能删除节点,删除节点使用如下命令
docker node rm 节点名称|节点ID# 强制删除集群
$ docker swarm leave --force 部署服务
使用docker service命令来管理Swarm集群中的服务,该命令只能在管理节点运行。
# 创建服务
docker service create --replicas 3 -p 3306:3306 --name db -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=sql_test \-e MYSQL_USER=myuser -e MYSQL_PASSWORD=userpassword mysql # 查看服务
docker service ls 查看当前Swarm集群运行的服务
docker service ps db 查看容器状态
docker service logs db 查看服务日志
docker service inspect nginx 查看服务的详细信息# 删除服务
docker service rm db# 更新服务
docker service update --image nginx:alpine nginx# 减少服务实例(这比直接删除服务要好)
docker service scale nginx=0# 增加服务实例
docker service scale nginx=5
使用docker stack命令在集群中部署多个服务,docker stack文件内容和docker compose文件类似。
- 其中image关键字是服务对象中唯一的必填项,docker stack和docker compose的区别是docker stack不支持构建,所有的镜像必须提前构建完成。
- 在Docker Swarm中,虽然 --link 功能已被弃用,但可以通过使用服务发现机制来模拟 link 效果。给不同的服务指定相同的Overlay网络,就可以通过服务名实现互相访问。服务发现机制是自动的,无需手动配置。它使用DNS来解析容器名称,并在整个Overlay网络中实现容器之间的连接。例如下面的例子中,在bms服务中就可以通过bookmanage_db连接数据库。
# 部署服务命令
docker stack deploy -c docker-compose.yml boomanage# 删除服务命令
docker stack rm boomanage# 查看容器状态
docker stack ps boomanage
yml文件内容如下:
version: "3"
services:db:image: mysqlnetworks:- overlayports:- "3306:3306"environment:MYSQL_ROOT_PASSWORD: passwordMYSQL_DATABASE: sql_testMYSQL_USER: myuserMYSQL_PASSWORD: userpasswordvolumes:- /home/gowork/src/composebms/db/data:/var/lib/mysqldeploy:placement:constraints: [node.role == manager]bms:image: ubuntu:bmscommand: bookmangernetworks:- overlayports:- "8999:8999"deploy:mode: replicatedreplicas: 3networks:overlay:
相关文章:
Docker Swarm
Docker Swarm提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。 Swarm mode内置 kv 存储功能,提供了众多的新特性,比如&a…...
jupyter notebook安装和删除kernel的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
中级深入--day16
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... Day 1 小黄想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进…...
【洛谷 P1031】[NOIP2002 提高组] 均分纸牌 题解(贪心)
[NOIP2002 提高组] 均分纸牌 题目描述 有 N N N 堆纸牌,编号分别为 1 , 2 , … , N 1,2,\ldots,N 1,2,…,N。每堆上有若干张,但纸牌总数必为 N N N 的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为:在编号为 1 …...
E5071C是德科技网络分析仪
描述 E5071C网络分析仪提供同类产品中最高的RF性能和最快的速度,具有宽频率范围和多功能。E5071C是制造和R&D工程师评估频率范围高达20 GHz的RF元件和电路的理想解决方案。特点: 宽动态范围:测试端口的动态范围> 123 dB(典型值)快速测量速度:41毫秒全2端口…...
ViTPose+:迈向通用身体姿态估计的视觉Transformer基础模型 | 京东探索研究院
身体姿态估计旨在识别出给定图像中人或者动物实例身体的关键点,除了典型的身体骨骼关键点,还可以包括手、脚、脸部等关键点,是计算机视觉领域的基本任务之一。目前,视觉transformer已经在识别、检测、分割等多个视觉任务上展现出来…...
Android 播放mp3文件
1,在res/raw中加入mp3文件 2,实现播放类 import android.content.Context; import android.media.AudioManager; import android.media.SoundPool; import android.util.Log;import java.util.HashMap; import java.util.Map;public class UtilSound {pu…...
在OpenStack私有云上安装配置虚拟机
文章目录 零、学习目标一、登录大数据实训云二、创建网络三、创建路由四、添加接口五、创建端口六、添加安全组规则七、创建实例(一)实例规划(二)创建实例 - ied(三)创建实例 - master、slave1与slave2&…...
pyCharm远程DEBUG
第一步,添加一个远程机器的解释器 ssh 远程机器解释器添加, 我本地ssh有配置目标机器。 如果没配置,那就选着new server configuration 新增一个。 interpreter 指定远程机器python, (机器上有多个版本python里尤其要…...
微服务框架Go-kit
微服务框架Go-kit go kit简介第一个go kit应用go kit基本概念go kit Endpointsgo kit Endpoint 定义go kit Endpoint 函数签名go kit Endpoint 链式操作go kit Endpoint 请求和响应转换go kit Endpoint 中间件go kit Endpoint 错误处理go kit 传输层go kit HTTP 传输层go kit …...
《王道24数据结构》课后应用题——第三章 栈和队列
第三章 【3.1】 03、 假设以I和O分别表示入栈和出操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,可以操作的序列称为合法序列,否则称为非法序列。 如IOIIOIOO 和IIIOOIOO是合法的,而IOOIOIIO和II…...
查看linux开发板的CPU频率
1)查看CPU可设置的频率列表 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies 2)查看CPU当前所使用的频率: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 3)设置CPU频率(最高…...
对象模型和this指针(个人学习笔记黑马学习)
1、成员变量和成员函数 #include <iostream> using namespace std; #include <string>//成员变量和成员函数分开存储class Person {int m_A;//非静态成员变量 属于类的对象上的static int m_B;//静态成员变量 不属于类的对象上void func() {} //非静态成员函数 不…...
SpringCloudAlibaba常用组件
SpringCloudAlibaba常用组件 微服务概念 1.1 单体、分布式、集群 单体 ⼀个系统业务量很⼩的时候所有的代码都放在⼀个项⽬中就好了,然后这个项⽬部署在⼀台服务器上就 好了。整个项⽬所有的服务都由这台服务器提供。这就是单机结构。 单体应⽤开发简单,部署测试…...
Shotcut for Mac:一款强大而易于使用的视频编辑器
随着数码相机的普及,视频编辑已成为我们日常生活的一部分。对于许多专业和非专业用户来说,找到一个易于使用且功能强大的视频编辑器是至关重要的。今天,我们将向您介绍Shotcut——一款专为Mac用户设计的强大视频编辑器。 什么是Shotcut&…...
【数学建模】2023数学建模国赛C题完整思路和代码解析
C题第一问代码和求解结果已完成,第一问数据量有点大,经过编程整理出来了单品销售额的汇总数据、将附件2中的单品编码替换为分类编码,整理出了蔬菜各品类随着时间变化的销售量,并做出了这些疏菜品类的皮尔森相关系数的热力图&#…...
论数据库的种类
摘要 数据库是现代信息管理和数据存储的重要工具,几乎在各个领域都有广泛应用。不同类型的数据库适用于不同的应用场景和需求。本文将介绍几种常见的数据库种类,并探讨它们的特点和适用范围。 正文 一、关系型数据库(RDBMS) 关…...
docker笔记4:高级复杂安装-mysql主从复制
1.主从搭建步骤 1.1新建主服务器容器实例3307 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d…...
MySQL卸载干净再重新安装【Windows】
家人们,谁懂啊? 上学期学的数据库,由于上学期不知道为什么抽风,过得十分的迷,上课跟老师步骤安装好了Mysql,但后面在使用的过程中出现了问题,而且还出现了忘记密码这么蠢的操作,后半…...
在VScode中如何将界面语言设置为中文
VSCode安装后的默认界面是只有英文的,如果想用中文界面,那么就需要安装对应的插件,vscode插件可以从扩展中心去搜索并安装。 安装vscode后打开vscode,点击左侧的扩展按钮。 在搜索框中输入chinese,弹出chinese&#x…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
