当前位置: 首页 > news >正文

OpenShift:关于OpenShift(OKD)通过命令行的方式部署镜像以及S2I流程Demo

写在前面


  • 因为参加考试,会陆续分享一些 OpenShift 的笔记
  • 博文内容为安装完 OpenShift, 利用 OpenShift 引擎部署一个镜像应用和一个 S2I 流程部署应用 Demo
  • 学习环境为 openshift v3 的版本,有些旧
  • 这里如果专门学习 openshift ,建议学习 v4 版本
  • 理解不足小伙伴帮忙指正

傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波


OpenShift 提供了 Web 控制台,通过图形界面,用户可以完成一些操作。但是个人觉得,不经常用,控制台还真不怎么好用, 好在 OpenShift 还提供了一系列命令行工具。

oc OpenShift 中一个重要的命令行客户端。OpenShift Web 控制台能完成的事情,通过 oc 命令也能完成。在进行自动化及重复性的操作时,命令行工具比图形界面更加高效。

可以尝试执行 oc version 命令查看 OpenShift 的集群版本信息,测试 oc 命令是否正常工作。

┌──[root@192.168.26.16]-[~]
└─$oc version
oc v3.11.0+0cbc58b
kubernetes v1.11.0+d4cacc0
features: Basic-Auth GSSAPI Kerberos SPNEGOServer https://127.0.0.1:8443
kubernetes v1.11.0+d4cacc0

当前版本为 3.11 的版本

因为oc命令是带有权限管控的,所以在使用 oc 命令进行实际的操作前,需要先通过 oc 1ogin 命令登录,当然,如何使用了 kubeconfig 文件就不需要了

┌──[root@192.168.26.16]-[~]
└─$oc login -u developer
Logged into "https://127.0.0.1:8443" as "developer" using existing credentials.You have access to the following projects and can switch between them with 'oc project <projectname>':hello-world* myprojectUsing project "myproject".

配置oc命令补全

┌──[root@192.168.26.16]-[~]
└─$cat /etc/profile
# /etc/profile# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.source <(oc completion bash)
....
┌──[root@192.168.26.16]-[~]
└─$source /etc/profile

openshift 的上游开源版本现在叫 OKD, 所以在下文中也称 OKD ,不在说明

OKD 的项目是一个完整的 CICD 流水线的项目。相对于 K8s , okd 做了很多,整合了整个流水线, 当然没有可比性,OKD 作为 Kubernetes 的社区发行版,针对持续应用程序开发和多租户部署进行很多优化。

下面我们通过两个 Demo 来简单认识一下 OKD

  • 第一个是类似 K8s 的一个 deploy 部署,只有CD,但是涉及的资源对象都会自动完成创建,在不用插件的 K8s 中,这些都是需要人工处理
  • 第二个是一个结合 自动化流程工具S2I(Source to lmage) 的一个 CICD 的 Demo

镜像项目构建

通过 oc new-project 命令创建一个新项目 he11o-world-oc

┌──[root@192.168.26.16]-[~]
└─$oc new-project hello-world-oc
Now using project "hello-world-oc" on server "https://127.0.0.1:8443".You can add applications to this project with the 'new-app' command. For example, try:oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.gitto build a new example application in Ruby.

OKD 中的的项目 Project 是基于 K8s 中的 命名空间的,在创建一个 项目的同时,会生成一个同名的命名空间。

┌──[root@vms16.liruilongs.github.io]-[~]
└─$oc get project
NAME             DISPLAY NAME   STATUS
hello-world-oc                  Active
myproject        My Project     Active
┌──[root@vms16.liruilongs.github.io]-[~]
└─$oc login -u system:admin
┌──[root@vms16.liruilongs.github.io]-[~]
└─$oc get ns | grep hello
hello-world-oc                  Active    4m

假设我们已经走过了 CI 的过程,现在拥有一个包含应用的打好的镜像 openshift/hello-openshift ,拉取镜像

┌──[root@192.168.26.16]-[~]
└─$docker pull openshift/hello-openshift
Using default tag: latest
latest: Pulling from openshift/hello-openshift
Digest: sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e
Status: Downloaded newer image for openshift/hello-openshift:latest
docker.io/openshift/hello-openshift:latest

在命令行可以通过 oc new-app 命令方便地部署 DockerHub 等 Docker 镜像仓库的镜像。

下面的命令中, oc new-app 后面紧跟的 为镜像名字。如果涉及源码的话,需要指定 ~源码地址的方式, 通过 --name podName 指定 应用名称 名字

OKD 中应用的概念和和传统的应用概念相关,当前应用的所有的 API 资源都会打上 app=appname 的标签

通过 oc new-app openshift/hello-openshift 创建的应用,OKD 会自动的创建一些应用相关的 API 资源对象,这些资源包括 OKD 所特有的和原生的 k8s API 对象。

┌──[root@192.168.26.16]-[~]
└─$oc new-app openshift/hello-openshift
--> Found Docker image 7af3297 (4 years old) from Docker Hub for "openshift/hello-openshift"* An image stream tag will be created as "hello-openshift:latest" that will track this image* This image will be deployed in deployment config "hello-openshift"* Ports 8080/tcp, 8888/tcp will be load balanced by service "hello-openshift"* Other containers can access this service through the hostname "hello-openshift"--> Creating resources ...imagestream.image.openshift.io "hello-openshift" createddeploymentconfig.apps.openshift.io "hello-openshift" createdservice "hello-openshift" created
--> SuccessApplication is not exposed. You can expose services to the outside world by executing one or more of the commands below:'oc expose svc/hello-openshift'Run 'oc status' to view your app.
┌──[root@192.168.26.16]-[~]
└─$

用构建日志可以看到,我们只提供了镜像,其他的 API 资源都是自动生成的。

  • 从Docker Hub 找到镜像,用于 openshift/hello-openshift”
  • 创建 Image Stream为 hello-openshift:latest 使之指向最新的镜像
  • 创建 Deployment Config 为 hello-openshift,
  • 创建 Replication Controller 为 hello-openshift-1
  • 创建 Service ,且 8080/tcp, 8888/tcp 端口将被服务"hello-openshift"负载均衡
  • 其他容器可以通过主机名"hello-openshift"访问此服务
  • 希望外部访问可以通过 'oc expose svc/hello-openshift' 创建 routehello.openshift 供外部访问。

简单说明一下,这里的

  • Image Stream 是 okd 所特有的,用于描述 一组带版本的镜像。
  • Deployment Config 也是 okd 特有,用于描述,pod 部署的版本,回滚,以及副本,相对于原生的 deployment,多了滚动升级相关配置,可以说 dc 是用来描述 deploy 的,就像 通过 deploy 来描述 pod 一样。

通过下面的命令可以看到生成的全部资源

┌──[root@vms16.liruilongs.github.io]-[~]
└─$oc get all
NAME                          READY     STATUS    RESTARTS   AGE
pod/hello-openshift-1-xx2q4   1/1       Running   3          183dNAME                                      DESIRED   CURRENT   READY     AGE
replicationcontroller/hello-openshift-1   1         1         1         183dNAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/hello-openshift   ClusterIP   172.30.166.53   <none>        8080/TCP,8888/TCP   183dNAME                                                 REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/hello-openshift   1          1         1         config,image(hello-openshift:latest)NAME                                             DOCKER REPO                                 TAGS      UPDATED
imagestream.image.openshift.io/hello-openshift   172.30.1.1:5000/myproject/hello-openshift   latest    6 months agoNAME                                       HOST/PORT         PATH      SERVICES          PORT       TERMINATION   WILDCARD
route.route.openshift.io/hello-openshift   hello.openshift             hello-openshift   8080-tcp                 None
┌──[root@vms16.liruilongs.github.io]-[~]
└─$

S2I 工具项目构建

作为一个面向应用的平台,OpenShift 提供了 S2I(Source to Image) 的流程,使得企业内容器的构建变得标准化和自动化,从而提高了软件从开发到+上线的效率。

在这里插入图片描述

一个典型的 S2I 流程包含了以下几个步骤。

  1. 用户输入源代码仓库的地址。
  2. 用户选择 S2I 构建的基础镜像(又称为 Builder 镜像)。Builder镜像中包含了操作系统、编程语言、框架等应用所需的软件及配置。OpenShift默认提供了多种编程语言的Builder镜像,如Java、PHP、Ruby、Python、Perl等。用户也可以根据自身需求定制自己的Builder镜像,并发布到服务目录中供用户选用。
  3. 用户或系统触发 S2I 构建。OpenShift 将实例化S2I构建执行器。
  4. S2I 构建执行器将从用户指定的代码仓库下载源代码。
  5. S2I 构建执行器实例化Builder镜像。代码将会被注入Builder镜像中。
  6. Builder 镜像将根据预定义的逻辑执行 源代码的编译、构建并完成部署
  7. S2I 构建执行器将完成操作的 Builder 镜像并生成新的 Docker镜像
  8. S2I 构建执行器将新的镜像推送到 OpenShift 内部的 镜像仓库。
  9. S2I 构建执行器更新该次构建相关的 Image Stream 信息。

S2I构建完成后,根据用户定义的部署逻辑,OpenShit 将把镜像实例化部署到集群中。

下面我们看 Demo, 创建一个新的项目

┌──[root@vms16.liruilongs.github.io]-[~]
└─$oc new-project  cicd-demo
Now using project "cicd-demo" on server "https://127.0.0.1:8443".You can add applications to this project with the 'new-app' command. For example, try:oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.gitto build a new example application in Ruby.

以给出的 Demo 为例,,通过 oc new-app 创建一个应用

oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git

这里指定

  • Builder 基础镜像为: centos/ruby-25-centos7
  • 源码地址为: https://github.com/sclorg/ruby-ex.git

部署项目,可以看到相关资源对象会自动创建

┌──[root@vms16.liruilongs.github.io]-[~]
└─$oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
--> Found Docker image e96bd99 (18 months old) from Docker Hub for "centos/ruby-25-centos7"Ruby 2.5--------Ruby 2.5 available as container is a base platform for building and running various Ruby 2.5 applications and frameworks. Ruby is the interpreted scripting language for quick and easy object-oriented programming. It has many features to process text files and to do system management tasks (as in Perl). It is simple, straight-forward, and extensible.Tags: builder, ruby, ruby25, rh-ruby25* An image stream tag will be created as "ruby-25-centos7:latest" that will track the source image* A source build using source code from https://github.com/sclorg/ruby-ex.git will be created* The resulting image will be pushed to image stream tag "ruby-ex:latest"* Every time "ruby-25-centos7:latest" changes a new build will be triggered* This image will be deployed in deployment config "ruby-ex"* Port 8080/tcp will be load balanced by service "ruby-ex"* Other containers can access this service through the hostname "ruby-ex"--> Creating resources ...imagestream.image.openshift.io "ruby-25-centos7" createdimagestream.image.openshift.io "ruby-ex" createdbuildconfig.build.openshift.io "ruby-ex" createddeploymentconfig.apps.openshift.io "ruby-ex" createdservice "ruby-ex" created
--> SuccessBuild scheduled, use 'oc logs -f bc/ruby-ex' to track its progress.Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:'oc expose svc/ruby-ex'Run 'oc status' to view your app.

使用 S2I 的方式创建应用,同样会需要作为一个 SVC 外部访问需要通过 Route 发布出去。

┌──[root@vms16.liruilongs.github.io]-[~]
└─$oc expose svc/ruby-ex
route.route.openshift.io/ruby-ex exposed

创建好之后就可以通过路由访问了

这里小伙伴可能会有一个疑问,openshift 如何把源码放到基础镜像里面? 如果存在需要编译的源码是如何处理的。

使用默认的 assemble 脚本

为了将源代码放入构建镜像中,OpenShift使用了S2I(Source-to-Image)构建策略。这种策略允许将源代码与构建镜像的基础镜像结合在一起,以创建一个新的镜像。在这种情况下,基础镜像是“centos/ruby-25-centos7”,源代码位于“https://github.com/sclorg/ruby-ex.git”

在执行 “oc new-app” 命令时,OpenShift 会自动检测源代码的类型,并选择适当的 S2I 构建器。在这种情况下,OpenShift 将选择 Ruby S2I构建器,该构建器将源代码与基础镜像结合在一起,以创建一个新的镜像。

具体来说,OpenShift将使用以下命令将源代码放入构建镜像中

s2i build https://github.com/sclorg/ruby-ex.git centos/ruby-25-centos7 my-ruby-app

这将使用Ruby S2I构建器将源代码与基础镜像结合在一起,并将结果保存为名为“my-ruby-app”的新镜像。这个新镜像可以用来部署应用程序。

S2Iassemble 脚本是用来将源代码编译成可执行文件并将其放入容器中的。在这种情况下,Ruby S2I 构建器将使用默认的assemble脚本,该脚本将执行以下操作:

#!/bin/bashset -e# Add application sources
cp -Rf /tmp/src/. /opt/app-root/src# Install the dependencies
if [ -e /opt/app-root/src/Gemfile ]; thencd /opt/app-root/srcbundle install --path=vendor/bundle
fi# Run the build script
if [ -e /opt/app-root/src/build.sh ]; thencd /opt/app-root/src/bin/bash build.sh
fi# Fix permissions
chown -Rf 1001:0 /opt/app-root
chmod -Rf g+rw /opt/app-rootexec "$@"

这个脚本将源代码复制到容器中,并安装任何必要的依赖项。然后,它将运行任何构建脚本(如果有的话),并修复文件权限。最后,它将执行容器的默认命令。

通过 Dockerfile 的方式

在 OpenShift 中,还可以使用类似的方法创建一个构建配置,该配置引用 Dockerfile。类似传统的结合方式,以下是一个示例构建配置:

apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:name: myapp
spec:source:git:uri: https://github.com/myuser/myapp.gitcontextDir: path/to/source/codestrategy:dockerStrategy:dockerfilePath: Dockerfileoutput:to:kind: ImageStreamTagname: myapp:latest
FROM base-image:tag
ADD path/to/source/code /app+

此构建配置引用 Git 存储库中的源代码,并将 path/to/source/code 目录指定为上下文目录。它还引用 Dockerfile 并指定输出镜像名称和标签。

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃


《开源容器云OpenShift:构建基于Kubernetes的企业应用云平台》

https://docs.okd.io/latest/welcome/index.html

《OKD 3.9 DO280 Red Hat OpenShift Administration I》


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)

相关文章:

OpenShift:关于OpenShift(OKD)通过命令行的方式部署镜像以及S2I流程Demo

写在前面 因为参加考试&#xff0c;会陆续分享一些 OpenShift 的笔记博文内容为安装完 OpenShift, 利用 OpenShift 引擎部署一个镜像应用和一个 S2I 流程部署应用 Demo学习环境为 openshift v3 的版本&#xff0c;有些旧这里如果专门学习 openshift &#xff0c;建议学习 v4 版…...

楔形文字的破解(钉子形文字)【文字破译原理:信息的相关性】

文章目录 引言I 破解楔形文字1.1 贝希斯敦铭文1.2 破解古波斯楔形文字1.3 破解新埃兰楔形文字和巴比伦楔形文字1.4 破解苏美尔楔形文字引言 祖先借助外力走出了非洲,开始了农耕定居的生活,创造能量的水平和能量的使用效率都越来越高;依靠着语言、文字和书写系统,经验、技术…...

【网络安全】文件上传绕过思路

引言 分享一些文件上传绕过的思路&#xff0c;下文内容多包含实战图片&#xff0c;所以打码会非常严重&#xff0c;可多看文字表达&#xff1b;本文仅用于交流学习&#xff0c; 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人…...

MySQL数据库(2)

目录 日期类型的基本使用 timestamp时间戳 修改表 insert基本使用 insert注意事项 update基本使用 update注意事项 delete基本使用 delete注意事项 select基本使用 select练习1 select练习2 select练习3 日期类型的基本使用 timestamp时间戳 在5.7版本使用时间戳需…...

2023年学什么编程语言,最容易找工作?

在众多行业中&#xff0c;程序员属于高薪职业。无论是在国外还是国内&#xff0c;程序员的薪金水平普遍高于其他行业的工作岗位&#xff0c;例如web前端开发、软件工程、游戏开发、APP开发、网络爬虫、网站开发、人工智能开发、网络维护、Java开发、大数据分析、Python开发等工…...

4月23日,今日信息差

1、京东健康皮肤医院正式上线 2、蚂蚁集团再捐1亿元支持内蒙古种树治沙 3、苹果MacBook组装商广达将投资1.2亿美元在越南建电脑制造厂 4、用友与百度签署战略合作协议 5、马斯克&#xff1a;星舰可能在一两个月后准备再次发射 6、格芯起诉IBM 恐波及日本2nm芯片计划 7、河北南部…...

【随笔四】JavaScript 中的 rest

某次开发中&#xff0c;看到项目代码中用到了 rest 这个参数&#xff0c;但又没看到在哪里定义或者传入&#xff0c;当时没太理解它的意思&#xff0c;查了下资料才恍然大悟。含义也很简单&#xff0c;写个随笔记录下。 关键字 rest 的用法&#xff08;剩余参数&#xff09; 在…...

