使用podman管理容器

目录

1.安装及配置podman 

 2.镜像的命名

 3.对镜像重新做标签

4.删除镜像 

 5.查看镜像的层结构

6.导出和导入镜像 

7.创建容器

8.创建一个简单的容器 

 9.容器的生命周期

 10.创建临时容器

11.指定容器中运行的命令 

12.创建容器时使用变量 


对于初学者来说,不太容易理解什么是容器,这里举一个例子。想象一下,我们把系统安装在一个U盘中,此系统中安装好了MySQL。
然后我们把这个U盘插人一台正在运行的物理机上,这个物理机上并没有安装MySQL,如图27-1所示。
然后把U盘中的mysqld进程“曳”到物理机上运行。但是这个mysqld进程只能适应U盘中的系统,不一定能适应物理机上的系统。所以,我们找一个类似气球的东西把 mysqld进程在物理机中包裹保护起来,这个mysqld进程依然适应U盘中的生态环境(系统),却可以从物理机上吸收CPU和内存作为维持mysqld进程运行的“养分”。

那么,这个类似气球的东西就是容器,U盘就是镜像。  

在Linux中安装软件包时经常会遇到各种包依赖,或者有人不会在 Linux系统(如Ubuntu、CentOS)中安装软件包。这样以后我们就不需要安装和配置MySQL了,直接把这个“U盘”插到电脑上,然后运行一个容器出来,这样就有MySQL这个服务了。

所谓镜像,就是安装了系统的硬盘文件,这个系统中安装了想要运行的程序,如 MySQL.Nginx,并规定好使用这个镜像所生成的容器
里面运行什么进程。这里假设有一个安装了MySQL的镜像,如图27-2所示。

在服务器上有一个MySQL 的镜像(已经安装好了MySQL),然后使用这个镜像生成一个容器。这个容器中只运行一个mysqld进程,容器中的mysqld进程直接从物理机上吸收CPU和内存以维持它的正常运行。
以后需要什么应用,就直接拉取什么镜像下来,然后使用这个镜像生成容器。例如,需要对外提供MySQL服务,那么就拉取一个MySQL镜像,然后生成一个MySQL容器。如果需要对外提供 Web服务,那么就拉取一个Nginx镜像,然后生成一个Nginx容器。
一个镜像是可以生成很多个容器的,如图27-3所示。

1.安装及配置podman 

前面已经配置了yum源,所以这里直接使用yum install podman -y命令安装,命令如下。  

[root@RHEL813 ~]# yum -y install podman

 查看现在系统中有多少镜像,命令如下。

[root@RHEL813 ~]# podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
[root@RHEL813 ~]# 

 没有任何输出,说明现在还没有镜像。

查看系统中有多少容器,命令如下。  

[root@RHEL813 ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@RHEL813 ~]# 

 没有任何输出,说明当前没有容器。

如果要拉取镜像,一般是从国外网站的镜像仓库中拉取,速度会很慢。默认podman从以下仓库中拉取镜像:registry.access.redhat.comregistry.redhat.iodocker.io。下面配置加速器,提高从docker.io中拉取镜像的速度。
登录阿里云控制台,找到容器镜像服务,单击镜像工具→镜像加速器,找到自己的加速器地址,这里使用的是https://XXXX.mirror.aliyuncs.com.

修改 podman 的配置文件/etc/containers/registries.conf,修改内容如下。 

unqualified‐search‐registries = ["docker.io"][[registry]]
prefix = "docker.io"
location = "/XXXX.mirror.aliyuncs.com"
(XXXX指的是用你自己的aliyun镜像加速器)
这里的意思是从 docker.io中拉取镜像时使用加速器XXXX.mirror.aliyuncs.com,注意这里不需要加https,配置好之后不需要重启什么服务

下面开始拉取docker.io/nginx镜像,命令如下。 

[root@RHEL813 ~]# podman pull docker.io/nginx

拉取Mysql的镜像,命令如下。

[root@RHEL813 ~]# podman pull mysql
网易仓库地址是https://c.163yun.com/hub#/home,在浏览器中打开此界面需要登录,然后搜索需要的镜像即可。下面从网易仓库中
拉取 CentOS镜像,命令如下。
[root@RHEL813 ~]# podman pull  hub.c.163.com/library/centos
Trying to pull hub.c.163.com/library/centos:latest...
Getting image source signatures
Copying blob a3ed95caeb02 done  
Copying blob a3ed95caeb02 done  
Copying blob 2409c3878ba1 done  
Writing manifest to image destination
Storing signatures
328edcd84f1bbf868bc88e4ae37afe421ef19be71890f59b4b2d8ba48414b84d

 2.镜像的命名

