一文详解docker swarm

文章目录

  • 1、简介
    • 1.1、涉及到哪些概念?
    • 1.2、需要注意什么?
  • 2、集群管理
    • 2.1、创建集群
    • 2.2、将节点加入集群
    • 2.3、查看集群状态。
    • 2.4、将节点从集群中移除
    • 2.5、更新集群
    • 2.6、锁定/解锁集群
  • 3、节点管理
  • 4、服务部署
    • 4.1、准备
    • 4.2、服务管理
      • 4.2.1、常用命令
      • 4.2.2、在集群上部署应用
      • 4.2.3、在集群上部署一个带更新策略和回滚策略的应用
      • 4.2.4、更新服务
      • 4.2.5、回滚服务
  • 5、结合docker-compose.yml部署
    • 5.1、部署应用
    • 5.2、语法说明

1、简介

Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。

主要解决问题:

  1. 解决docker server的集群化管理和部署。
  2. Swarm通过对Docker宿主机上添加的标签信息来将宿主机资源进行细粒度分区,通过分区来帮助用户将容器部署到目标宿主机上,同样通过分区方式还能提供更多的资源调度策略扩展。

单对单的Docker宿主机使用方式:
在这里插入图片描述
单对多的Docker宿主机使用方式:
在这里插入图片描述
swarm能做什么:

  1. 管理节点高可用,原生支持管理节点高可用,采用raft共识算法来支撑管理节点高可用。
  2. 应用程序高可用,支持服务伸缩,滚动更新和应用回滚等部署策略。

1.1、涉及到哪些概念?

(1)docker的两种模式,单引擎模式和swarm集群模式。

  • 单引擎模式,docker server没有加入任何集群,且自身也没有加入初始化为swarm 节点,简单的说就是我们平时所操作的孤立的docker server。
  • swarm模式,当docker server 加入到任意swarm集群,或者通过docker swarm init初始化swarm集群时,docker server会自动切换到swarm 集群模式。

(2)swarm集群中节点分类,分为:manager(管理节点)、node(工作节点)

  • manager:是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求以及调度Node进行具体工作。manager 本身也是一个node节点。
  • Node:接受manager调度,对容器进行创建、扩容和销毁等具体操作。

(3)raft共识算法,是实现分布式共识的一种算法,主要用来管理日志复制的一致性。

  • 当Docker引擎在swarm模式下运行时,manager节点实现Raft一致性算法来管理全局集群状态。
  • Docker swarm模式之所以使用一致性算法,是为了确保集群中负责管理和调度任务的所有manager节点都存储相同的一致状态。
  • 在整个集群中具有相同的一致状态意味着,如果出现故障,任何管理器节点都可以拾取任务并将服务恢复到稳定状态。例如,如果负责在集群中调度任务的领导管理器意外死亡,则任何其他管理器都可以选择调度任务并重新平衡任务以匹配所需状态。
  • 使用一致性算法在分布式系统中复制日志的系统需要特别小心。它们通过要求大多数节点在值上达成一致,确保集群状态在出现故障时保持一致。
  • Raft最多可承受(N-1)/2次故障,需要(N/2)+1名成员的多数或法定人数才能就向集群提议的值达成一致。这意味着,在运行Raft的5个管理器集群中,如果3个节点不可用,系统将无法处理更多的请求来安排其他任务。现有任务保持运行,但如果管理器集不正常,调度程序无法重新平衡任务以应对故障。

(4)Swarm管理节点高可用。

  • Swarm管理节点内置有对HA的支持,即使有一个或多个节点发送故障,剩余管理节点也会继续保证Swarm运转。
  • Swarm实现了一种主从方式的多管理节点的HA,即使有多个管理节点也只有一个节点出于活动状态,处于活动状态的节点被称为主节点(leader),而主节点也是唯一一个会对Swarm发送控制命令的节点,如果一个备用管理节点接收到了Swarm命令,则它会将其转发给主节点。

(5)集群管理,集群创建和组织。
(6)节点管理,集群下节点角色信息变更,节点任务情况监控。
(7)服务管理,集群服务部署,服务管理等。