maven作用讲解---以及怎么配置阿里的maven镜像

目录 Maven介绍 传统的java项目的结构和maven的对比 传统 Maven的项目 如何配置阿里 maven 2. 修改 Maven介绍 传统的java项目的结构和maven的对比 传统 Maven的项目 如何配置阿里 maven (1) 把 D:\program\JavaIDEA 2020.2\plugins\maven\lib\maven3\conf\settings.xml…...

NXP公司LPC21xx+热敏电阻实现温度检测

LPC2131/32/34/36/38微控制器基于16位/32位Arm7TDMI-S™CPU&#xff0c;支持实时仿真和嵌入式跟踪&#xff0c;具有尺寸小&#xff0c;功耗低&#xff0c;多个32位定时器、单/双10位8通道ADC、10位DAC、PWM通道、47个GPIO线&#xff08;它们拥有多达9个边沿或电平触发的外部中断…...

Springboot信息泄露以及heapdump的利用

本文转载于https://blog.csdn.net/weixin_44309905/article/details/127279561 heapdump的利用 0x01 Springboot信息泄露 路由列表 0x02 下载heapdump0x03 利用heapdump的姿势 工具一&#xff1a;heapdump_tool工具二&#xff1a;Eclipse MemoryAnalyzer 0x01 Springboot信息…...

淘宝天猫店铺新品如何运营?

新品在店铺运营过程中是十分重要的部分&#xff0c;你知道新品在店铺运营中有何作用&#xff1f;了解新品运营机制吗&#xff1f;今天就来快速了解关于新品的知识点。 新品在店铺运营的角色&#xff1a; 01、商品生命周期有限 商品的普遍生命周期在3个月左右&#xff0c;3个…...

Linux-给普通用户sudo权限

给普通用户sudo权限 创建用户安装sudo组件设置sudo权限切换到 root 用户、以root用户登录修改 /etc/sudoers文件权限修改 /etc/sudoers文件 &#xff08;主要步骤&#xff09;保存退出将 /etc/sudoers写权限改回来结束 创建用户 useradd xwy //创建用户passwd xwy //为用户设置…...

小米13 Ultra:携光前行,追求每一束光的精确还原

“光&#xff0c;是影像的原点”&#xff0c;一切色彩、影调都在于光。我们目之所及的大千世界&#xff0c;皆被光与影一笔一划细细勾勒&#xff0c;为“视”界晕染上或鲜明、或复古、或反差、或梦幻的色调。我们用“光”去描绘、定义“影像”&#xff0c;让一切平凡的事物&…...

全志 Orange Pi相关网站集

Orange Pi 系统安装的常识 看到有教程说android系统需要用win32diskimager才能成功烧写运行镜像名称与版本的对应关系 ubuntu版本号代号16.04Xenial Xerus&#xff08;好客的非洲地鼠&#xff09;18.04Bionio Beaver &#xff08;仿生海狸}20.04Focal Fossa &#xff08;类似…...

js+css实现简单的弹框动画

效果图 只是一个简单的演示demo&#xff0c;但是可以后面可以优化样式啥的 刚开始元素的display为none&#xff0c;然后&#xff0c;为了给元素展示时添加一个动画&#xff0c;首先要添加样式类名show&#xff0c;让它覆盖display:none&#xff0c;变得可见。然后&#xff0c;添…...

真题详解(UML图)-软件设计(五十五)

真题详解&#xff08;计算机知识&#xff09;-软件设计&#xff08;五十四)https://blog.csdn.net/ke1ying/article/details/130278265 组织域名&#xff1a; com商业组织 edu教育组织 gov政府组织 net主要网络支持中心 mil军事部门 Int国际组织 2、时间复杂度 O&#…...

基于html+css的图展示42

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...

MyBatis系列-入门篇

MyBatis入门 一&#xff1a;故事背景二&#xff1a;MyBatis 简介2.1什么是MyBatis2.1 MyBatis有什么好处 三&#xff1a;MyBatis 入门3.1使用SpringBoot集成MyBatis3.1.1 添加依赖3.1.2 配置数据源3.1.3 配置MyBatis3.1.4 创建Mapper接口和SQL映射文件3.1.5 注入Mapper接口 3.2…...

科学防雷接地和雷电防护方案

