4.docker容器编排(docker compose 与 docker swarm)
本文目录
- 1.容器编排
- 2.Docker Compose
- 1.Docker Compose 安装
- 2.Docker Compose 示例
- 1.使用 docker-compose 启动 nginx
- 2.docker compose 常用命令
- 3.校验 docker-compose.yml 是否有错误
- 4.创建服务,启动容器
- 5.弹性伸缩<扩缩容>
- 3.Docker Swarm
- 1.Swarm 架构图
- 2.Swarm 节点说明
- 3.Swarm 集群部署
- 1.了解docker swarm 命令
- 2.初始化集群
- 3.work节点加入集群
- 4.查看swarm集群节点信息
- 4.部署服务命令
- 5.部署服务
- 6.弹性伸缩<扩缩容>
- 缩容
- 7.节点离开swarm集群
- 8.删除离开的节点
- 9.离开的节点,再次加入swarm集群
- 10.退出 docker swarm 集群
1.容器编排
容器编排:就是针对容器生命周期的管理,对容器的生命周期进行更快速方便的方式进行管理。
实例:一个java程序,依赖了mysql,redis,要想把 java 程序运行起来,则必须要先启动 mysql、redis。那么这三者这件就存在了依赖关联。
容器编排存在的意义:
- 依赖管理,当一个容器必须在另一个容器运行完成后,才能运行时,就需要进行依赖管理
- 副本数控制,容器有时候也需要集群,快速的对容器集群进行弹性伸缩
- 配置共享,通过配置文件统一描述需要运行的服务相关信息,自动化的解析配置内容,并构建对应的服务
容器编排的出现,就是让开发者可以更简单的使用容器,省去频繁的写各种命令,docker 容器编排的出现,就类似 shell 脚本,一键搞定!
容器编排,主要有两种模式:
- 基于Docker Compose(单机)
- 基于Swarm(集群)
2.Docker Compose
Docker Compose 是单机环境下的容器编排。
有的时候我们会需要涉及到在一台机器部署多个容器,那么此时再手动的每次输入相关的一堆配置命令再来启动容器,还是产生了很多无意义的重复性劳动。针对单机的多容器部署的情况,Docker 为我们提供了一个单机版本的服务编排工具 docker-compose
Docker-Compose 可以高效便捷的管理单机上运行的所有容器,它通过 yaml 配置文件的方式完成之前执行 docker run 命令所设置的所有参数,你可以先针对单机上的所有容器进行相关配置,配置完成后即可使用 docker-compose 对单机多容器进行高效的管理
docker compose 容器编排,就是基于docker-compose.yml
配置文件进行的容器编排。只要学会如何编写这个配置文件,就会用这个玩意了。
1.Docker Compose 安装
注意:需要注意的是,docker-compose 与docker有版本对应关系,因此在使用docker-compose时需要选择与已安装的docker版本相对应的docker-compose版本,否则可能会出现不兼容或无法正常工作的问题。但是!我在官网一致没有找到 docker 和 docker-compose 的对应关系表啊,有知道的小伙伴能评论发我一下吗??我只找到个 docker compose 发行版本,依赖的 docker 需要升级的版本,docker compose 发行版本地址:https://docs.docker.com/compose/release-notes。如下图所示:
因为 docker 使用的是最新版本:24.0.6
,所以 docker compose 也使用了最新版本2.21.0
还有一个对应关系表,在这里,也没有太看懂。地址:
- https://docs.docker.com/compose/compose-file/compose-file-v2
- https://docs.docker.com/compose/compose-file/compose-file-v3
Docker Compose 下载地址:https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64
# step 1:下载 docker compose 最新版本
curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# $(uname -s) 系统内核,即:linux
# $(uname -m) 系统架构,即:x86_64# step 2:将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose# step 3:创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# step 4:测试是否安装成功
docker-compose --version
2.Docker Compose 示例
# docker 启动 nginx命令:
docker run -d --restart=always --network xxx -v /www/abc:/usr/share/nginx/html -e APP_ENV=dev -p 80:80 --name nginx-compose nginx
# 命令解释:
# -d 后台运行
# --restart=always 出现异常后总是自动重启
# --network xxx 自定义网络
# -v /www/abc:/usr/share/nginx/html 将[本地目录/www/abc]与[容器目录/usr/share/nginx/html] 进行数据卷绑定
# -e APP_ENV=dev 添加环境变量
# -p 80:80 端口映射
# --name 容器名称
# nginx 镜像名
上述命令,就可以在 docker 中启动一个 nginx 容器了。
- 在不使用来回复制、粘贴的方式,如何将这条命令复用呢?
- 这个命令还不算太长,如果命令更长的怎么办呢?
这样就需要用到 docker compose 了。
1.使用 docker-compose 启动 nginx
创建一个
/opt/docker/nginx
文件夹,在nginx文件夹下创建一个docker-compose.yml
文件,进入文件,就可以编写 docker compose了
参考官网进行编写docker compose即可。因为docker compose的配置项太多了。截至
2023-09-14
,使用的docker 24.0.6
和docker compose 2.21.0
,所以此处直接使用 Compose V3版本。地址:https://docs.docker.com/compose/compose-file/compose-file-v3
配置超级多,根本记不住。所以参考官网来写就好了。
如果是一个普通的镜像,更多的关注【服务services】、【网络networks】、【数据卷volumes】这三个配置项就可以了
# docker 启动 nginx命令:
docker run -d --restart=always --network xxx -v /www/abc:/usr/share/nginx/html -e APP_ENV=dev -p 80:80 --name nginx-compose nginx
上面的命令,转成 nginx compose 如下:
version: "3.8"
services: nginx-demo-compose:contianer_name: "nginx-compose"image: nginxrestart: alwaysnetworks: nginx_netvolumes:- /www/abc:/usr/share/nginx/htmlenvironment:- APP_ENV=devports:- 80:80networks:nginx_net:ipam:driver: defaultconfig:- subnet: "172.16.238.0/24"
2.docker compose 常用命令
命令 | 说明 |
---|---|
build | 先构建完镜像,然后构建一个docker服务(如果开始就已经是个镜像了,则会跳过,命令不生效) |
config | 规范、验证并查看 compose 文件,验证通过后,控制台会返回 compose 文件内容 |
cp | 在容器和本地文件系统之间复制文件/文件夹 |
create | 为 compose 中的 service 服务创建容器。 |
down | 停止并删除容器、网络 |
events | 从容器接收实时事件 |
exec | 在运行中的容器中执行命令 |
images | 列出创建的容器使用的镜像 |
kill | 强制停止服务容器 |
logs | 查看容器的日志输出 |
ls | 列出正在运行的 compose 项目 |
pause | 暂停 service 服务 |
port | 输出端口绑定的公共端口 |
ps | 列出容器 |
pull | 拉取 service 服务镜像 |
push | 推送 service 服务镜像 |
restart | 重启 service 服务容器 |
rm | 删除停止的服务容器 |
run | 在服务上运行一次性命令 |
start | 启动服务 |
stop | 停止服务 |
top | 显示正在运行的进程 |
unpause | 取消暂停服务 |
up | 创建并启动一个容器 |
version | 显示 Docker Compose 版本信息 |
wait | 等待阻塞直到第一个服务容器停止 |
提示: 更详细命令说明,使用
docker compose [命令] --help
了解。比如:docker compose up --help
扩缩容命令:
命令 | 说明 |
---|---|
docker compose up --scale 服务名=num | 扩容/缩容,服务名为compose文件服务名,num 为数量 |
3.校验 docker-compose.yml 是否有错误
# 进入/opt/docker/nginx 目录,在docker-compose.yml同级下,执行如下命令
docker compose config
4.创建服务,启动容器
进入
/opt/docker/nginx
目录下,在docker-compose.yml
同级目录下,开始操作
# step 1:创建服务(此处也可以启动compose中的特定服务:docker compose create 服务名)
docker compose create
# step 2:查看服务是否创建成功
docker compose ps -a
# step 3:后台启动容器
docker compose up -d
如图所示:
5.弹性伸缩<扩缩容>
扩缩容命令,如下:
docker compose up -d --scale 服务名=num
扩缩容注意:
- 需要删除 container_name (docker 不允许多个容器具有相同的名称)
- 修改 port 端口映射(一个服务只能一个端口,会提示端口占用问题)
修改后的 docker-compose.yaml 如下:
version: "3.8"
services: nginx-demo:image: nginxrestart: alwaysnetworks: - nginx_netvolumes:- /www/abc:/usr/share/nginx/htmlenvironment:- APP_ENV=devports:- 80 # 此处80代表容器中的80端口,映射到本地的随机端口networks:nginx_net:ipam:driver: defaultconfig:- subnet: "172.16.238.0/24"
修改配置信息后,执行
docker compose up -d
,便会重新读取compose配置,启动容器
3.Docker Swarm
Swarm 也是需要提前安装好 Docker Compose !!!
Swarm 是 Docker 公司推出的用来管理 docker 集群的平台,几乎全部用GO语言来完成的开发的, 它是将一群 Docker 宿主机变成一个单一的虚拟主机,Swarm 使用标准的 Docker API 接口作为其前端的访问入口,换言之,各种形式的DockerClient(compose, docker-py 等) 均可以直接与 Swarm 通信,甚至 Docker 本身都可以很容易的与 Swarm 集成,这大大方便了用户将原本基于单节点的系统移植到 Swarm 上,同时Swarm 内置了对 Docker 网络插件的支持,用户也很容易的部署跨主机的容器集群服务。
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,所以 swarm 我们无需手动安装。
Swarm deamon只是一个调度器(Scheduler) + 路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。https://github.com/docker/swarm
k8s 的出现早于 swarm,所以 swarm 的诞生,就是为了与 k8s 竞争,k8s 已经很成熟了,所以目前市场上用的 k8s 的还是挺多的,swarm 相对来说用的还不是提多。
1.Swarm 架构图
2.Swarm 节点说明
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。
Swarm节点分为管理 (manager) 节点和工作 (worker) 节点。
管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。通常,第一个启用docker swarm的节点将成为leader,后来加入的都是follower。当前的leader如果挂掉,剩余的节点将重新选举出一个新的leader。每一个manager都有一个完整的当前集群状态的副本,可以保证manager的高可用。
工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。worker节点之间,通过control plane进行通信,这种通信使用gossip协议,并且是异步的。
来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系。
3.Swarm 集群部署
三台机器如下:每台机器都安装好 docker
和 docker-compose
IP | 角色 |
---|---|
192.168.204.101 | manager 管理节点 |
192.168.204.102 | worker 工作节点 |
192.168.204.103 | worker 工作节点 |
1.了解docker swarm 命令
# 查看docker swarm 命令
docker swarm --help[root@localhost ~]# docker swarm --helpUsage: docker swarm COMMANDManage SwarmCommands:init Initialize a swarmjoin Join a swarm as a node and/or managerRun 'docker swarm COMMAND --help' for more information on a command.
# 查看 swarm 集群状态
docker info
# 查看 swarm 集群节点信息
docker node ls
2.初始化集群
# 登录管理节点,并执行如下命令
docker swarm init --advertise-addr 192.168.204.101# 返回如下信息
[root@localhost ~]# docker swarm init --advertise-addr 192.168.204.101
Swarm initialized: current node (2tlpn6ywqh9kms9ymgndpoinc) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-3gcmbp3voxo05kw0q4lfe972a1uy7bbch59aabu55i3dnb2eeo-3a26jdpdkmdmvjuj54ki9c14h 192.168.204.101:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
3.work节点加入集群
复制初始化集群返回的命令,分别在 两个work 节点执行,将work节点加入 swarm 集群。
记得:关闭防火墙,或者开放端口 2377!!!
先关闭防火墙:systemctl stop firewalld
然后永久关闭防火墙:systemctl disable firewalld
# 加入swarm集群命令
docker swarm join --token SWMTKN-1-3gcmbp3voxo05kw0q4lfe972a1uy7bbch59aabu55i3dnb2eeo-3a26jdpdkmdmvjuj54ki9c14h 192.168.204.101:2377
加入成功如图所示:
4.查看swarm集群节点信息
进入 manager 管理节点,通过
docker node ls
查看集群节点信息。work 节点无法查看哦!
4.部署服务命令
在管理节点,通过命令 docker service 部署服务,通过
docker service --help
查看详细命令
命令 | 说明 |
---|---|
create | 创建一个新的服务 |
inspect | 展示一个/多个服务的详细信息 |
logs | 查看服务/任务的日志 |
ls | 显示所有service服务 |
ps | 显示一个/多个服务的所有task |
rm | 删除一个/多个服务 |
rollback | 恢复service服务的配置信息 |
scale | 弹性扩缩容service服务 |
update | 更新service服务 |
5.部署服务
在管理节点,通过命令 docker service 部署服务,此处来部署一个 nginx 服务
# 部署一个nginx服务
docker service create --replicas 1 -p 80:80 --name nginx_swarm nginx
# --replicas 1 一个副本
# -p 80:80 端口映射
# --name 自定义名称
# manager管理节点, 查看所有service服务
docker service ls
# 在 manager 和 work 节点,都执行 docker ps 命令,查看服务是否启动成功
docker ps
# 访问服务
curl 192.168.204.101
如果要想在管理端去访问 curl 192.168.204.202 和 192.168.204.203,也显示服务正常。
需要先扩容至副本数为 3,即可。
提示:另一种情况:副本数为3后,现在指定节点203退出swarm集群,此时 3 个副本就会重新分配(比如:201机器2个副本,202机器1个副本,如果此时203节点重新加入后,即使203这个节点上没有这个副本,集群会帮我们自动分发服务,你同样还是可以访问curl 192.168.204.203 成功)
6.弹性伸缩<扩缩容>
以下命令,在
manager 管理节点
执行操作
# 副本数扩容(nginx_swarm:服务名)
docker service update --replicas 3 nginx_swarm
错误提示:error creating external connectivity network: Failed to Setup IP tables: U
解决方案:关闭防火墙后,需要重启 docker 服务
命令:service docker restart
缩容
修改 --replicas 的个数即可。
7.节点离开swarm集群
# 哪个节点要离开集群,在指定节点执行如下命令
docker swarm leave
管理节点查看节点信息,可以看到有个节点已经Down
了
8.删除离开的节点
以下命令,在
manager 管理节点
执行操作
# 删除节点(nodeId 通过 docker node ls 查看)
docker node rm [nodeId]
9.离开的节点,再次加入swarm集群
在要加入集群的节点执行如下命令:
# 查看加入woker的命令
docker swarm join-token worker
# 再次执行刚才的,加入swarm集群命令即可
docker swarm join --token SWMTKN-1-3gcmbp3voxo05kw0q4lfe972a1uy7bbch59aabu55i3dnb2eeo-3a26jdpdkmdmvjuj54ki9c14h 192.168.204.101:2377
附:join token其他常见命令:
docker swarm join-token worker:查看加入woker的命令。
docker swarm join-token manager:查看加入manager的命令
docker swarm join-token --rotate worker:重置woker的Token。
docker swarm join-token -q worker:仅打印Token。
10.退出 docker swarm 集群
# work 节点:
docker swarm leave
# manager节点:
docker swarm leave -f
本文结束,谢谢
相关文章:

4.docker容器编排(docker compose 与 docker swarm)
本文目录 1.容器编排2.Docker Compose1.Docker Compose 安装2.Docker Compose 示例1.使用 docker-compose 启动 nginx2.docker compose 常用命令3.校验 docker-compose.yml 是否有错误4.创建服务,启动容器5.弹性伸缩<扩缩容> 3.Docker Swarm1.Swarm 架构图2.S…...
Linux中配置sudo用户访问权限
一、如何在 Linux 中配置 sudo 的访问权限 1.1、添加一个Linux普通用户有 sudo 权限 [root@localhost ~]# useradd test // 创建一个普通用户为:test [root@localhost ~]# [root@localhost ~]# passwd test // 设置用户test密码为:test Changing password for user te…...

ASfP: 增强AOSP平台开发的利器——Android Studio for Platform
ASfP: 增强AOSP平台开发的利器——Android Studio for Platform Android Studio for Platform (ASfP) 是一个为使用 Soong 构建系统构建的 Android 开源项目(AOSP)平台开发者而设计的 Android Studio IDE 版本。与标准 Android Studio 不同,…...

【Html】用CSS定义咖啡 - 咖啡配料展示
显示效果 代码 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>CodePen - For The Love Of Coffee</title><link rel"stylesheet" href"./style.css">&l…...