1.2、需要注意什么?

manager节点容错。
manager数量最好设置为奇数个,可以减少脑裂(Split-Brain)出现情况。在网络被划分成2个部分情况下,奇数个manager节点能够较高程度的保证有投票结果的可能性。

不要部署太多的manager节点(通常3到5个)。对于所有共识算法来说,更多的参与节点意味着需要花费更多的时间来达成共识,所以最好部署5个或三个节点。

Raft最多可承受(N-1)/2次故障,需要(N/2)+1名成员的多数或法定人数才能就向集群提议的值达成一致。
在这里插入图片描述

2、集群管理

2.1、创建集群

  1. 不包含在任何Swarm中的Docker节点,该Docker节点被称为运行于单引擎(Single-Engine)模式,一旦加入Swarm集群,则切换为Swarm模式。
  2. docker swarm init 会通知Docker来初始化一个新的Swarm,并且将自身设置为第一个管理节点。同时也会使该节点开启Swarm模式。
  3. –advertise-addr IP:2377 指定其他节点用来连接到当前管理节点的IP和端口,这一指令是可选的,当节点有多个IP时,可以指定其中一个。
  4. –listen-addr 指定用于承载Swarm流量的IP和端口,其设置通常与–advertise-addr相匹配,但是当节点上有多个IP的时候,可用于指定具体某个IP。
  5. –autolock 启用管理器自动锁定(需要解锁密钥才能启动已停止的管理器)。
  6. –force-new-cluster 强制从当前状态创建新群集。
docker swarm init

2.2、将节点加入集群

(1)生成join-token。

# 生成work节点 join-token
docker swarm join-token worker
# 生成manager节点 join-token
docker swarm join-token manager

示例:

fly@fly:~/wokspace$ docker swarm join-token worker 
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4zxv2c1ntyjoum1m3x8u6juej6kciexc05f30j9vsvr0hoieg4-19o9myylkb7bg1fb1jqcr1xcf 192.168.11.72:2377

(2)加入集群。

# 此命令为 join-token 命令执行结果,在相应的节点执行该结果即可加入到集群
docker swarm join --token SWMTKN-1-4zxv2c1ntyjoum1m3x8u6juej6kciexc05f30j9vsvr0hoieg4-19o9myylkb7bg1fb1jqcr1xcf 192.168.11.72:2377

2.3、查看集群状态。

docker info

在这里插入图片描述

2.4、将节点从集群中移除

(1)将节点从集群中移除 (只能移除worker节点)。

docker swarm leave

(2)将节点从集群中强制移除(包括manager节点)。

docker swarm leave -f

2.5、更新集群

更新集群的部分参数

docker swarm update --autolock=false

2.6、锁定/解锁集群

  • 重启一个旧的管理节点或者进行备份恢复可能对集群造成影响,一个旧的管理节点重新接入Swarm会自动解密并获得Raft数据库中长时间序列的访问权,这会带来安全隐患。进行备份恢复可能会抹掉最新的Swarm配置。
  • 为了规避上述问题,Docker提供自动锁机制来锁定Swarm,这会强制要求重启的管理节点在提供一个集群解锁码之后才有权重新接入集群(也可以防止原来的主节点宕机后重新接入集群,和当前主节点一起成为双主,双主也是一种脑裂问题)。

(1)设置为自动锁定集群。

# 设置为自动锁定集群
docker swarm update --autolock=true

(2)当集群设置为 --autolock后,可以通过该命令查询解锁集群的秘钥。

# 当集群设置为 --autolock后,可以通过该命令查询解锁集群的秘钥
# 该节点必须为集群有效的管理节点
docker swarm unlock-key

(3)重启管理节点,集群将被自动锁定。

# 重启管理节点,集群将被自动锁定
service docker restart

(4)重启后的管理节点必须提供解锁码后才能重新接入集群。

# 重启后的管理节点必须提供解锁码后才能重新接入集群
docker swarm unlock

3、节点管理

