07. Docker进阶-Docker Swarm

2024-05-24 01:52
文章标签 进阶 docker swarm 07

本文主要是介绍07. Docker进阶-Docker Swarm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单介绍

什么是Docker Swarm

Docker Swarm 是 Docker 的集群管理工具,用于在多个 Docker 主机上运行 Docker 服务。
Docker Swarm 提供了一个单一的虚拟主机,允许你管理和部署 Docker 服务,并提供了负载均衡、故障转移和可伸缩性等功能。

Docker Swarm特性

  1. 负载均衡:Swarm 可以自动分配任务到集群中的可用节点,从而实现负载均衡。
  2. 故障转移:如果集群中的某个节点发生故障,Swarm 会将任务转移到其他健康的节点上,从而保证服务的可用性。
  3. 可伸缩性:Swarm 支持动态扩展和缩减集群中的节点数量,以适应不同的负载需求。
  4. 服务编排:Swarm 允许你定义服务、网络和数据卷,并自动部署它们到集群中的节点。
  5. 身份验证和访问控制:Swarm 支持身份验证和访问控制,可以限制对集群的访问。
  6. 服务发现:Swarm 提供了服务发现机制,允许服务之间相互通信。
  7. 高可用性:Swarm 支持高可用性模式,可以确保集群中的服务始终可用。

Docker Swarm架构

Docker Swarm核心概念

Swarm概念

Swarm集群的管理和编排是使用嵌入Docker引擎的SwarmKit工具。
可以在Docker初始化时启动Swarm模式或加入已存在的Swarm集群。
Swarm集群节点的管理命令:

  • 初始化集群节点
  • 加入节点
  • 退出节点

Node概念

运行Docker的主机可以主动初始化一个Swarm集群或者加入一个已经存在的Swarm集群,这样运行Docker的主机就成为了一个Swarm集群的节点。
节点分为:管理节点(Manager);工作节点(Worker)。
管理节点用于Swarm集群的管理,docker swarm命令基本上只能在管理节点执行(节点退出集群命令 docker swarm leave可以在工作节点执行)。
管理节点:
一个swarm集群可以有多个管理节点,但只有一个管理节点可以成为leader,leader通过raft协议实现。
通常第一个启用docker swarm的节点将成为leader,后来加入的节点都是follower。
当现有leader挂掉以后,剩余节点将重新选举出一个新leader。
每个Manager都有一个完整的当前集群状态的副本,从而保证Manager是高可用的。
工作节点:
工作节点是任务执行节点,管理节点将服务下发至工作节点执行。
管理节点默认也是工作节点,可以通过配置让服务只运行在管理节点。
工作节点之间通过control plane进行通信,这种通信使用gossip协议,并且是异步的。

Task概念

任务是swarm集群中最小的调度单位,目前来说就是一个单一的容器。

Service概念

服务相当于一个进程,一个服务下可以有多个任务。
服务定义了任务的数下,即服务有两种模式:
replicated services:
按照一定的规则在各个工作节点上云霄指定个数的任务。
global service:
每个工作节点上运行一个任务。
总结:
上述两种模式都是通过docker service create的–mode参数指定。

Stack概念

stack是一个服务编排的概念,用于将多个服务打包在一起,以便于管理和部署。
Stack 是 Docker 的服务编排工具,它允许你将多个服务打包成一个堆栈,然后使用 docker stack deploy 命令来部署整个堆栈。
使用 Docker Stack 的一些基本步骤:

  1. 定义堆栈
    • 创建一个 docker-compose.yml 文件来定义堆栈中的服务。
    • 在 docker-compose.yml 文件中,你可以定义服务、网络、数据卷等。
  2. 部署堆栈
    • 使用 docker stack deploy 命令来部署堆栈。
    • 示例:docker stack deploy -c docker-compose.yml my-stack
  3. 查看堆栈详情
    • 使用 docker stack ps 命令来查看堆栈中的服务及其状态。
    • 示例:docker stack ps my-stack
  4. 扩容服务
    • 使用 docker stack scale 命令来设置服务的容器数量。
    • 示例:docker stack scale my-stack web=2
  5. 缩容服务
    • 使用 docker stack scale 命令来减少服务的容器数量。
    • 示例:docker stack scale my-stack web=1
  6. 删除堆栈
    • 使用 docker stack rm 命令来删除堆栈及其服务。
    • 示例:docker stack rm my-stack
  7. 管理堆栈
    • 使用 docker stack ls 命令来列出所有堆栈及其服务。
    • 使用 docker stack inspect 命令来查看堆栈的详细配置。

简单应用

集群搭建

基础设置

参与swarm集群的主机都要设置基础配置。

  • 禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭selinux
setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config

主机时间同步

参与swarm集群的主机都要设置时间同步,确保各个主机时间一致。

  • 安装时间同步工具
yum -y install ntp
  • 定期同步时间
(crontab -l;echo "*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1") | crontab
  • 手动同步时间