Learn Prompt-Prompt 高级技巧:AutoGPT
AutoGPT 是一个由Toran Richards创建的流行开源项目。它利用GPT4作为大脑,结合langchain的链接思想,连接各种工具和互联网资源,来完成人类给予的任务。您只需要设定一个目标,AutoGPT就会自主规划并逐步执行任务。如果遇到问题&…...

IntelliJ IDEA - Maven 在控制台Maven编译正常,但是在IDEA中不正常,表现不一致
文章目录 现象原因解决验证 现象 一个Maven项目,当导入到IDEA后,无法在IDEA中正常的编译和下载jar依赖,类似下面的截图。 但是在Windows控制台却可以正常编译,类似下面的截图。 CMD执行:mvn clean install -Dmaven.te…...
list 用法与模拟
list 用法 list list 模拟 #pragma once #include <assert.h> namespace sjy {//链表节点template <typename T>struct __list_node{__list_node(const T& val T()):_prev(nullptr),_next(nullptr),_val(val){}/*成员变量*/__list_node<T>* _prev;__…...

【操作系统笔记】进程和线程
进程的组成 进程要读取 ELF 文件,那么: ① 要知道文件系统的信息,fs_struct② 要知道打开的文件的信息,files_struct 一个进程除了需要读取 ELF 文件外,还可以读取其他的文件中的数据。 进程中肯定有一个 mm_struct…...
一短文读懂编译型与解释型编程语言
在编程世界中,我们经常听到编译型语言和解释型语言这两个术语。它们是什么,有什么区别呢?让我们一起来探讨一下。 编译型语言 编译型语言,如C、Java等,是一种需要先被编译成机器代码,然后才能被执行的语言…...