一般情况下,镜像的命名格式如下。  

服务器IP: 端口 /分类 /镜像名 :tag

 如果不指定端口则默认80,如果不指定 tag则默认latest

例如,192.168.26.101:5000/cka/centos:v2。 

 再如,hub.c.163.com/library/mysql:latest。

分类也是可以不写的,如docker.io/nginx:latest。 

在把镜像上传(push)到仓库时,镜像必须按这种格式命名,因为仓库地址就是由镜像前面的IP决定的。如果只是在本机使用镜像,命名可以随意。

 查看当前系统有多少镜像,命令如下

[root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 

 3.对镜像重新做标签

 如果想给本地已经存在的镜像起一个新的名称,可以用tag来做,语法如下

podman tag 旧的镜像名 新的镜像名

 tag之后,新的镜像名和旧的镜像名是同时存在的。

步骤①:给镜像做新标签,命令如下。 

[root@RHEL813 ~]# podman tag docker.io/library/nginx 192.168.103.17/rhce/nginx:v2
[root@RHEL813 ~]# 
这里是为docker.io/library/nginx1重新做个tag,名称192.168.103.17/rhce/nginx,标签为2,这样命名的目的是让大家看到命名的随意性,建议tag 可以设置为版本号、日期等有意义的字符。

 步骤②:再次查看镜像,命令如下。

[root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      61395b4c586d  2 months ago   191 MB
192.168.103.17/rhce/nginx     v2          61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 
可以看到,对某镜像做了标签之后,看似是两个镜像,其实对应的是同一个(这类似于Linux中硬链接的概念,一个文件两个名称而已),镜像ID都是一样的。删除其中一个镜像,是不会删除存储在硬盘上的文件的,只有把 IMAGE ID所对应的所有名称全部删除,才会从硬盘上删除。

4.删除镜像 

如果要删除镜像,需要按如下语法来删除。  

podman rmi 镜像名:tag

 例如,下面要把 docker.io/library/nginx:latest删除。

步骤①:删除镜像,命令如下。 

[root@RHEL813 ~]# podman rmi docker.io/library/nginx:latest 
Untagged: docker.io/library/nginx:latest
[root@RHEL813 ~]# 

 可以看到,只是简单的一个Untagged操作,并没有任何Deleted操作。

步骤②:查看镜像,命令如下。 

root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
192.168.103.17/rhce/nginx     v2          61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 
可以看到,61395b4c586d对应的本地文件依然是存在的,因为(ID61395b4c586d)有两个名称,现在只是删除了一个名称而已,所以在硬盘上仍然是存在的。

只有删除最后一个名称,本地文件才会被删除。 

步骤③:删除镜像,命令如下 

[root@RHEL813 ~]# podman rmi 192.168.103.17/rhce/nginx:v2 
Untagged: 192.168.103.17/rhce/nginx:v2
Deleted: 61395b4c586da2b9b3b7ca903ea6a448e6783dfdd7f768ff2c1a0f3360aaba99
[root@RHEL813 ~]# 

 5.查看镜像的层结构

虽然我们所用的镜像都是从网上下载下来的,但这些镜像在制作过程中都是一点点修改、一步步做出来的。如果我们要看某镜像的这些步骤,可以用podman history命令,语法如下。
podman history镜像名
查看镜像的结构,命令如下。
[root@RHEL813 ~]# podman history hub.c.163.com/library/centos
ID            CREATED      CREATED BY                                     SIZE        COMMENT
328edcd84f1b  6 years ago  /bin/sh -c #(nop)  CMD ["/bin/bash"]           0 B         
<missing>     6 years ago  /bin/sh -c #(nop)  LABEL name=CentOS Base ...  0 B         
<missing>     6 years ago  /bin/sh -c #(nop) ADD file:63492ba809361c5...  200 MB      
[root@RHEL813 ~]# 

 最上层的CMD,定义的是当使用这个镜像生成的容器时,运行的进程为/bin/bash。

6.导出和导入镜像 

一些服务器是无法连接到互联网的,所以无法从互联网上下载镜像。在还没有私有仓库的情况下,如何把现有的镜像传输到其他机器上呢?这里就需要把本地已经pull下来的镜像导出为一个本地文件,这样就可以很容易地传输到其他机器。导出镜像的语法如下。

 步骤①:把docker.io/nginx:latest 导出为nginx.tar,命令如下。

[root@RHEL813 ~]# podman save docker.io/library/nginx:latest > nginx.tar
[root@RHEL813 ~]# ls
163mysql.tar  anaconda-ks.cfg  flink  initial-setup-ks.cfg  mysql  nginx  nginx.tar  tomcat

 既然上面已经把镜像导出为一个文件了,那么需要把这个文件导入,语法如下。

podman load ‐i file.tar

 步骤②:把nginx.tar导入为镜像,命令如下。

[root@RHEL813 ~]# podman load -i nginx.tar 
Getting image source signatures
Copying blob a7e2a768c198 skipped: already exists  
Copying blob eb7e3384f0ab skipped: already exists  
Copying blob d310e774110a skipped: already exists  
Copying blob ea43d4f82a03 skipped: already exists  
Copying blob 1dc45c680d0f skipped: already exists  
Copying blob 9c6261b5d198 [--------------------------------------] 0.0b / 0.0b
Copying blob d26d4f0eb474 [--------------------------------------] 0.0b / 0.0b
Copying config 61395b4c58 done  
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/nginx:latest
[root@RHEL813 ~]# 

 查看现有镜像,命令如下。

[root@RHEL813 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      61395b4c586d  2 months ago   191 MB
docker.io/library/flink       latest      28308bbc7b60  24 months ago  665 MB
docker.io/library/mysql       5.7.19      3e3878acd190  6 years ago    420 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@RHEL813 ~]# 

7.创建容器

容器就是镜像在宿主机上运行的一个实例,大家可以把容器理解为一个气球,气球中运行了一个进程,这个进程透过气球吸收物理机的内存和 CPU 资源。

 查看当前有多少正在运行的容器,命令如下。

[root@RHEL813 ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@RHEL813 ~]# 

 这个命令显示的仅仅是正在运行的容器,如果要查看不管是运行还是不运行的容器,需要加上-a选项,即 podman ps-a。

8.创建一个简单的容器 

运行一个最简单的容器,命令如下。 

[root@RHEL813 ~]# podman run hub.c.163.com/library/centos
[root@RHEL813 ~]# podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED       STATUS                   PORTS       NAMES
3c7b68e2106e  hub.c.163.com/library/centos:latest  /bin/bash   1 second ago  Exited (0) 1 second ago              stoic_newton
[root@RHEL813 ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@RHEL813 ~]# 
可以看到,创建了一个容器,容器ID为3c7b68e2106e,容器名是随机产生的,名称为kind_elgamal,所使用的镜像是hub.c.163.com/library/centos,容器中运行的进程为/bin/bash(也就是镜像中的CMD指定的)。

 podman ps看不到,podman ps -a能看到,且状态为Exited,说明容器是关闭状态。容器运行的一瞬间就关闭了,为什么?

 9.容器的生命周期

把容器理解为人的肉体,里面运行的进程理解为人的灵魂。如果人的灵魂宕机了,肉体也就宕机了,只有灵魂正常运行,肉体才能正常运行,如图27-4所示。

同理,只有容器中的进程正常运行,容器才能正常运行,容器中的进程宕机了,容器也就宕机了。因为没有终端的存在,/bin/bash就像执行ls命令一样一下就执行完了,所以容器生命期也就到期了。
如果把这个bash附着到一个终端上,这个终端一直存在,bash就一直存在,那么是不是容器就能一直存活了呢?

删除容器的语法如下。 

podman rm 容器ID/容器名

 如果删除正在运行的容器,可以使用-f选项。

podman rm ‐f 容器ID/容器名 
步骤①:删除刚才的容器,命令如下。
[root@RHEL813 ~]# podman rm 3c7b68e2106e
3c7b68e2106ee6ef4fc8035e69317afd6824d9946a4c428fb4671eb802dc2c08
[root@RHEL813 ~]# 

 重新创建新的容器,加上-i -t选项,可以写作-it或-i-t。

(1)-t:模拟一个终端。
(2)-i:可以让用户进行交互,否则用户看到一个提示符之后就卡住不动了。

 步骤②:创建一个容器,命令如下。

[root@RHEL813 ~]# podman run -it hub.c.163.com/library/centos
[root@ce50a82b439c /]# exit
exit
[root@RHEL813 ~]# 

 创建好容器之后就自动进入容器中了,可以通过exit退出容器,命令如下

[root@RHEL813 ~]# podman ps -q
[root@RHEL813 ~]# 
[root@RHEL813 ~]# podman ps -aq
ce50a82b439c
[root@RHEL813 ~]# 

 但是一旦退出容器,容器就不再运行了。

步骤③:删除此容器,命令如下。 

[root@RHEL813 ~]# podman rm -f ce50a82b439c
ce50a82b439cdc40ff60178349975f2ee07f96f893868ab65b180df80c4a7887
[root@RHEL813 ~]# 

 如果希望创建好容器之后不自动进入容器中,可以加上-d选项。

步骤④:再次创建一个容器,命令如下。  

[root@RHEL813 ~]# podman run -dit hub.c.163.com/library/centos
8629a9e5a8d5191ca38d7ed7f8f4a427ec14b0e5dd58892a04ab74f44c9a0d0d
[root@RHEL813 ~]# 

 因为加了-d选项,所以创建好容器之后并没有自动进入容器中。进入此容器中,命令如下。

[root@RHEL813 ~]# podman attach 8629a9e5a8d5
[root@8629a9e5a8d5 /]# exit
exit[root@RHEL813 ~]# podman ps -q
[root@RHEL813 ~]# 
[root@RHEL813 ~]# podman ps -aq
8629a9e5a8d5
[root@RHEL813 ~]# 

 可以看到,只要退出来容器就会自动关闭。

步骤⑤:删除此容器,命令如下。 

[root@RHEL813 ~]# podman rm 8629a9e5a8d5
8629a9e5a8d5191ca38d7ed7f8f4a427ec14b0e5dd58892a04ab74f44c9a0d0d
[root@RHEL813 ~]# 

 在运行容器时加上--restart=always选项可以解决退出容器自动关闭的问题。

步骤6:创建容器,增加--restart=always选项,命令如下。 

[root@RHEL813 ~]# podman run -dit --restart=always hub.c.163.com/library/centos
7713104e87c28bedeee3f18ff6d3220d51ef0bb320dc37a71e5dbb4476b66834
[root@RHEL813 ~]# 

 进入容器并退出,命令如下。

[root@RHEL813 ~]# podman ps -q
7713104e87c2
[root@RHEL813 ~]# podman attach 7713104e87c2
[root@7713104e87c2 /]# exit
exit[root@RHEL813 ~]# podman ps -q
7713104e87c2
[root@RHEL813 ~]# 

 可以看到,容器依然是存活的。

步骤⑦:删除此容器,因为容器是运行的,所以需要加上-f选项,命令如下。 

[root@RHEL813 ~]# podman ps -q
7713104e87c2
[root@RHEL813 ~]# podman rm -f 7713104e87c2
7713104e87c28bedeee3f18ff6d3220d51ef0bb320dc37a71e5dbb4476b66834
[root@RHEL813 ~]# 

 每次删除容器时,都要使用容器ID,这种方式比较麻烦,在创建容器时可以使用--name选项指定容器名。

步骤⑧:创建容器,使用--name 选项指定容器的名称。  

[root@RHEL813 ~]# podman run -dit --restart=always --name=c1 hub.c.163.com/library/centos
14df0508ff3debda3c74d1d5721b00b5c46b7098224db66595e196fe73da0c0c
[root@RHEL813 ~]# 

 这样容器的名称为c1,以后管理起来比较方便,如切换到容器,然后退出,命令如下

[root@RHEL813 ~]# podman attach c1
[root@14df0508ff3d /]# 
[root@14df0508ff3d /]# exit
exit[root@RHEL813 ~]# 

 步骤⑨:删除此容器,命令如下。

[root@RHEL813 ~]# podman rm -f c1
14df0508ff3debda3c74d1d5721b00b5c46b7098224db66595e196fe73da0c0c
[root@RHEL813 ~]# podman ps -aq
[root@RHEL813 ~]# 

 10.创建临时容器

如果要临时创建一个测试容器,又怕用完忘记删除它,可以加上--rm选项。
创建临时容器,命令如下。
[root@RHEL813 ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos
[root@05621e47c754 /]# exit
exit
[root@RHEL813 ~]# 

 创建容器时加了 --rm选项,退出容器之后容器会被自动删除

[root@RHEL813 ~]# podman ps -aq
[root@RHEL813 ~]# 

 可以看到,此容器被自动删除了,注意--rm和--restart=always选项不可以同时使用。

11.指定容器中运行的命令 

创建容器时,容器中运行的是什么进程,都是由镜像中的CMD指定的。如果想自定义容器中运行的进程,可以在创建容器的命令最后指定,如下所示。
[root@RHEL813 ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos sh
sh-4.2# 
sh-4.2# exit
exit
[root@RHEL813 ~]# 
这里就是以sh的方式运行,而不是以 bash的方式运行。

12.创建容器时使用变量 

在利用一些镜像创建容器时需要传递变量,例如,使用MySQL 的镜像、WordPress的镜像创建容器时都需要通过变量来指定一些必备的信息。需要变量用-e选项来指定,可以多次使用-e选项来指定多个变量。
[root@RHEL813 ~]# podman run -it --name=c1 --rm -e aa=123 -e bb=456 hub.c.163.com/library/centos
[root@9443e66a6a5b /]# echo $aa
123
[root@9443e66a6a5b /]# echo $bb
456
[root@9443e66a6a5b /]# exit
exit
[root@RHEL813 ~]# 
在创建容器时,通过-e选项指定了两个变量aa和 bb,然后进入容器之后可以看到具有这两个变量。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么在Android中需要Context?

介绍 在Android开发中&#xff0c;Context是一个非常重要的概念&#xff0c;但是很多开发者可能并不清楚它的真正含义以及为什么需要使用它。本文将详细介绍Context的概念&#xff0c;并解释为什么在Android应用中需要使用它。 Context的来源 Context的概念来源于Android框架…

【SpringBoot篇】基于布隆过滤器,缓存空值,解决缓存穿透问题 (商铺查询时可用)

文章目录 &#x1f354;什么是缓存穿透&#x1f384;解决办法⭐缓存空值处理&#x1f388;优点&#x1f388;缺点&#x1f38d;代码实现 ⭐布隆过滤器&#x1f38d;代码实现 &#x1f354;什么是缓存穿透 缓存穿透是指在使用缓存机制时&#xff0c;大量的请求无法从缓存中获取…

4.qml 3D-Light、DirectionalLight、PointLight、SpotLight、AxisHelper类深入学习

今天我们学习灯光类 首先来学习Light类&#xff0c;它是所有灯光的虚基类&#xff0c;该类是无法创建的&#xff0c;主要是为子类提供很多公共属性。 常用属性如下所示&#xff1a; ambientColor : color&#xff0c;该属性定义在被该光照亮之前应用于材质的环境颜色。默认值…

23种策略模式之策略模式

23种策略模式之策略模式 文章目录 23种策略模式之策略模式前言优缺点使用场景角色定义UML模拟示例小结 前言 在软件开发中&#xff0c;设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式&#xff08;Strategy Pattern&#xff09;是其中一种常见的设计模式&a…

STM32 寄存器配置笔记——I2C 读写AT24C02 EEPROM

一、简介 本文主要介绍STM32F10xx系列如何使用软件模拟I2C总线读写AT24C02的EEPROM数据。 二、概述 I2C协议是一种用于同步、半双工、串行总线(由单片机时钟线、单数据交换器数据线组成)上的协议。规定了总线空闲状态、起始条件、停止条件、数据有效性、字节格式、响应确认信号…

OpenSergo Dubbo 微服务治理最佳实践

*作者&#xff1a;何家欢&#xff0c;阿里云 MSE 研发工程师 Why 微服务治理&#xff1f; 现代的微服务架构里&#xff0c;我们通过将系统分解成一系列的服务并通过远程过程调用联接在一起&#xff0c;在带来一些优势的同时也为我们带来了一些挑战。 如上图所示&#xff0c;可…

<VR串流线方案> PICO 4 Pro VR串流线方案 Oculus Quest2 Link串流线方案

虚拟现实技术(英文名称&#xff1a;Virtual Reality&#xff0c;缩写为VR)&#xff0c;又称虚拟实境或灵境技术&#xff0c;是20世纪发展起来的一项全新的实用技术。虚拟现实技术囊括计算机、电子信息、仿真技术&#xff0c;其基本实现方式是以计算机技术为主&#xff0c;利用并…

xcode 修改 target 中设备朝向崩溃

修改xcode的target中的设备朝向导致崩溃。 从日志上看好像没有什么特别的信息。 之后想了想&#xff0c;感觉这个应该还是跟xcode的配置有关系&#xff0c;不过改动的地方好像也只有plist。 就又翻腾了半天plist中的各种配置项&#xff0c;再把所有的用户权限提示相关的东西之…

工业应用新典范,飞凌嵌入式FET-D9360-C核心板发布!

来源&#xff1a;飞凌嵌入式官网 当前新一轮科技革命和产业变革突飞猛进&#xff0c;工业领域对高性能、高可靠性、高稳定性的计算需求也在日益增长。为了更好地满足这一需求&#xff0c;飞凌嵌入式与芯驰科技&#xff08;SemiDrive&#xff09;强强联合&#xff0c;基于芯驰D9…

CentOS 7 部署frp穿透内网

本文将介绍如何在CentOS 7.9上部署frp&#xff0c;并通过示例展示如何配置和测试内网穿透。 文章目录 &#xff08;1&#xff09;引言&#xff08;2&#xff09;准备工作&#xff08;4&#xff09;frps服务器端配置&#xff08;5&#xff09;frpc客户端配置&#xff08;6&#…

正点原子驱动开发BUG(一)--SPI无法正常通信

目录 一、问题描述二、讲该问题的解决方案三、imx6ull的spi适配器驱动程序控制片选分析3.1 设备icm20608的驱动程序分析3.2 imx的spi适配器的驱动程序分析 四、BUG修复测试五、其他问题 一、问题描述 使用正点的im6ull开发板进行spi通信驱动开发实验的时候&#xff0c;主机无法…

Hadoop和Spark的区别

Hadoop 表达能力有限。磁盘IO开销大&#xff0c;延迟度高。任务和任务之间的衔接涉及IO开销。前一个任务完成之前其他任务无法完成&#xff0c;难以胜任复杂、多阶段的计算任务。 Spark Spark模型是对Mapreduce模型的改进&#xff0c;可以说没有HDFS、Mapreduce就没有Spark。…

Windows使用VNC Viewer远程桌面Ubuntu【内网穿透】

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

Unity中URP下的半透明效果实现

文章目录 前言一、实现半透明的步骤1、修改Blend模式&#xff0c;使之透明2、打开深度写入&#xff0c;防止透明对象穿模3、在Tags中&#xff0c;修改渲染类型和渲染队列为半透明 Transparent 二、对透明效果实现从下到上的透明渐变1、 我们在 Varying 中&#xff0c;定义一个v…

LeedCode刷题---二分查找类问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、二分查找 题目链接&#xff1a;二分查找 题目描述 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一…

垃圾回收 (GC) 在 .NET Core 中是如何工作的?

提起GC大家肯定不陌生&#xff0c;但是让大家是说一下GC是怎么运行的&#xff0c;可能大多数人都不太清楚&#xff0c;这也很正常&#xff0c;因为GC这东西在.NET基本不用开发者关注&#xff0c;它是依靠程序自动判断来释放托管堆的&#xff0c;我们基本不需要主动调用Collect(…

安装finallshell并连接linux

下载 官网地址&#xff1a;finallshell下载地址 安装 一直下一步即可安装成功&#xff0c;然后进入软件&#xff0c;如下就是第一次进入的界面了 然后我们想要链接linux需要知道linux的ip地址&#xff0c;我们去linux下查看ip地址 ifconfig #查看ip命令运行命令之后&#xf…

【sqli靶场】第六关和第七关通关思路

目录 前言 一、sqli靶场第六关 1.1 判断注入类型 1.2 观察报错 1.3 使用extractvalue函数报错 1.4 爆出数据库中的表名 二、sqli靶场第七关 1.1 判断注入类型 1.2 判断数据表中的字段数 1.3 提示 1.4 构造poc爆库名 1.5 构造poc爆表名 1.6 构造poc爆字段名 1.7 构造poc获取账…

Note3---初阶二叉树~~

目录​​​​​​​ 前言&#x1f344; 1.树概念及结构☎️ 1.1 树的概念&#x1f384; 1.2 树的相关概念&#x1f99c; 1.2.1 部分概念的加深理解&#x1f43e; 1.2.2 树与非树&#x1fab4; 1.3 树的表示&#x1f38b; 1.4 树在实际中的运用&#xff08;表示文件系统…

slurm 23.11.0集群 debian 11.5 安装

slurm 23.11.0集群 debian 11.5 安装 用途 Slurm(Simple Linux Utility for Resource Management&#xff0c; http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理&a…