RHEL8_Linux使用podman管理容器

本章主要介绍使用 podman 管理容器

  • 了解什么是容器,容器和镜像的关系
  • 安装和配置podman
  • 拉取和删除镜像
  • 给镜像打标签
  • 导出和导入镜像
  • 创建和删除镜像

       1.了解容器及和镜像的关系

         对于初学者来说,不太容易理解什么是容器,这里举一个例子。想象一下,我们把系统安在一个U盘中,此系统中安装好了MySQL。 然后我们把这个U盘插人一台正在运行的物理机上,这物理机上并没有安装MySQL,如图所示。
        然后把U盘中的mysqld进程“曳”到物理机上运行。但是这个mysqld进程只能适应U盘中的统,不一定能适应物理机上的系统。所以,我们找一个类似气球的东西把 mysqld进程在物理机中包保护起来,这个mysqld进程依然适应U盘中的生态环境(系统),却可以从物理机上吸收CPU和内存作为维持mysqld进程运行的“养分”。
那么,这个类似气球的东西就是容器,U盘就是镜像。
        在Linux中安装软件包时经常会遇到各种包依赖,或者有人不会在 Linux系统(如UbuntuCentOS)中安装软件包。这样以后我们就不需要安装和配置MySQL了,直接把这个“U盘插到电脑上,然后运行一个容器出来,这样就有MySQL这个服务了。