修炼离线:(三)sqoop插入hbase 报错权限问题
一:报错现象。 二:解决方式。 方法一:修改文件所有者。 切换hadoop用户:export HADOOP_USER_NAMEhdfs hadoop fs -chown -R root:root /方法二:修改权限 切换hadoop用户:export HADOOP_USER_NAMEhdfs ha…...

【JavaEE】多线程(四)
多线程(四) 在开始讲之前,我们先来回顾回顾前三篇所讲过的内容~ 线程的概念 并发编程,多进程,比较重,频繁创建销毁,开销大 Thread的使用 创建线程 继承Thread实现Runnable继承Threadÿ…...
第一章:最新版零基础学习 PYTHON 教程(第七节 - Python 中的语句、缩进和注释)
在这里,我们将讨论Python中的语句、Python中的缩进和Python中的注释。我们还将讨论 Python 语句、Python 缩进、Python 注释的不同规则和示例,以及“文档字符串”和“多行注释”之间的区别。 Python中的语句是什么 Python语句是Python 解释器可以执行的指令。Python 语言中…...
C++ 【2】
1.指针基础 字符:C 一个字符占一个字节 在C中 << 这个为插入运算符 >> 这个为提取运算符 一个变量的地址称为该变量的指针;如果在程序中定义了一个变量或者数组, 那么,这个变量或数组的地址(指针…...
Java学习笔记40——Lambda表达式
Lambda表达式 Lambda表达式函数式编程思想概述Lambda表达式的标准格式Lambda表达式练习练习1练习2练习3 Lambda表达式的省略模式Lambda表达式的注意事项Lambda表达式与接口的区别 Lambda表达式 函数式编程思想概述 面向对象思想强调“必须通过对象的形式做事” 在函数式思想中…...
【考研数学】线性代数第五章 —— 特征值和特征向量(3,矩阵对角化理论)
文章目录 引言三、矩阵对角化理论3.1 一般矩阵的相似对角化3.2 实对称矩阵的相似对角化3.2.1 实对称矩阵相似对角化定理3.2.2 实对称矩阵相似对角化过程 写在最后 引言 承接前文,我们来看看矩阵的对角化理论。 我们前面提到对角化是在矩阵相似那里,若存…...

【计算机网络】IP数据报首部格式、最大传输单元MTU、最大分段大小MSS
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 更多计算机网络知识专栏:计算机网络🔥 给大家跳段…...
shell脚本之文件读写
shell脚本之文件读写 1、读取文件内容并打印2、将内容写入文件3、追加内容到文件末尾4、读取文件内容到变量中5、逐行读取文件内容并处理6、逐行追加内容到文件末尾7、获取文件行数8、获取文件最后一个单词 Shell 脚本读写文件的方法有很多种,下面是一些常见的方法&…...

SAP 刷新Fiori Apps缓存的方法(解决修改CDS后Fiori无法重载新配置)
1. 问题 修改CDS Annotation后,基于Fiori Element发布的Fiori App无法应用新的界面 2. 解决办法 2319491 - How to clean up the cache after applying changes that affect SAP Fiori apps刷新Frontend: SE38: /UI5/APP_INDEX_CALCULATE…...

如何在 Excel 中计算日期之间的天数
计算两个日期之间的天数是 Excel中的常见操作。无论您是规划项目时间表、跟踪时间还是分析一段时间内的趋势,了解如何在 Excel 中查找日期之间的天数都可以提供强大的日期计算功能。 幸运的是,Excel 提供了多种简单的方法来获取两个日期之间的天数。继续…...

Java高级-注解
注解 1.介绍2.元注解3.注解的解析4.注解的应用场景 1.介绍 注解 Annotation 就是Java代码里的特殊标记,作用是让其他程序根据注解信息来决定什么是执行该程序注解:注解可以在类上、构造器上、方法上、成员变量上、参数上等位置 自定义注解 /*** 自定…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...