# 查看参数帮助
docker node -h
# 命令说明:
# 降级节点
demote Demote one or more nodes from manager in the swarm
# 查看节点详情
inspect Display detailed information on one or more nodes
# 查看所有节点
ls List nodes in the swarm
# 升级节点
promote Promote one or more nodes to manager in the swarm
# 查看节点上运行的任务,默认当前节点
ps List tasks running on one or more nodes, defaults to current node
# 删除节点
rm Remove one or more nodes from the swarm
# 更新节点
update Update a node
  • demote:降级节点。
  • inspect:查看节点详情。
  • ls:查看所有节点。
  • promote:升级节点。
  • ps:查看节点上运行的任务,默认当前节点。
  • rm:删除节点。
  • update:更新节点。

(1) 查看集群节点列表。

fly@fly:~/wokspace$ docker node ls

ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
re12imh3gr7d1dudrw1gkm9f7 *   fly        Ready     Active         Leader           20.10.12

(2)升级或降级节点。

# 降级一个或多个节点
docker node demote <NODE>
# 通过修改单个节点的role属性,来降级节点
docker node update --role worker <NODE>
# 升级一个或多个节点
docker node promote <NODE>
# 通过修改单个节点的role属性,来升级节点
docker node update --role manager <NODE>

(3)更改节点状态。

# 更改节点状态
docker node update --availability active|pause|drain <NODE>
# active: 正常
# pause:挂起
# drain:排除
  1. 正常节点,可正常部署应用。
  2. 挂起节点,已经部署的应用不会发生变化,新应用将不会部署到该节点。
  3. 排除节点,已经部署在该节点的应用会被调度到其他节点。

(4)删除节点。

# 只能删除已关闭服务的工作节点
docker node rm <node>
# 只能强制删除工作节点
docker node rm -f <node>

注意:管理节点的删除只能先将管理节点降级为工作节点,再执行删除动作。

# 停止docker server
sudo service docker stop

4、服务部署

4.1、准备

(1)拉取代码,获取tag。

# 拉取代码
git clone https://gitee.com/long-xu/helloworld.git
# 进入代码目录
cd helloworld
# fetch
git fetch origin

(2)镜像制作。

# 切换到1.0.0 tag
git checkout 1.0.0
# 构建1.0.0镜像
docker build -f Dockerfile -t hello:1.0.0 .
# 切换到1.0.1 tag
git checkout 1.0.1
# 构建1.0.1镜像
docker build -f Dockerfile -t hello:1.0.1 .

(3)将镜像推送到仓库(这里使用公共仓库作为演示)。

# 登录注册中心
docker login

(4)为镜像重新打tag(格式:用户名/仓库名:tag)。

docker tag hello:1.0.0 long-xu/hello:1.0.0
docker push long-xu/hello:1.0.0
docker tag hello:1.0.1 long-xu/hello:1.0.1
docker push long-xu/hello:1.0.1

(5) 登录https://hub.docker.com/ 查看镜像情况。
在这里插入图片描述

4.2、服务管理

docker service -h

4.2.1、常用命令

# 创建一个服务
create 		Create a new service
# 查看服务详细信息
inspect 	Display detailed information on one or more services
# 查看服务日志
logs 		Fetch the logs of a service or task
# 列出所有服务
ls 			List services
# 列出一个或多个服务的任务列表
ps 			List the tasks of one or more services
# 删除一个或多个服务
rm 			Remove one or more services
# 回滚
rollback 	Revert changes to a service's configuration
# 弹性伸缩一个或多个服务
scale 		Scale one or multiple replicated services
# 更新服务
update 		Update a service

4.2.2、在集群上部署应用

(1)部署一个副本数量。

docker service create --name myhello --publish published=81,target=80 --replicas 3 long-xu/hello:1.0.0
# 若是采用私有注册中心请加上 --with-registry-auth 选项

(2)查看服务下的任务(容器)。

docker service ps myhello

(3) 查看节点下的任务(容器)

docker node ps <NODE>

(4)访问集群中任意节点(包括没有运行任务的节点)对应的端口号均能访问到应用程序,swarm为集群实现了负载均衡

curl http://localhost:81/ping

(5)查看service详细信息。

docker service inspect myhello

(6)查看service日志。

docker service logs myhello

(7)伸缩服务。

docker service scale myhello=5

(8) 修改节点状态,查看任务部署情况。

docker node update --availability active|pause|drain <NODE>

4.2.3、在集群上部署一个带更新策略和回滚策略的应用

(1)部署应用。

docker service create \
--name myhello1 \
--publish published=82,target=80 \
--replicas 20 \
--update-delay 5s \
--update-parallelism 2 \
--update-failure-action continue \
--rollback-parallelism 2 \
--rollback-monitor 10s \
--rollback-max-failure-ratio 0.2 \
long-xu/hello:1.0.0
# 若是采用私有注册中心请加上 --with-registry-auth 选项
#--update-delay 5s :每个容器依次更新,间隔5s
# --update-parallelism 2 : 每次允许两个服务一起更新
#--update-failure-action continue : 更新失败后的动作是继续
# --rollback-parallelism 2 : 回滚时允许两个一起
# --rollback-monitor 10s :回滚监控时间10s
# --rollback-max-failure-ratio 0.2 : 回滚失败率20%

(2) 检查部署后的应用设置项是否都有被成功设置。

# 查看并打印友好的详细信息
docker service inspect --pretty myhello1

注意:查看详细信息时,详细信息中时间单位为ns(纳秒)。友好格式下,时间单位为(s)。

(3)更新未设置成功的项。

docker service update --update-delay 5s --rollback-monitor 10s myhello1

(4)访问服务。

curl http://localhost:82/ping
curl http://localhost:82/ping/v1.0.1

4.2.4、更新服务

(1)启动更新。

docker service update --image long-xu/hello:1.0.1 myhello1
# 若是采用私有注册中心请加上 --with-registry-auth 选项

在这里插入图片描述
(2)访问服务。

curl http://localhost:82/ping
curl http://localhost:82/ping/v1.0.1

4.2.5、回滚服务

(1)启动回滚(策略是失败后回滚,目前没有失败的情况,我们手动回滚)。

docker service update --rollback myhello1

在这里插入图片描述

5、结合docker-compose.yml部署

5.1、部署应用

(1)常用命令:

# 部署或更新 stack
deploy 		Deploy a new stack or update an existing stack
# 查看 stack 列表
ls 			List stacks
# 查看 stack 的任务列表
ps 			List the tasks in the stack
# 删除 stack
rm 			Remove one or more stacks
# 查看stack 中的服务列表
services 	List the services in the stack

(2)docker-compose.yml 文件。

version: "3.7"
  services:
    myhello2:
      image: long-xu/hello:1.0.0
      ports:
	    - "83:80"
	  depends_on:
	    - redis
	  deploy:
	    mode: replicated
	    replicas: 20
	    endpoint_mode: vip
	    rollback_config:
		  parallelism: 2
		  delay: 10s
		  monitor: 10s
		  max_failure_ratio: 0.2
	    update_config:
		  parallelism: 2
		  delay: 5s
		  failure_action: continue
	redis:
	  image: redis:alpine
	  deploy:
		mode: replicated
		replicas: 6
		endpoint_mode: dnsrr
		labels:
		  description: "This redis service label"
		resources:
		  limits:
			cpus: '0.50'
			memory: 50M
		  reservations:
			cpus: '0.25'
			memory: 20M
	  restart_policy:
		condition: on-failure
		delay: 5s
		max_attempts: 3
		window: 120s

(3)部署stack。

docker stack deploy -c docker-compose.yml mystack

(4)查看服务详情。

# 查看并打印友好的详细信息
docker service inspect --pretty mystack_myhello2
docker service inspect --pretty mystack_redis

5.2、语法说明

注意:仅支持 V3.4 及更高版本。

(1)endpoint_mode:访问集群服务的方式。

endpoint_mode: vip
# Docker 集群服务一个对外的虚拟 ip。所有的请求都会通过这个虚拟 ip 到达集群服务内部的机器。
endpoint_mode: dnsrr
# DNS 轮询(DNSRR)。所有的请求会自动轮询获取到集群 ip 列表中的一个 ip 地址。