ntpdate ntp1.aliyun.com

初始化集群

  • 默认初始化方式
docker swarm init
  • 自定义初始化方式
docker swarm init \
--advertise-addr 192.168.17.130
  • 返回值
Swarm initialized: current node (hwujs6qn1mucl1vnkxxfiqtzc) is now a manager.#添加一个工作节点到集群
To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-59sc9anfuuy8pasl7tksx200wacnf8jdtlw51y48568yjye2an-94nvjh1oxdbzzlu81vhb2zmx0 192.168.17.130:2377#添加一个管理节点到集群
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

增加工作节点

  • 查看添加工作节点到集群的命令
 docker swarm join-token worker
  • 返回值即添加命令
docker swarm join --token SWMTKN-1-59sc9anfuuy8pasl7tksx200wacnf8jdtlw51y48568yjye2an-94nvjh1oxdbzzlu81vhb2zmx0 192.168.17.130:2377

增加管理节点

  • 查看添加管理节点到集群的命令
docker swarm join-token manager
  • 返回值即添加命令
docker swarm join --token SWMTKN-1-59sc9anfuuy8pasl7tksx200wacnf8jdtlw51y48568yjye2an-attn2ete449bahu7eggggg2rn 192.168.17.130:2377

查看集群

  • 查看命令
docker node ls
  • 解释
ID							#节点ID信息
HOSTNAME				#节点主机名称
STATUS					#节点当前状态
AVAILABILITY		#当前节点是否可用
MANAGER STATUS	#当前节点角色状态
ENGINE VERSION	#当前节点的docker版本

部署服务

新建服务

  • 创建服务
docker service create --replicas 3 -p 80:80 --name nginx-web nginx:latest
  • 查看服务
docker service ls
  • 服务日志
docker service logs nginx-web
  • 删除服务
docker service rm nginx-web
  • 服务详情
docker service inspect nginx-web

更新回滚

  • 更新服务
docker service update nginx-web
  • 回滚服务
docker service rollback nginx-web

弹性伸缩

减少节点个数

注意:普通工作节点可以直接删除,而管理节点需要降级后才能删除。

  • 移除一个节点(要在将要移除的节点上执行)
docker swarm leave
或
docker swarm leave --force
  • 管理节点降级
docker node demote 5rfzwqd0oeakn1vvltogb2ppb
#节点ID或节点hostname
  • 删除节点
docker node rm 5rfzwqd0oeakn1vvltogb2ppb
#节点ID或节点hostname
  • 查看节点状态
docker node ls

增加节点个数

注意:添加节点时,可以直接添加Manager节点也可以将Worker节点升级为Manager节点。

  • 查看工作节点添加命令
docker swarm join-token worker
  • 添加工作节点(要在将要加入的节点上执行)
docker swarm join --token SWMTKN-1-43wx014z6akpzhugeh7hlebalteuxpx8hcfopmd06vqtgxn8dx-0x2qqwxboe0fu1i5wcx530b6q 192.168.17.130:2377
  • 工作节点升级
docker node promote 192-168-17-132
#节点ID或节点hostname
  • 查看节点状态
docker node ls

堆栈管理

堆栈简介

在 Docker 中,stack 是一个服务编排的概念,用于将多个服务打包在一起,以便于管理和部署。Docker Stack 是 Docker 的服务编排工具,它允许你将多个服务打包成一个堆栈,然后使用 docker stack deploy 命令来部署整个堆栈。

定义堆栈

  • 创建一个 docker-compose.yml 文件来定义堆栈中的服务。
  • 在 docker-compose.yml 文件中,你可以定义服务、网络、数据卷等。
  • 应用:
version: '3'
services:web:image: nginx:latestports:- "8080:80"depends_on:- dbdb:image: postgres:latestports:- "5432:5432"

验证文件

docker stack config -c /root/nginx.yaml

部署堆栈

  • 使用 docker stack deploy 命令来部署堆栈。
  • 示例:docker stack deploy -c docker-compose.yml my-stack
  • 应用:
docker stack deploy -c /root/ngin-db.yml nginx-db

查看堆栈

  • 使用 docker stack ps 命令来查看堆栈中的服务及其状态。
  • 示例:docker stack ps my-stack
  • 应用:
#列取所有堆栈
docker stack ls#查看某个堆栈
docker stack ps nginx-db#查看服务
docker stack services nginx-db

更新堆栈

  • 使用 docker stack deploy 命令类部署或更新堆栈及其服务。
  • 示例:docker stack deploy -c docker-compose.yml my-stack
  • 应用:
docker stack deploy -c /root/ngin-db.yml nginx-db

删除堆栈

  • 使用 docker stack rm 命令来删除堆栈及其服务。
  • 示例:docker stack rm my-stack
  • 应用:
docker stack rm nginx-db

生产环境

基本操作

添加节点

检查节点

服务分配

检查服务

这篇关于07. Docker进阶-Docker Swarm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997036

相关文章

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD