使用podman管理容器

news2024/11/28 18:45:44

目录

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.coloradmin.cn/o/1318493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入解析HashMap数据结构及其应用

目录 引言 1. HashMap简介 2. 哈希表的基本原理 3. HashMap的内部结构 4. 哈希冲突的处理 5. HashMap的常见操作 6. HashMap的性能优化 7. 实际应用场景 结论 引言 在计算机科学中&#xff0c;数据结构是构建和组织数据的一种方式&#xff0c;而HashMap是其中一种常用…

TCP单人聊天

TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式&#xff0c;也有着优点和缺点 它的优点对比于UDP来说就是可靠一点 因为它的通讯方式是需…

ripro后台登录后转圈和图标不显示的原因及解决方法

最近&#xff0c;好多小伙伴使用ripro主题的小伙伴们都发现&#xff0c;登录后台后&#xff0c;进入主题设置就转圈&#xff0c;等待老半天后好不容易显示页面了&#xff0c;却发现图标不显示了&#xff0c;都统一显示为方框。 这是因为后台的js、css这类静态资源托管用的是js…

02-分组查询group by和having的使用

分组查询 MySQL中默认是对整张表的数据进行操作即整张表为一组, 如果想对每一组的数据进行操作,这个时候我们需要使用分组查询 分组函数的执行顺序: 先根据where条件筛选数据,然后对查询到的数据进行分组,最后也可以采用having关键字过滤取得正确的数据 group by子句 在一条…

FME之FeatureReader转换器按表格内容读取矢量数据

问题&#xff1a;平时会遇到只用某个大数据里某小部分数据参与下一步数据处理&#xff0c;此时我们会用到FeatureReader转换器&#xff0c;一般是通过空间关系&#xff08;相交、包含&#xff09;来读取相应涉及的图斑矢量&#xff0c;但就有一个问题&#xff0c;加入你的启动器…

JS中浅拷贝和深拷贝

本篇文章咱们一起来学习下JS中的浅拷贝和深拷贝&#xff0c;了解它们在内存上的区别&#xff0c;并掌握浅拷贝和深拷贝的常用实现方法。 引用赋值 在学习拷贝之前&#xff0c;咱们先来看一个常见的情景&#xff0c;如下图&#xff1a; 大家觉得这是深拷贝还是浅拷贝&#xff0…

ensp创建配置环境,实现全网互访

文章目录 创建配置环境&#xff0c;实现全网互访配置步骤接入层交换机&#xff08;sw4、sw5&#xff09;划分vlan汇聚层交换机&#xff08;sw2、sw3&#xff09;配置ip地址作为vlan网关、与sw1 ip地址直连核心层交换机&#xff08;sw1&#xff09;配置ip地址与汇聚层交换机&…

计算机网络:数据链路层(VLAN)

今天又学到一个知识&#xff0c;加油&#xff01; 目录 一、传统局域网的局限&#xff08;促进VLAN的诞生&#xff09; 二、VLAN简介 三、VLAN的实现 总结 一、传统局域网的局限&#xff08;促进VLAN的诞生&#xff09; 缺乏流量隔离:即使把组流量局域化道一个单一交换机中…

Java小案例-RocketMQ的11种消息类型,你知道几种?(请求应答消息)

前言 Rocket的请求应答消息是指在使用Rocket&#xff08;这里可能是RocketMQ或者Rocket框架&#xff09;进行通信时&#xff0c;客户端发送一个请求到服务端&#xff0c;然后服务端处理该请求并返回一个响应的过程中的数据交换。 在RocketMQ中&#xff1a; 请求应答消息通常…

MySQL性能测试(完整版)

MySQL性能测试之SysBench 一、SysBench安装 1、mac安装命令&#xff1a;&#xff08;其他系统安装对应的命令即可&#xff0c;不影响后面的使用&#xff09; brew install sysbench2、查看是否安装成功&#xff1b; sysbench --version附&#xff1a; &#xff08;1&#x…

The Grid – Responsive WordPress Grid响应式网格插件

点击阅读The Grid – Responsive WordPress Grid响应式网格插件原文 The Grid – Responsive WordPress Grid响应式网格插件是一个高级 wordpress 网格插件&#xff0c;它允许您在完全可定制且响应迅速的网格系统中展示任何自定义帖子类型。 Grid WordPress 非常适合展示您的博…

runCatching异常捕获onSuccess/onFailure返回函数,Kotlin

runCatching异常捕获onSuccess/onFailure返回函数&#xff0c;Kotlin fun test(a: Int, b: Int) {runCatching {a / b}.onSuccess {println("onSuccess: $it")return ok(it)}.onFailure {println("onFailure: $it")return fail(it)} }fun ok(o: Any) {prin…

QT第一步

文章目录 软件下载软件安装QT的程序组新建项目 软件下载 qt下载网址&#xff1a;https://download.qt.io/archive/qt/   关于版本&#xff1a;     我选择的版本是5.14.2&#xff0c;这个版本是最后的二进制安装包的版本&#xff0c;在往后的版本就需要在线安装了。并且5…

常用网安渗透工具及命令(扫目录、解密爆破、漏洞信息搜索)

目录 dirsearch&#xff1a; dirmap&#xff1a; 输入目标 文件读取 ciphey&#xff08;很强的一个自动解密工具&#xff09;&#xff1a; john(破解密码)&#xff1a; whatweb指纹识别&#xff1a; searchsploit&#xff1a; 例1&#xff1a; 例2&#xff1a; 例3&…

QT5 CMake进行开发

配置环境 因为是使用CMake进行开发&#xff0c;所以推荐使用的QT版本是 5.14.2。因为楼主有 vs2015的环境&#xff0c;所以在安装QT时选择的是 msvc 2015 64bit msvc 2017 32bit 勾选了所有需要的模块。kit配置如下 图中画框的地方是比较关键的地方&#xff0c;1. 指定编译器…

3. cgal 示例 GIS (Geographic Information System)

GIS (Geographic Information System) 地理信息系统 原文地址: https://doc.cgal.org/latest/Manual/tuto_gis.html GIS 应用中使用的许多传感器&#xff08;例如激光雷达&#xff09;都会生成密集的点云。此类应用程序通常利用更先进的数据结构&#xff1a;例如&#xff0c;不…

【STM32】STM32学习笔记-对射式红外传感器计次 旋转编码器计次(12)

00. 目录 文章目录 00. 目录01. NVIC相关函数1.1 NVIC_PriorityGroupConfig函数1.2 NVIC_PriorityGroup类型1.3 NVIC_Init函数1.4 NVIC_InitTypeDef类型 02. 外部中断相关API2.1 GPIO_EXTILineConfig2.2 EXTI_Init2.3 EXTI_GetITStatus2.4 EXTI_ClearITPendingBit2.5 中断回调函…

一篇文章了解Flutter Json系列化和反序列化

目录 一. 使用dart:convert实现JSON格式编解码1. 生成数据模型类2. 将JSON数据转化成数据模型类3. 数据模型类转化成JSON字符串 二、借助json_serializable实现Json编解码1.添加json_annotation、build_runner、json_serializable依赖2. 创建一个数据模型类3. 使用命令行生成JS…

【XR806开发板试用】+ 通过网络控制led并上报按键状态

通过网络控制led并上报按键状态 本次做一个手机通过mqtt服务器控制板子上的LED亮灭&#xff0c;板子也可以将按钮状态变化通过mqtt服务器上报给手机的功能 硬件上&#xff0c;从原理图看&#xff0c;LED接到了PA21&#xff0c;高电平点亮。 按键则时接到了PA11&#xff0c;并…

kali虚拟机无网络

1.查看虚拟机的网卡模式 在虚拟机设置里&#xff0c;一般选择桥接模式&#xff0c;也可以选择NAT模式。 2、你的IP地址是否写死了&#xff08;设置为静态IP&#xff09; vim编辑模式下的命令&#xff1a; 按a或i进入编辑模式&#xff0c;然后按esc键退出编辑模式&#xff0c;s…