(2)labels:在服务上设置标签。可以用容器上的 labels(跟 deploy 同级的配置) 覆盖 deploy 下的labels。

(3)mode:指定服务提供的模式。

  • replicated:复制服务,复制指定服务到集群的机器上。
  • global:全局服务,服务将部署至集群的每个节点。
  • replicas:mode 为 replicated 时,需要使用此参数配置具体运行的节点数量。

(4)resources:配置服务器资源使用的限制,例如上例子,配置 redis 集群运行需要的 cpu 的百分比 和 内存的占用。避免占用资源过高出现异常。

(5)restart_policy:配置如何在退出容器时重新启动容器。

  • condition:可选 none,on-failure 或者 any(默认值:any)。
  • delay:设置多久之后重启(默认值:0)。
  • max_attempts:尝试重新启动容器的次数,超出次数,则不再尝试(默认值:一直重试)。
  • window:设置容器重启超时时间(默认值:0)。

(6)rollback_config:配置在更新失败的情况下应如何回滚服务。

  • parallelism:一次要回滚的容器数。如果设置为0,则所有容器将同时回滚。
  • delay:每个容器组回滚之间等待的时间(默认为0s)
  • failure_action:如果回滚失败,该怎么办。其中一个 continue 或者 pause(默认pause)。
  • monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
  • max_failure_ratio:在回滚期间可以容忍的故障率(默认为0)。
  • order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚),默认 stop-first 。

(7)update_config:配置应如何更新服务,对于配置滚动更新很有用。
同rollback_config。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/364632.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP 连接掉线自动重连

文章目录 TCP 连接掉线自动重连定义使用连接效果 TCP 接收数据时防止掉线。TCP 连接掉线自动重连。多线程环境下TCP掉线自动重连。 欢迎讨论更好的方法&#xff01; TCP 连接掉线自动重连 定义 定义一个类&#xff0c;以编写TCP连接函数Connect()&#xff0c;并且&#xff1a…

分发糖果[困难]

优质博文&#xff1a;IT-BLOG-CN 一、题目 n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 【1】每个孩子至少分配到1个糖果。 【2】相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩…

JavaScript基础五对象 内置对象 Math.random()

内置对象-生成任意范围随机数 Math.random() 随机数函数&#xff0c; 返回一个0 - 1之间&#xff0c;并且包括0不包括1的随机小数 [0, 1&#xff09; 如何生成0-10的随机数呢&#xff1f; Math.floor(Math.random() * (10 1)) 放大11倍再向下取整 如何生成5-10的随机数&…

【智能算法】11种混沌映射算法+2种智能算法示范【鲸鱼WOA、灰狼GWO算法】

1 主要内容 混沌映射算法是我们在智能算法改进中常用到的方法&#xff0c;本程序充分考虑改进算法应用的便捷性&#xff0c;集成了11种混合映射算法&#xff0c;包括Singer、tent、Logistic、Cubic、chebyshev、Piecewise、sinusoidal、Sine、ICMIC、Circle、Bernoulli&#xf…

css实现按钮边框旋转

先上效果图 本质&#xff1a;一个矩形在两个矩形互相重叠遮盖形成的缝隙中旋转形成&#xff0c;注意css属性z-index层级关系 直接上代码 <div class"bg"><div class"button">按钮</div></div><style>.bg {width: 100%;heigh…

数字图像处理(实践篇)四十一 OpenCV-Python 使用sift算法检测图像上的特征点实践

目录 一 涉及的函数 二 实践 2004年,D.Lowe在论文Distinctive Image Features from Scale-Invariant Keypoints中提出了一种新算法,即尺度不变特征变换 (SIFT),该算法提取关键点并计算其描述符。SIFT提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置尺度和方向…

绝地求生:“龙腾”通行证和新空投任务内容一览:二十级依然有图纸!