说到防雷&#xff0c;可能不少人首先会想到避雷针&#xff0c;而“避雷针”这一概念&#xff0c;很容易让大家对防雷的概念造成误解。 误解1: 避雷针是用来“避雷”的。 其实&#xff0c;避雷针的学名叫“接闪器”&#xff0c;不是用来“避开雷击”的&#xff0c;而是用来“迎…...

SpringMVC-RESTful架构风格

目录 RESTful架构风格 1、RESTful概述 2、RESTful的六大原则 3、RESTful的实现 4、HiddenHttpMethodFilter RESTful风格的CRUD 1、环境搭建 2、功能需求 3、功能&#xff1a;访问首页 4、功能&#xff1a;查询所有数据 5、功能&#xff1a;删除一条数据 6、功能&…...

consistency-starter

使用说明 建议在B端使用,不推荐C端使用 功能 事务提交之后推送MQ a. 当一个程序中有多个MQ需要推送时,可以在事务内任意位置调用发送MQ方法,而不会因为程序报错而导致数据不一致问题.事务提交之后发起子线程执行异步任务程序中灵活指定时间执行子任务 a. 例如:业务要求执行A业…...

【Json】Spring Boot整合Json与Json数组

Spring Boot整合Json与Json数组 文章目录 Spring Boot整合Json与Json数组一&#xff0c;引入依赖二&#xff0c;常见Json数据格式-2.1 Json格式-2.2 数组格式-2.3 Json数组格式 三&#xff0c;在Java中如何使用-3.1 Json格式-3.2 数组格式-3.3 Json数组格式 四&#xff0c;Json…...

Adobe Photoshop 软件下载

Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。 时至今日&#xff0c;Adobe Photoshop 已经成为当今世界上最流行、应用最广泛的图像处理软件。不但设计专业的学生要系统的学习这个…...

[ES6]解构与赋值

[ES6]解构与赋值 解构模型对象属性解构函数参数解构字符串的解构数组解构REST 运算符参与的解构--...数组解构属性解构 解构的赋值 解构赋值是对赋值运算符的扩展。 通过解构&#xff0c;可以更加简单的获取复杂对象的属性 解构模型 解构的源&#xff0c;解构赋值表达式的右…...

2023年3月 青少年软件编程(C语言) 等级考试试卷(五级)

1. 拼点游戏 C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌&#xff0c;每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌&#xff0c;S随机抽取n张蓝色卡牌&#xff0c;他们进行n回合拼点&#xff0c;每次两人各出一张卡牌&#xff0c;点数大者获得三颗巧克力&…...

Unity之ShaderGraph入门

前言 随着Unity版本的不断升级&#xff0c;URP&#xff08;可编程渲染管线&#xff09;也越来越普及了。不管是从效果还是性能&#xff0c;都是吊打老版的build-in-shader。所以无论如何我们都要开始 拥抱URP&#xff0c;升级Unity的时候到了。 引擎版本 我这里选择了Unity …...

Spring-学习修改尚硅谷最新教程笔记

二、Spring 1、Spring简介 1.1、Spring概述 官网地址&#xff1a;https://spring.io/ Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Jav…...

CPU寄存器的分类与Intel 8086 的eax,ebx,ecx,edx

目录 一、CPU中的寄存器分类 1.用户可见寄存器 2.控制和状态寄存器 一、CPU中的寄存器分类 大致分为两类: 一类属于用户可见寄存器&#xff0c;对这类寄存器编程&#xff0c;以及通过优化使CPU因使用这类寄存器&#xff0c;而减少对主存的访问次数&#xff0c; 另一类属于控…...

如何快速上手Vue框架?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 运行环境&#xff1a;Google浏览器 Vue框架版本&#xff1a;Vue.js v2.7.14 目录 一. 框架是什么&#xff1f;二. 怎么写一个Vue程序&#xff08;以IDEA举例&#xff09;&#xff1f;三. 什么是声明式渲染?3.1 声明式3.2 渲染…...

Android进阶宝典—App响应时间优化

响应时间&#xff0c;它是用来衡量系统运行效率的一个重要指标。评价一个应用的响应时间&#xff0c;可以从用户感知和系统性能这两个角度来考量。 响应时间的长短&#xff0c;可能影响用户对某个功能、某个应用、乃至某个系统的使用。毕竟如果有选择&#xff0c;没有哪个人会愿…...