`
        所谓镜像,就是安装了系统的硬盘文件,这个系统中安装了想要运行的程序,如 MySQL.Nginx,并规定好使用这个镜像所生成的容器里面运行什么进程。这里假设有一个安装了MySQL的镜像,如图所示。
        在服务器上有一个MySQL 的镜像(已经安装好了MySQL),然后使用这个镜像生成一个容器这个容器中只运行一个mysqld进程,容器中的mysqld进程直接从物理机上吸收CPU和内存以维持它的正常运行。
        以后需要什么应用,就直接拉取什么镜像下来,然后使用这个镜像生成容器。例如,需要对外提供 MySQL服务,那么就拉取一个MySQL镜像,然后生成一个MySQL容器。如果需要对外提供Web服务,那么就拉取一个Nginx镜像,然后生成一个Nginx容器。

2.安装及配置podman

1)前面已经配置了yum源,所以这里直接使用yum install podman -y命令安装,命令如下。
[root@node01 ~]# yum -y install podman
2)查看现在系统中有多少镜像,命令如下。
[root@node01 ~]# podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
[root@node01 ~]# 
没有任何输出,说明现在还没有镜像。
3)查看系统中有多少容器,命令如下。
[root@node01 ~]# podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@node01 ~]# 
没有任何输出,说明当前没有容器。
        如果要拉取镜像,一般是从国外网站的镜像仓库中拉取,速度会很慢。默认podman从以下仓库中拉取镜 像:registry.access.redhat.com、registry.redhat.io、docker.io。下面配置加速器,提从docker.io中拉取镜像的速度。
        登录阿里云控制台,找到容器镜像服务,单击镜像工具→镜像加速器,找到自己的加速器地址,这里使用的是 https://frz7i079.mirror.aliyuncs.com.
4)修改 podman 的配置文件/etc/containers/registries.conf,修改内容如下。
[root@node01 ~]# vim /etc/containers/registries.conf
unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"][[registry]]
prefix = "docker.io"
location = "6kivj4sd.mirror.aliyuncs.com"
        这里的意思是从 docker.io中拉取镜像时使用加速器6kivj4sd.mirror.aliyuncs.com,注意这里需要加https,配置好之后不需要重启什么服务。
5)下面开始拉取docker.io/nginx镜像,命令如下。
[root@node01 ~]# podman pull docker.io/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob a0bcbecc962e done  
Copying blob b4df32aa5a72 done  
Copying blob 186b1aaa4aa6 done  
Copying blob a2abf6c4d29d done  
Copying blob 589b7251471a done  
Copying blob a9edb18cadd1 done  
Copying config 605c77e624 done  
Writing manifest to image destination
Storing signatures
605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
[root@node01 ~]# 
6)网易仓库地址是https://c.163yun.com/hub#/home,在浏览器中打开此界面需要登录,然后搜索需要的镜像即可。下面从网易仓库中拉取 CentOS镜像,命令如下。
[root@node01 ~]# podman pull hub.c.163.com/library/conetos
Trying to pull hub.c.163.com/library/conetos:latest...
Error: initializing source docker://hub.c.163.com/library/conetos:latest: reading manifest latest in hub.c.163.com/library/conetos: manifest unknown: manifest unknown
[root@node01 ~]# 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 2409c3878ba1 done  
Copying blob a3ed95caeb02 done  
Writing manifest to image destination
Storing signatures
328edcd84f1bbf868bc88e4ae37afe421ef19be71890f59b4b2d8ba48414b84d
[root@node01 ~]# 

3.镜像管理

前面讲了要想创建容器必须有镜像,本节主要讲解镜像的管理。

1.镜像的命名
一般情况下,镜像的命名格式如下。
服务器IP:端口 /分类 /镜像名 :tag
如果不指定端口则默认为80,如果不指定 tag则默认为latest。
        例如,192.168.182.200:5000/cka/centos:v2。
        再如,hub.c.163.com/library/mysql:latest。
        分类也是可以不写的,如docker.io/nginx:latest。
        在把镜像上传(push)到仓库时,镜像必须按这种格式命名,因为仓库地址就是由镜像前面的IP决定的。如果只是在本机使用镜像,命名可以随意。
1)查看当前系统有多少镜像,命令如下。
[root@node01 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      605c77e624dd  23 months ago  146 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@node01 ~]# 
2.对镜像重新做标签

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

podman tag 旧的镜像名 新的镜像名
tag之后,新的镜像名和旧的镜像名是同时存在的。
1)给镜像做新标签,命令如下。
[root@node01 ~]# podman tag docker.io/library/nginx 192.168.182.200/rhce/nginx:v2
[root@node01 ~]# 
        这里是为docker.io/library/nginx重新做个tag,名称为192.168.182.200/rhce/nginx,标签2,这样命名的目的是让大家看到命名的随意性,建议tag 可以设置为版本号、日期等有意义的字符。
2)再次查看镜像,命令如下。
[root@node01 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      605c77e624dd  23 months ago  146 MB
192.168.182.200/rhce/nginx    v2          605c77e624dd  23 months ago  146 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@node01 ~]# 
        可以看到,对某镜像做了标签之后,看似是两个镜像,其实对应的是同一个(这类似于Linu中硬链接的概念,一个文件两个名称而已),镜像ID都是一样的。删除其中一个镜像,是不会删除储在硬盘上的文件的,只有把 IMAGE ID所对应的所有名称全部删除,才会从 硬盘上删除。
3.删除镜像
如果要删除镜像,需要按如下语法来删除
podman rmi 镜像名:tag
例如,下面要把 docker.io/library/nginx:latest 删除。
1)删除镜像,命令如下。
[root@node01 ~]# podman rmi docker.io/library/nginx:latest 
Untagged: docker.io/library/nginx:latest
[root@node01 ~]# 
可以看到,只是简单的一个Untagged操作,并没有任何Deleted操作
2)查看镜像,命令如下。
[root@node01 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
192.168.182.200/rhce/nginx    v2          605c77e624dd  23 months ago  146 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@node01 ~]# 
        可以看到,605c77e624dd对应的本地文件依然是存在的,因为它(ID为605c77e624dd有个名称,现在只是删除了一个名称而已,所以在硬盘上仍然是存在的。
只有删除最后一个名称,本地文件才会被删除。
3)删除镜像,命令如下。
[root@node01 ~]# podman rmi 192.168.182.200/rhce/nginx:v2 
Untagged: 192.168.182.200/rhce/nginx:v2
Deleted: 605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
[root@node01 ~]# 
4.查看镜像的结构
        虽然我们所用的镜像都是从网上下载下来的,但这些镜像在制作过程中都是一点点修改、步步做出来的。如果我们要看某镜像的这些步骤,可以用podman history命令,语法如下。        
podman history 镜像名
1)查看镜像的结构
[root@node01 ~]# 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@node01 ~]# 
最上层的CMD,定义的是当使用这个镜像生成的容器时,运行的进程为/bin/bash。
5.导入和导出镜像
        一些服务器是无法连接到互联网的,所以无法从互联网上下载镜像。在还没有私有仓库的况下,如何把现有的镜像传输到其他机器上呢?这里就需要把本地已经pull下来的镜像导出为一个本文件,这样就可以很容易地传输到其他机器。导出镜像的语法如下。
podman save 镜像名 > file.tar
1)把 docker.io/nginx:latest 导出为nginx.tar
[root@node01 ~]# podman save docker.io/library/nginx > nginx.tar
2)删除 Nginx这个镜像,命令如下。
[root@node01 ~]# podman rmi docker.io/library/nginx
Untagged: docker.io/library/nginx:latest
Deleted: 605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
[root@node01 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED      SIZE
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago  200 MB
[root@node01 ~]# 
3)既然上面已经把镜像导出为一个文件了,那么需要把这个文件导入,语法如下。

podman load -i nginx.tar

4)把nginx.tar导入为镜像,命令如下。
[root@node01 ~]# podman load -i nginx.tar 
Getting image source signatures
Copying blob d874fd2bc83b done  
Copying blob e379e8aedd4d done  
Copying blob 2edcec3590a4 done  
Copying blob f1db227348d0 done  
Copying blob b8d6e692a25e done  
Copying blob 32ce5f6a5106 done  
Copying config 605c77e624 done  
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/nginx:latest
[root@node01 ~]# 
5)查看现有镜像,命令如下。
[root@node01 ~]# podman images
REPOSITORY                    TAG         IMAGE ID      CREATED        SIZE
docker.io/library/nginx       latest      605c77e624dd  23 months ago  146 MB
hub.c.163.com/library/centos  latest      328edcd84f1b  6 years ago    200 MB
[root@node01 ~]# 

4.创建容器

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

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

[root@node01 ~]# podman ps 
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@node01 ~]# 
        这个命令显示的仅仅是正在运行的容器,如果要查看不管是运行还是不运行的容器,需要上-a选项,即 podman ps-a。
1.创建一个简单的容器
1)运行一个最简单的容器,命令如下。
[root@node01 ~]# podman run hub.c.163.com/library/centos
[root@node01 ~]# podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@node01 ~]# podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED         STATUS                     PORTS       NAMES
d9947925c130  hub.c.163.com/library/centos:latest  /bin/bash   26 seconds ago  Exited (0) 27 seconds ago              cool_gould
[root@node01 ~]# 
        可以看到,创建了一个容器,容器ID为455391081738,容器名是随机产生的,名称为kind_elgama,所使用的镜像是 hub.c.163.com/library/centos,容器中运行的进程为/bin/bash(也就是镜像中的CMD指定的)。
        podman ps看不到,podman ps -a能看到,且状态为Exited,说明容器是关闭状态。容器运的一瞬间就关闭了,为什么?
2.容器的生命周期
        把容器理解为人的肉体,里面运行的进程理解为人的灵魂。如果人的灵魂宕机了,肉体也就宕机了,只有灵魂正常运行,肉体才能正常运行,如图。
        同理,只有容器中的进程正常运行,容器才能正常运行,容器中的进程宕机了,容器也就宕机了。因为没有终端的存在,/bin/bash就像执行ls命令一样一下就执行完了,所以容器生命期也就到期了。
        如果把这个bash附着到一个终端上,这个终端一直存在,bash就一直存在,那么是不是容器就能一直存活了呢?
删除容器的语法如下
podman rm 容器ID/容器名
如果删除正在运行的容器,可以使用-f选项。
podman rm  -f  容器ID/容器名
1)删除刚才的容器,命令如下。
[root@node01 ~]# podman rm d9947925c130 
d9947925c130a919f51cfaeea4e9604a021eb8f59c320d65f58a3aae1023878f
[root@node01 ~]# 
重新创建新的容器,加上-i -t选项,可以写作-it或-i-t。
  1. -t:模拟一个终端
  2. -i:可以让用户进行交互,否则用户看到一个提示符之后就卡住不动了
2)创建一个容器,命令如下。
[root@node01 ~]# podman run -it hub.c.163.com/library/centos
[root@87c2c144e62a /]# exit
exit
[root@node01 ~]# 
创建好容器之后就自动进入容器中了,可以通过exit退出容器

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

[root@node01 ~]# podman ps -q
[root@node01 ~]# podman ps -a -q
87c2c144e62a
[root@node01 ~]# 
3)删除此容器,命令如下
[root@node01 ~]# podman rm -f 87c2c144e62a
87c2c144e62a700904621c50ca15bf8eb60694231d8f0fe2cfd4ba337a990c05
[root@node01 ~]# 
如果希望创建好容器之后不自动进入容器中,可以加上-d选项。
4)再次创建一个容器,命令如下。
[root@node01 ~]# podman run -dit hub.c.163.com/library/centos
fe2206350aad5b3e9c67fe4badf952a3744ac59f02963e5436314475b671fddf
[root@node01 ~]# 
因为加了-d选项,所以创建好容器之后并没有自动进入容器中。进入此容器中,命令如下
[root@node01 ~]# podman ps -a -q
fe2206350aad
[root@node01 ~]# podman attach fe2206350aad
[root@fe2206350aad /]# 
可以看到,只要退出来容器就会自动关闭。
[root@node01 ~]# podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED             STATUS                     PORTS       NAMES
fe2206350aad  hub.c.163.com/library/centos:latest  /bin/bash   About a minute ago  Exited (0) 11 seconds ago              bold_mendeleev
[root@node01 ~]# 
5)删除此容器,命令如下。
[root@node01 ~]# podman rm fe2206350aad
fe2206350aad5b3e9c67fe4badf952a3744ac59f02963e5436314475b671fddf
[root@node01 ~]# 
在运行容器时加上--restart=always选项可以解决退出容器自动关闭的问题。
6)创建容器,增加--restart=always选项,命令如下。
[root@node01 ~]# podman run -dit --restart=always hub.c.163.com/library/centos
74d1b159e27c38bc990ad06ce493329211858a2a9319661af17c217eeb9a7776
[root@node01 ~]# 
进入容器并退出,命令如下。
[root@node01 ~]# podman ps -q
74d1b159e27c
[root@node01 ~]# podman attach 74d1b159e27c
[root@74d1b159e27c /]# exit
exit[root@node01 ~]# podman ps
CONTAINER ID  IMAGE                                COMMAND     CREATED             STATUS             PORTS       NAMES
74d1b159e27c  hub.c.163.com/library/centos:latest  /bin/bash   About a minute ago  Up 51 seconds ago              mystifying_chatterjee
[root@node01 ~]# 
可以看到,容器依然是存活的
7)删除此容器,因为容器是运行的,所以需要加上-f选项,命令如下。
[root@node01 ~]# podman ps -q
74d1b159e27c
[root@node01 ~]# podman rm -f 74d1b159e27c
74d1b159e27c38bc990ad06ce493329211858a2a9319661af17c217eeb9a7776
[root@node01 ~]# 
每次删除容器时,都要使用容器ID,这种方式比较麻烦,在创建容器时可以使用--name选项指定容器名。
8)创建容器,使用--name 选项指定容器的名称。
[root@node01 ~]# podman run -dit --restart=always --name=c1 hub.c.163.com/library/centos
479eb802ea13146c4ca20b6fbc28ac59f0ca0ed6f86ab30a1b05eb4c8f2edd68
[root@node01 ~]# podman ps -a
CONTAINER ID  IMAGE                                COMMAND     CREATED         STATUS             PORTS       NAMES
479eb802ea13  hub.c.163.com/library/centos:latest  /bin/bash   18 seconds ago  Up 18 seconds ago              c1
[root@node01 ~]# 
这样容器的名称为c1,以后管理起来比较方便,如切换到容器,然后退出,命令如下。
[root@node01 ~]# podman attach c1 
[root@479eb802ea13 /]# exit
exit[root@node01 ~]# 
9)删除此容器,命令如下。
[root@node01 ~]# podman rm -f c1 
479eb802ea13146c4ca20b6fbc28ac59f0ca0ed6f86ab30a1b05eb4c8f2edd68
[root@node01 ~]# 
3.创建临时容器
如果要临时创建一个测试容器,又怕用完忘记删除它,可以加上--rm选项。
1)创建临时容器,命令如下。
[root@node01 ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos
[root@d031b293f780 /]# exit
exit
[root@node01 ~]# 

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

[root@node01 ~]# podman ps -a -q
[root@node01 ~]# 
可以看到,此容器被自动删除了,注意--rm和--restart=always选项不可以同时使用。
4.指定容器中运行的命令
        创建容器时,容器中运行的是什么进程,都是由镜像中的CMD指定的。如果想自定义容器中运行的进程,可以在创建容器的命令最后指定,如下所示。
[root@node01 ~]# podman run -it --name=c1 --rm hub.c.163.com/library/centos sh
sh-4.2# exit
exit
[root@node01 ~]# 
这里就是以sh的方式运行,而不是以 bash的方式运行。
5.创建容器时使用变量
        在利用一些镜像创建容器时需要传递变量,例如,使用MySQL 的镜像、WordPress的镜像创建容器时都需要通过变量来指定一些必备的信息。需要变量用-e选项来指定,可以多次使用-e选项来指定多个变量。
1)创建一个名称为c1的容器,里面传递两个变量,命令如下。
[root@node01 ~]# podman run -it --name=c1 --rm -e aa=123 -e bb=456 hub.c.163.com/library/centos
[root@3d3922bee9f6 /]# echo $aa
123
[root@3d3922bee9f6 /]# echo $bb
456
[root@3d3922bee9f6 /]# exit
exit
[root@node01 ~]# 
在创建容器时,通过-e选项指定了两个变量aa和 bb,然后进入容器之后可以看到具有这两个变量。
6.把容器的端口映射到物理机上
        外部主机(本机之外的其他主机)是不能和容器进行通信的,如果希望外部主机能访问到容器的内容,就需要使用-p选项将容器的端口映射到物理机上,以后访问物理机对应的端口就可以访问到容器了,如图
语法如下:
  1. -p N:物理机随机生成一个端口映射到容器的端口N上
  2. -p M:N:把容器的端口N映射到物理机指定的端口上
1)创建一个名称为web的容器,把容器的端口80映射到物理机的一个随机端口上
[root@node01 ~]# podman run -d --name=web --restart=always -p 80 docker.io/library/nginx
6c60809ed5e4a1585037f098d008406610e2b6ec4a9890635e285f76be939746
[root@node01 ~]# 
这里把 web容器的端口80映射到物理机的随机端口上,这个端口号可以通过如下命令来查询。
[root@node01 ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                  NAMES
6c60809ed5e4  docker.io/library/nginx:latest  nginx -g daemon o...  29 seconds ago  Up 29 seconds ago  0.0.0.0:39281->80/tcp  web
[root@node01 ~]# 
防火墙放行物理机端口
[root@node01 ~]# firewall-cmd --add-port=39281/tcp
success
[root@node01 ~]# 
可以看到,映射到物理机的33513上了,访问物理机的端口33513即可访问到web容器,结果如图

删除此容器,命令如下。

[root@node01 ~]# podman rm -f web 
6c60809ed5e4a1585037f098d008406610e2b6ec4a9890635e285f76be939746
[root@node01 ~]# 
2)如果想映射到物理机指定的端口上,命令如下。
[root@node01 ~]# podman run -d --name=web --restart=always -p 8080:80 docker.io/library/nginx
38dc3d3248412873d0c568737255f5f60a307ba44d6ecc115b96cbb896db67ae
[root@node01 ~]# 
        这里把web容器的端口80映射到物理机的端口88上(可以自己指定端口,如 80),那么访问物理机的端口88即可访问到web容器的端口 80,结果如图

删除此容器,命令如下。

[root@node01 ~]# podman rm -f web
38dc3d3248412873d0c568737255f5f60a307ba44d6ecc115b96cbb896db67ae
[root@node01 ~]# 

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

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

相关文章

C语言学习----指针和数组

&#x1f308;这篇blog记录一下指针学习~ 主要是关于指针和数组之间的关系&#xff0c;还有指针的使用等~ &#x1f34e;指针变量是一个变量 其本身也有一个地址 也需要存放&#xff0c;就和int char等类型一样的&#xff0c;也需要有一个地址来存放它 &#x1f34c;而指针变量…

matlab面向对象编程入门笔记

文章目录 1. 类和结构2. 定义类3. 属性3.1 private/protected/public属性3.2 constant属性3.3 hidden属性 4. 方法4.1 private/protected/public方法4.2 static方法4.3 外部方法 5. 动态调用6. 继承-超类6.1 handle超类6.2 dynamicprops 和 hgsetget子类 7. 封闭(sealed)类、方…

[论文笔记] chatgpt系列 SparseMOE—GPT4的MOE结构

SparseMOE: 稀疏激活的MOE Swtich MOE,所有token要在K个专家网络中,选择一个专家网络。 显存增加。 Experts Choice:路由MOE:​​​​​​​ 由专家选择token。这样不同的专家都选择到某个token,也可以不选择该token。 由于FFN层的时间复杂度和attention层不同,FFN层的时…

【开源Mongdb驱动】SpringBoot+Mybatis+Mongdb融合使用教程

#【开源Mongdb驱动】SpringBootMybatisMongdb无缝融合使用教程 介绍 本文介绍一款基于JAVA开源的mongodb jdbc驱动为基础的无缝与springbootmybatis融合使用案例 mongodb JDBC 使用案例 https://blog.csdn.net/gongbing798930123/article/details/135002530 《基于开源的JA…

git 切换远程地址分支 推送到指定地址分支 版本回退

切换远程地址 1、切换远程仓库地址&#xff1a; 方式一&#xff1a;修改远程仓库地址 【git remote set-url origin URL】 更换远程仓库地址&#xff0c;URL为新地址。 git remote set-url https://gitee.com/xxss/omj_gateway.git 方式二&#xff1a;先删除远程仓库地址&…

六:爬虫-数据解析之BeautifulSoup4

六&#xff1a;bs4简介 基本概念&#xff1a; 简单来说&#xff0c;Beautiful Soup是python的一个库&#xff0c;最主要的功能是从网页抓取数据官方解释如下&#xff1a; Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。 它是一个工具箱…

在金属/绝缘体/p-GaN栅极高电子迁移率晶体管中同时实现大的栅压摆幅和增强的阈值电压稳定性

标题&#xff1a;Simultaneously Achieving Large Gate Swing and Enhanced Threshold Voltage Stability in Metal/Insulator/p-GaN Gate HEMT (IEDM2023) 摘要 摘要&#xff1a;对于增强型GaN功率晶体管的发展&#xff0c;栅压摆幅和阈值电压稳定性通常是互相排斥的。本文展…

计算机组成原理——校验码

计算机组成原理学习笔记——校验码-CSDN博客 校验码——海明码及码距&#xff0c;码距_海明码的码距是多少-CSDN博客 1 下列关于码距与检错与纠错能力的描述中正确的是 &#xff08;ABC&#xff09; &#xff08;多选&#xff09; A. 码距为1的编码不具备任何检错能力 B. 码…

LVS负载均衡器(nat模式)+nginx(七层反向代理)+tomcat(多实例),实现负载均衡和动静分离

目录 前言 一、配置nfs共享存储 二、配置2个nginx节点服务的网页页面 节点1:192.168.20.10 步骤一&#xff1a;修改网关指向调度器的内网ip地址 步骤二&#xff1a;将nfs共享的目录进行挂载&#xff0c;并修改nginx的配置文件中location的root指向挂载点 步骤三&#xff…

接口优化的常见方案实战经验

一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c;其中发现最多的就是接口耗时过长的问题&#xff0c;就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。 二、接口优化方案总结 1.批处理 批量思想&#xff1a;批量操作数据库…

【漏洞复现】CVE-2023-6848 kodbox远程命令执行

漏洞描述 kodbox 是一个网络文件管理器。它也是一个网页代码编辑器,允许您直接在网页浏览器中开发网站。您可以在基于 Linux、Windows 或 Mac 的平台上在线或本地运行 kodbox。唯一的要求是要有 PHP 5及以上。 kalcaddle kodbox 中发现漏洞,最高版本为 1.48。它已被宣布为关…

【算法与数据结构】455、LeetCode分发饼干

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;因为大饼干可以满足大胃口的孩子也必然可以满足小胃口的孩子&#xff0c;如果要尽可能的满足孩子的胃口…

processon使用及流程图和泳道图的绘画(登录界面流程图,门诊流程图绘制门诊泳道图,住院泳道图,OA会议泳道图),Axure自定义元件

目录 一.processon图形的使用场景介绍 二.流程图绘画 三.泳道图的绘画 1.绘制门诊流程图绘制门诊泳道图 2. 绘制住院泳道图​编辑 3.绘制药库采购入库流程图 4.绘制OA会议泳道图 四.Axure自定义元件 1.Axure载入元件库 一.processon图形的使用场景介绍 二.流程图绘画 示例&…

1846_安全SPI

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/g_embedded: some embedded basic knowledge. 1846_安全SPI SPI是一种常见的通信方式&#xff0c;在汽车电子中比较常用。但是如果涉及到安全相关的设计&#xff0c;可能得考虑更多。而SPI协议本身没有很好的标准化&am…

GO的sql注入盲注脚本

之间学习了go的语法 这里就开始go的爬虫 与其说是爬虫 其实就是网站的访问如何实现 因为之前想通过go写sql注入盲注脚本 发现不是那么简单 这里开始研究一下 首先是请求网站 这里貌似很简单 package mainimport ("fmt""net/http" )func main() {res, …

【C语言】SCU安全项目1-FindKeys

目录 前言 命令行参数 16进制转字符串 extract_message1 process_keys12 extract_message2 main process_keys34 前言 因为这个学期基本都在搞CTF的web方向&#xff0c;C语言不免荒废。所幸还会一点指针相关的知识&#xff0c;故第一个安全项目做的挺顺利的&#xff0c…

verilog基础语法-计数器

概述&#xff1a; 计数器是FPGA开发中最常用的电路&#xff0c;列如通讯中记录时钟个数&#xff0c;跑马灯中时间记录&#xff0c;存储器中地址的控制等等。本节给出向上计数器&#xff0c;上下计数器以及双向计数器案例。 内容 1. 向上计数器 2.向下计数器 3.向上向下计数…

第一个程序(STM32F103点灯)

点亮LED 看原理图确定控制LED的引脚看主芯片手册确定如何设置/控制引脚写程序 LED有很多种&#xff0c;像插脚的&#xff0c;贴片的。 它们长得完全不一样&#xff0c;因此我们在原理图中将它抽象出来。 嵌入式系统中&#xff0c;一个LED的电阻非常低&#xff0c;I U/R&…

GZ015 机器人系统集成应用技术样题5-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题5 选手须知&#xff1a; 本任务书共 24页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

04_Web框架之Django一

Web框架之Django一 学习目标和内容 1、能够描述Django的作用 2、能够使用Django创建应用 3、能够使用GET和POST请求方式进行传参 4、能够使用Django的函数式方法定义视图 5、能够进行Django的配置文件修改 6、能够基本使用Django的路由定义 一、Django相关介绍 1、什么是Djan…