大家好&#xff0c;27.2版本终于更新完了&#xff0c;先为大家带来这次龙腾通行证的详细内容&#xff0c;显放上详细的兑换点数大家可以慢慢看。 省流: 通行证分支3仍然可解锁图纸和500G-COIN奖励&#xff0c;空投任务也可以通过做很简单的游戏任务70代币兑换获得1张图纸。 这次…

main函数中参数argc和argv用法解析

1 基础 argc 是 argument count 的缩写&#xff0c;表示传入main函数的参数个数&#xff1b; argv 是 argument vector 的缩写&#xff0c;表示传入main函数的参数序列或指针&#xff0c;并且第一个参数argv[0]一定是程序的名称&#xff0c;并且包含了程序所在的完整路径&…

vue 发布自己的npm组件

1、在项目任意位置创建index.ts文件 2、导入要到处的组件&#xff0c;使用vue提供的install 功能全局挂在&#xff1b; import GWButton from "/views/GWButton.vue"; import GWAbout from "/views/AboutView.vue";const components {GWButton,GWAbout, …

canvas路径剪裁clip(图文示例)

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

python执行linux系统命令的三种方式

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 1. 使用os.system 无法获取命令执行后的返回信息 import osos.system(ls)2. 使用os.popen 能够获取命令执行后的返回信息 impor…

什么是SDN-软件定义网络

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle O…

力扣之2648.生成 斐波那契数列(yield)

/*** return {Generator<number>}*/ var fibGenerator function*() {let a 0,b 1;yield 0; // 返回 0&#xff0c;并暂停执行yield 1; // 返回 1&#xff0c;并暂停执行while(true) {yield a b; // 返回 a b&#xff0c;并暂停执行[a, b] [b, a b]; // 更新 a 和 …

大力说视频号第五课:千粉才能直播带货?如何做到

腾讯对直播带货设置了条件&#xff1a;要么你的账号得有1000个粉丝&#xff0c;要么你得开通视频号小店。 对于那些还没有开通视频号小店的用户&#xff0c;他们要想申请直播带货&#xff0c;就必须完成微信实名认证、拥有1000个以上的有效关注者&#xff0c;并缴纳一笔保证金。…

船员投保的数学模型(MATLAB求解)

1.问题描述 劳动工伤事故&#xff0c;即我们平时所说的“工伤事故”&#xff0c;也称职业伤害&#xff0c;是指劳动者在生产岗位上&#xff0c;从事与生产劳动有关的工作中发生的人身伤害事故、急性中毒事故或职业病。船员劳动工伤事故是指船员在船舶生产岗位上&#xff0c;从…

《基于“源启+”的应用重构白皮书》

当前&#xff0c;行业数字化转型驶入“深水区”&#xff0c;全新的市场竞争格局对行业发展提出更高的要求&#xff0c;企业高质量发展需要借助新架构新应用重新定义数字生产力&#xff0c;重塑商业模式与市场核心竞争力。 在中国电子主办&#xff0c;中电金信承办的“数字原生向…

SpringBoot实战(二十六)集成SFTP

目录 一、SFTP简介二、SpringBoot 集成2.1 Maven 依赖2.2 application.yml 配置2.3 DemoController.java 接口2.4 SftpService.java2.5 DemoServiceImpl.java 实现类2.6 SftpUtils.java 工具类2.7 执行结果1&#xff09;上传文件2&#xff09;下载文件3&#xff09;重命名文件&…

go并发编程-介绍与Goroutine使用

1. 并发介绍 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中的多个…

ElementUI 组件:Layout布局(el-row、el-col)

ElementUI安装与使用指南 Layout布局 点击下载learnelementuispringboot项目源码 效果图 el-row_el-col.vue页面效果图 项目里el-row_el-col.vue代码 <script> export default {name:el-row_el-col 布局 }</script><template><div class"roo…

【Vue】2-14、插槽 自定义指令

一、插槽 插槽&#xff08;Slot&#xff09;是 vue 为组件的封装者提供的能力。允许封装者在封装组件时&#xff0c;把不确定的&#xff0c;希望由用户指定的部分定义为插槽。 <template><div class"app-container"><h1>App 根组件</h1>&…
最新文章