网站制作最/网络营销的特点有
本章主要介绍使用podman管理容器
- 了解什么是容器,容器和镜像的关系
- 安装和配置podman
- 拉取和删除镜像
- 给镜像打标签
- 导出和导入镜像
- 创建和删除镜像
- 数据卷的使用
- 管理容器的命令
- 使用普通用户管理容器
对于初学者来说,不太容易理解什么是容器,这里举一个例子。想象一下,我们把系统安装在一个U盘中,此系统中安装好了MySQL。 然后我们把这个U盘插人一台正在运行的物理机上,这个物理机上并没有安装MySQL
然后把U盘中的mysqld进程“曳”到物理机上运行。但是这个mysqld进程只能适应U盘中的系统,不一定能适应物理机上的系统。所以,我们找一个类似气球的东西把 mysqld进程在物理机中包裹保护起来,这个mysqld进程依然适应U盘中的生态环境(系统),却可以从物理机上吸收CPU和内存作为维持mysqld进程运行的“养分”
那么,这个类似气球的东西就是容器,U盘就是镜像
在Linux中安装软件包时经常会遇到各种包依赖,或者有人不会在 Linux系统(如Ubuntu、CentOS)中安装软件包。这样以后我们就不需要安装和配置MySQL了,直接把这个“U盘”插到电脑上,然后运行一个容器出来,这样就有MySQL这个服务了
所谓镜像,就是安装了系统的硬盘文件,这个系统中安装了想要运行的程序,如MySQL.Nginx,并规定好使用这个镜像所生成的容器 里面运行什么进程。这里假设有一个安装了MySQL的镜像
在服务器上有一个MySQL 的镜像(已经安装好了MySQL),然后使用这个镜像生成一个容器。这个容器中只运行一个mysqld进程,容器 中的mysqld进程直接从物理机上吸收CPU和内存以维持它的正常运行
以后需要什么应用,就直接拉取什么镜像下来,然后使用这个镜像生成容器。例如,需要对外提供MySQL服务,那么就拉取一个MySQL镜像,然后生成一个MySQL容器。如果需要对外提供 Web服 务,那么就拉取一个Nginx镜像,然后生成一个Nginx容器
一个镜像是可以生成很多个容器的
1.1 安装及配置podman
前面已经配置了yum源,所以这里直接使用yum install podman -y命令安装
[root@redhat8 ~]# yum -y install podman
正在更新 Subscription Management 软件仓库。
无法读取客户身份本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。上次元数据过期检查:20:01:41 前,执行于 2023年12月12日 星期二 15时01分01秒。
软件包 podman-3.3.1-9.module+el8.5.0+12697+018f24d7.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
[root@redhat8 ~]#
查看现在系统中有多少镜像
[root@redhat8 ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@redhat8 ~]#
没有任何输出,说明现在还没有镜像
查看系统中有多少容器
[root@redhat8 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@redhat8 ~]#
没有任何输出,说明当前没有容器
如果要拉取镜像,一般是从国外网站的镜像仓库中拉取,速度会很慢。默认podman从以下仓库中拉取镜 像:registry.access.redhat.com、registry.redhat.io、docker.io。下面配置加速器,提高从docker.io中拉取镜像的速度
登录阿里云控制台,找到容器镜像服务,单击镜像工具→镜像加速器,找到自己的加速器地址,这里使用的是https://h2fpeiio.mirror.aliyuncs.com(可以自己去注册一个)
修改 podman 的配置文件/etc/containers/registries.conf
[root@redhat8 ~]# tail -10 /etc/containers/registries.conf
short-name-mode = "permissive"unqualified?search?registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "h2fpeiio.mirror.aliyuncs.com"
[root@redhat8 ~]#
这里的意思是从 docker.io中拉取镜像时使用加速器h2fpeiio.mirror.aliyuncs.com,注意这里不需要加https,配置好之后不需要重启什么服务
下面开始拉取docker.io/nginx镜像
[root@redhat8 ~]# podman pull docker.io/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 589b7251471a done
Copying blob a0bcbecc962e done
Copying blob a9edb18cadd1 done
Copying blob b4df32aa5a72 done
Copying blob 186b1aaa4aa6 done
Copying blob a2abf6c4d29d done
Copying config 605c77e624 done
Writing manifest to image destination
Storing signatures
605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
[root@redhat8 ~]#
网易仓库地址是https://c.163yun.com/hub#/home,在浏览器中打开此界面需要登录,然后搜索需要的镜像即可。下面从网易仓库中拉取 CentOS镜像
[root@redhat8 ~]# podman pull hub.c.163.com/library/centos
Trying to pull hub.c.163.com/library/centos:latest...
Getting image source signatures
Copying blob 2409c3878ba1 done
Copying blob a3ed95caeb02 done
Copying blob a3ed95caeb02 done
Writing manifest to image destination
Storing signatures
328edcd84f1bbf868bc88e4ae37afe421ef19be71890f59b4b2d8ba48414b84d
[root@redhat8 ~]#
1.2 镜像管理
前面讲了要想创建容器必须有镜像,本节主要讲解镜像的管理
1.2.1 镜像的命名
一般情况下,镜像的命名格式如下
服务器IP: 端口 /分类 /镜像名 :tag
如果不指定端口则默认为80,如果不指定 tag则默认为latest
例如,192.168.161.16 :5000/cka/centos:v2
再如,hub.c.163.com/library/mysql:latest
分类也是可以不写的,如docker.io/nginx:latest
在把镜像上传(push)到仓库时,镜像必须按这种格式命名,因为仓库地址就是由镜像前面的IP决定的。如果只是在本机使用镜像,命名可以随意
查看当前系统有多少镜像
[root@redhat8 ~]# 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@redhat8 ~]#
1.2.2 对镜像重新做标签
如果想给本地已经存在的镜像起一个新的名称,可以用tag来做
podman tag 旧的镜像名 新的镜像名
tag之后,新的镜像名和旧的镜像名是同时存在的
(1)给镜像做新标签
[root@redhat8 ~]# podman tag docker.io/library/nginx 192.168.161.16/nginx
(2)再次查看镜像
[root@redhat8 ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/nginx latest 605c77e624dd 23 months ago 146 MB
192.168.161.16/nginx latest 605c77e624dd 23 months ago 146 MB
hub.c.163.com/library/centos latest 328edcd84f1b 6 years ago 200 MB
[root@redhat8 ~]#
可以看到,对某镜像做了标签之后,看似是两个镜像,其实对应的是同一个(这类似于Linux中硬链接的概念,一个文件两个名称而 已),镜像ID都是一样的。删除其中一个镜像,是不会删除存储在硬盘上的文件的,只有把 IMAGEID所对应的所有名称全部删除,才会从硬盘上删除
1.2.3 删除镜像
如果想要删除镜像,需要按如下语法来删除
podman rmi 镜像名:tag
例如,下面要把 192.168.161.16/nginx删除
(1)删除镜像
[root@redhat8 ~]# podman rmi 192.168.161.16/nginx
Untagged: 192.168.161.16/nginx:latest
[root@redhat8 ~]#
(2)查看镜像
[root@redhat8 ~]# 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@redhat8 ~]#
可以看到,605c77e624dd对应的本地文件依然是存在的,因为它(ID为605c77e624dd)有两个名称,现在只是删除了一个名称而已,所以在硬盘上仍然是存在的
只有删除最后一个名称,本地文件才会被删除
1.2.4 查看镜像的层次
虽然我们所用的镜像都是从网上下载下来的,但这些镜像在制作过程中都是一点点修改、一步步做出来的。如果我们要看某镜像的这些步骤,可以用podman history命令
podman history镜像名
查看镜像的结构
[root@redhat8 ~]# 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@redhat8 ~]#
最上层的CMD,定义的是当使用这个镜像生成的容器时,运行的进程为/bin/bash
1.2.5 导入和导出镜像
一些服务器是无法连接到互联网的,所以无法从互联网上下载镜像。在还没有私有仓库的情况下,如何把现有的镜像传输到其他机器上呢?这里就需要把本地已经pull下来的镜像导出为一个本地文件,这样就可以很容易地传输到其他机器。导出镜像的语法如下
podman save 镜像名 > file.tar
(1)把docker.io/library/nginx导出为nginx.tar
[root@redhat8 ~]# podman save docker.io/library/nginx > nginx.tar
[root@redhat8 ~]#
删除nginx这个镜像
[root@redhat8 ~]# podman rmi docker.io/library/nginx
Untagged: docker.io/library/nginx:latest
Deleted: 605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
[root@redhat8 ~]#
既然上面已经把镜像导出为一个文件了,那么需要把这个文件导入
(2)把nginx.tar导入为镜像
[root@redhat8 ~]# podman load -i nginx.tar
Getting image source signatures
Copying blob d874fd2bc83b done
Copying blob 2edcec3590a4 done
Copying blob e379e8aedd4d done
Copying blob b8d6e692a25e done
Copying blob f1db227348d0 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@redhat8 ~]#
查看现有镜像
[root@redhat8 ~]# 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@redhat8 ~]#
1.3 创建容器
容器就是镜像在宿主机上运行的一个实例,大家可以把容器理解为一个气球,气球中运行了一个进程,这个进程透过气球吸收物理机的内存和CPU资源
查看当前有多少正在运行的容器
[root@redhat8 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@redhat8 ~]#
这个命令显示的仅仅是在运行的容器,如果要查看不管是运行还是不运行的容器,需要加上-a的选项,即podman ps -a
1.3.1 创建一个简单的容器
运行一个最简单的容器
[root@redhat8 ~]# podman run hub.c.163.com/library/centos
[root@redhat8 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@redhat8 ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03e471e869a9 hub.c.163.com/library/centos:latest /bin/bash 18 seconds ago Exited (0) 18 seconds ago thirsty_liskov
[root@redhat8 ~]#
以看到,创建了一个容器,容器ID为03e471e869a9,容器名是随机产生的,名称为thirsty_liskov,所使用的镜像是 hub.c.163.com/library/centos,容器中运行的进程为/bin/bash(也就是镜像中的CMD指定的)
podman ps看不到,podman ps -a能看到,且状态为Exited,说明容器是关闭状态。容器运行的一瞬间就关闭了,为什么?
1.3.2 容器的生命周期
把容器理解为人的肉体,里面运行的进程理解为人的灵魂。如果人的灵魂宕机了,肉体也就宕机了,只有灵魂正常运行,肉体才能正常运行,如图
同理,只有容器中的进程正常运行,容器才能正常运行,容器中的进程宕机了,容器也就宕机了。因为没有终端的存在,/bin/bash就像执行ls命令一样一下就执行完了,所以容器生命期也就到期了
如果把这个bash附着到一个终端上,这个终端一直存在,bash就一直存在,那么是不是容器就能一直存活了呢?
删除容器的语法
podman rm 容器ID/容器名
如果删除正在运行的容器,可以使用-f选项
podman rm ‐f 容器ID/容器名
(1)删除刚才的容器
[root@redhat8 ~]# podman rm 03e471e869a9
03e471e869a94f3cbc676c17b898e29fed15b3bb0e9f3ff27e5e750d25da8bba
[root@redhat8 ~]#
重新创建新的容器,加上-i -t选项,可以写作-it或-i-t
-i:模拟一个终端
-t:可以让用户进行交互,否则用户看到一个提示符之后就卡住不动了
(2)创建一个容器
[root@redhat8 ~]# podman run -it hub.c.163.com/library/centos
[root@8aae0a68f2c8 /]# exit
exit
[root@redhat8 ~]#
创建好容器后就自动进入容器中了,可以通过exit退出容器
[root@redhat8 ~]# podman ps -q
[root@redhat8 ~]# podman ps -q -a
8aae0a68f2c8
[root@redhat8 ~]#
但是一旦退出容器,容器就不再运行了
(3)删除此容器
[root@redhat8 ~]# podman rm -f 8aae0a68f2c8
8aae0a68f2c890f9890d0acaa596f8b49cd14c6fb4616d665b5dca39ac4c7330
[root@redhat8 ~]#
如果希望创建好容器后不自动进入容器,可以加上-d选项
(4)再次创建一个容器
[root@redhat8 ~]# podman run -dit hub.c.163.com/library/centos
219e05a9ceaecd26fe745851b889b3b1b6f81baf12e1146ff5cfa08ffcbeb297
[root@redhat8 ~]#
因为加了-d选项,所有创建好的容器并没有自动进入,如何进入容器中呢?如下
可以看到,只要退出来容器就会自动关闭
(5)删除此容器
[root@redhat8 ~]# podman rm 219e05a9ceae
219e05a9ceaecd26fe745851b889b3b1b6f81baf12e1146ff5cfa08ffcbeb297
[root@redhat8 ~]#
在运行容器时加上--restart=always选项可以解决退出容器自动关闭的问题
(6)创建容器,增加--restart=always选项
[root@redhat8 ~]# podman run -dit --restart=always hub.c.163.com/library/centos
562826ba24f6bec423484529a13590c18add2a73795e95e5cef5d4be009f5897
[root@redhat8 ~]#
进入容器并退出
可以看到,容器依然是存活的
(7)删除此容器,因为容器是运行的所以需要加上-f选项
[root@redhat8 ~]# podman rm -f 562826ba24f6
562826ba24f6bec423484529a13590c18add2a73795e95e5cef5d4be009f5897
[root@redhat8 ~]#
每次删除容器时,都要使用容器ID,这种方式比较麻烦,在创建容器时可以使用--name选项指定容器名
(8)创建容器,使用--name选项指定容器的名称
[root@redhat8 ~]# podman run -dit --restart=always --name=a1 hub.c.163.com/library/centos
43dad615ff54121489744ca159e72a6757dd95c0c47eb74b296e4d4c45a00d09
[root@redhat8 ~]#
这样容器的名称就变成了a1,以后管理起来方便,如切换到容器,然后退出
[root@redhat8 ~]# podman attach a1
[root@43dad615ff54 /]# exit
exit[root@redhat8 ~]#
(9)删除此容器
[root@redhat8 ~]# podman rm -f a1
43dad615ff54121489744ca159e72a6757dd95c0c47eb74b296e4d4c45a00d09
[root@redhat8 ~]#
1.3.3 创建临时容器
如果要临时创建一个测试容器,又怕用完忘记删除它,可以加上--rm选项
创建临时容器
[root@redhat8 ~]# podman run -it --rm --name=a1 hub.c.163.com/library/centos
[root@1f52642996b9 /]# exit
exit
[root@redhat8 ~]#
创建容器时加了 --rm选项,退出容器之后容器会被自动删除
[root@redhat8 ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@redhat8 ~]#
可以看到,此容器被自动删除了,注意--rm和--restart=always选项不可以同时使用
1.3.4 指定容器中运行的命令
创建容器时,容器中运行的是什么进程,都是由镜像中的CMD指定的。如果想自定义容器中运行的进程,可以在创建容器的命令最后指定
[root@redhat8 ~]# podman run -it --rm --name=a1 hub.c.163.com/library/centos sh
sh-4.2# exit
exit
[root@redhat8 ~]#
这里就是以sh的方式运行,而不是以 bash的方式运行
1.3.5 创建容器时使用变量
在利用一些镜像创建容器时需要传递变量,例如,使用MySQL 的镜像、WordPress的镜像创建容器时都需要通过变量来指定一些必备的信息。需要变量用-e选项来指定,可以多次使用-e选项来指定多个变量
创建一个名称为a1的容器,里面传递两个变量
[root@redhat8 ~]# podman run -it --rm --name=a1 -e aa=123 -e bb=456 hub.c.163.com/library/centos
[root@0b8b48dc901c /]# echo $aa
123
[root@0b8b48dc901c /]# echo $bb
456
[root@0b8b48dc901c /]# exit
exit
[root@redhat8 ~]#
在创建容器时,通过-e选项指定了两个变量aa和 bb,然后进入容器之后可以看到具有这两个变量
1.3.6 把容器的端口映射到物理机上
外部主机(本机之外的其他主机)是不能和容器进行通信的,如果希望外部主机能访问到容器的内容,就需要使用-p选项将容器的端口映射到物理机上,以后访问物理机对应的端口就可以访问到容器了,如图
语法如下:
-p N:物理机随机生成一个端口映射到容器的端口N上
-p M N:把容器的端口N映射到物理机指定的端口M上
(1)创建一个名称为web的容器,把容器的端口80映射到物理机的一个随机端口上
[root@redhat8 ~]# podman run -d --name=web --restart=always -p 80 docker.io/library/nginx
e89dce5a84566d1bddc1c954bb86661a3c9bf846555ed449f444ea1cb1da48e4
[root@redhat8 ~]#
这里把 web容器的端口80映射到物理机的随机端口上,这个端口号可以通过如下命令来查询
[root@redhat8 ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e89dce5a8456 docker.io/library/nginx:latest nginx -g daemon o... 8 seconds ago Up 8 seconds ago 0.0.0.0:41855->80/tcp web
[root@redhat8 ~]#
可以看到,映射到物理机的41855上了,访问物理机的端口33513即可访问到web容器
删除此容器
[root@redhat8 ~]# podman rm -f web
e89dce5a84566d1bddc1c954bb86661a3c9bf846555ed449f444ea1cb1da48e4
[root@redhat8 ~]#
(2)如果想映射到物理机指定的端口上,命令如下
[root@redhat8 ~]# podman run -d --name=web --restart=always -p 1234:80 docker.io/library/nginx
713b12b5eab7dc2f09f4aeea2171cd142f0ad0616eab6ef499a1f512fd1a2161
[root@redhat8 ~]#
这里把web容器的端口80映射到物理机的端口1234上(可以自己指定端口,如 80),那么访问物理机的端口1234即可访问到web容器的端口 80,结果如图
删除此容器
[root@redhat8 ~]# podman rm -f web
713b12b5eab7dc2f09f4aeea2171cd142f0ad0616eab6ef499a1f512fd1a2161
[root@redhat8 ~]#
1.4 实战练习——创建MySQL的容器
创建MySQL容器时不要使用从阿里云或Docker 官方仓库中下载的镜像,请拉取镜像hub.c.163.com/library/mysql。
在使用MySQL镜像时至少需要指定一个变量 MYSQL_ROOT_PASSWORD来指定root密码,其他变量如MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE都是可选的
可以看到,使用MySQL镜像创建出来的容器中运行的是mysqld
(1)创建容器
[root@redhat8 ~]# podman run -d --name=db --restart=always -e MYSQL_ROOT_PASSWORD=123.123 -e MYSQL_DATABASE=blog hub.c.163.com/library/mysql
126c3e3b69c3f4e00b25c5468b8bfeeb2e93d96a8c527ceee794efae2aefe540
[root@redhat8 ~]#
这里使用MYSQL_ROOT_PASSWORD指定了MySQL root密码为123.123,通过MYSQLDATABASE在容器中创建了一个名称为blog的数据库
(2)做连接测试
查看db容器的IP
[root@redhat8 ~]# podman inspect db | grep -i ipaddr"IPAddress": "10.88.0.19","IPAddress": "10.88.0.19",
[root@redhat8 ~]#
在宿主机上用 yum命令安装MariaDB客户端(命令是yum -y install mariadb),然后连接容器
[root@redhat8 ~]# mysql -u root -p 123.123 -h 10.88.0.19
Enter password:
ERROR 1049 (42000): Unknown database '123.123'
[root@redhat8 ~]# mysql -uroot -p123.123 -h10.88.0.19
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.18 MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| blog |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.006 sec)MySQL [(none)]>
可以看到,用密码123.123能正确地连接到容器中,并且也创建了一个名称为blog的库
1.5 管理容器的命令
容器如同一台没有显示器的电脑,如何查看容器中的内容呢,又如何在容器中执行命令呢?可以使用 podman exec命令来实现,如图
1.5.1 在容器中执行指定的命令
语法如下
podman exec 容器名 命令
(1)在db容器中执行 ip a | grep 'inet’ 命令
[root@redhat8 ~]# podman exec db ip a | grep 'inet'inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host inet 10.88.0.19/16 brd 10.88.255.255 scope global eth0inet6 fe80::54f6:e9ff:fe96:8900/64 scope link
[root@redhat8 ~]#
如果容器中没有要执行的命令,就会出现如下报错
如果想获取shell控制台,需要加上-it选项
(2)获取容器中的bash控制台
[root@redhat8 ~]# podman exec -it db bash
root@126c3e3b69c3:/# exit
exit
[root@redhat8 ~]#
注意:有的镜像中不存在bash,可以使用sh替代
1.5.2 关闭、启动、重启容器
一般情况下,在操作系统中重启某个服务,可以通过“systemctl restart服务名”来重启,容器中一般是无法使用systemctl命令的。如果要重启容器中的程序,直接重启容器就可以了。下面演示如何关闭、启动、重启容器
(1)关闭、启动、重启服务
[root@redhat8 ~]# podman stop db
db
[root@redhat8 ~]# podman start db
db
[root@redhat8 ~]# podman restart db
126c3e3b69c3f4e00b25c5468b8bfeeb2e93d96a8c527ceee794efae2aefe540
[root@redhat8 ~]#
(2)查看容器中运行的进程
语法为“podman top 容器名”,这个类似于任务管理器,可以查看到容器中正在运行的进程,命令如下
[root@redhat8 ~]# podman top db
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
mysql 1 0 0.000 46.428877786s ? 0s mysqld
[root@redhat8 ~]#
相关文章:

Linux中使用podman管理容器
本章主要介绍使用podman管理容器 了解什么是容器,容器和镜像的关系安装和配置podman拉取和删除镜像给镜像打标签导出和导入镜像创建和删除镜像数据卷的使用管理容器的命令使用普通用户管理容器 对于初学者来说,不太容易理解什么是容器,这里…...

飞天使-linux操作的一些技巧与知识点3-http的工作原理
文章目录 http工作原理nginx的正向代理和反向代理的区别一个小技巧dig 命令巧用 http工作原理 http1.0 协议 使用的是短连接,建立一次tcp连接,发起一次http的请求,结束,tcp断开 http1.1 协议使用的是长连接,建立一次tc…...

微搭低代码实现登录注册功能
目录 1 创建用户数据源2 实现登录逻辑3 搭建登录页面4 设置登录框5 实现登录的逻辑6 用户注册总结 原来产品在创建应用的时候可以创建模型应用,模型应用对应我们小程序的后端。最新的更新已经将模型应用的能力下线,那我们不得不自己实现一下后端的逻辑。…...

使用Cobalt Srike制作钓鱼文件
钓鱼 钓鱼文件是一种常见的网络攻击手段,旨在欺骗用户,诱使他们点击恶意链接、下载恶意附件或提供敏感信息。钓鱼文件的概念是通过伪装成合法、可信的文件或链接来欺骗受害者,使其相信文件或链接的来源是可信的,从而促使他们采取…...

任意文件读取漏洞
使用方法php://filter/readconvert.base64-encode/resourcexxx 任意文件读取漏洞 php://filter/readconvert.base64-encode/resourceflag 在url后边接上 以base64的编码形式 读取flag里面的内容 php://filter/readconvert.base64encode/resourceflag 用kali来解码 创建一个文…...

一个文件下png,jpg,jpeg,bmp,xml,json,txt文件名称排序命名
#utf-8 #authors 会飞的渔WZH #time:2023-12-13 import os# 要修改的图像所在的文件夹路径 root_path rD:\images\lines2\3 # 要修改的图像所在的文件夹路径filelist os.listdir(root_path) #遍历文件夹 print(len(filelist)) i0for item in filelist:if item.endswith(.…...

phpstudy小皮(PHP集成环境)下载及使用
下载 https://www.xp.cn/download.html直接官网下载即可,下载完解压是个.exe程序,直接点击安装就可以,它会自动在D盘目录为D:\phpstudy_pro 使用 phpMyAdmin是集成的数据库可视化,这里需要下载一下,在软件管理-》网站程…...

[BUG记录]UART占用CPUload过高问题
目录 关键词平台说明一、背景二、根本原因三、措施 关键词 嵌入式、C语言、autosar、TDA4 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (GCC) 一、背景 在基于TDA4开发的域控中使用到了UART打印debug信息,不…...

Flutter常用命令
一、环境安装 flutter --version 查看当前安装的flutter 版本 flutter upgrade 升级当前的flutter 版本 flutter doctor 检查环境安装是否完成 二、项目编译运行 flutter clean 清空build目录 flutter pub get 获取pub插件包 flutter run --设备名称 运行项目到指定设…...

【C++】POCO学习总结(十四):引用计数、共享指针、缓冲区管理
【C】郭老二博文之:C目录 1、Poco::AutoPtr 智能指针 1.1 说明 Poco::AutoPtr是一个含有引用计数的“智能”指针模版。 Poco::AutoPtr用于支持引用计数的类实例化。支持引用计数的类需要有以下要求: 维护一个引用计数(在创建时初始化为1)实现void du…...

Python之禅
import this 这是 Python 社区中著名的 "The Zen of Python"(Python之禅)文档,由 Python 创始人之一的 Tim Peters 撰写。这个文档包含了一系列关于编程和代码设计哲学的原则,以指导 Python 社区的开发者。以下是这些原…...

RocketMQ源码 Broker-SubscriptionGroupManager 订阅组管理组件源码分析
前言 SubscriptionGroupManager 继承了ConfigManager配置管理组件,拥有将内存数据持久化到磁盘文件subscriptionGroup.json的能力。它主要负责维护所有消费组在内存中的订阅数据。 源码版本:4.9.3 源码架构图 核心数据结构 主要的数据结构比较简单&am…...

go-zero开发入门-API网关鉴权开发示例
本文是go-zero开发入门-API网关开发示例一文的延伸,继续之前请先阅读此文。 在项目根目录下创建子目录 middleware,在此目录下创建文件 auth.go,内容如下: // 鉴权中间件 package middlewareimport ("context""e…...

[LLM]nanoGPT---训练一个写唐诗的GPT
karpathy/nanoGPT: The simplest, fastest repository for training/finetuning medium-sized GPTs. (github.com) 原有模型使用的莎士比亚的戏剧数据集, 如果需要一个写唐诗机器人,需要使用唐诗的文本数据, 一个不错的唐诗,宋词数据的下载…...

docker compose部署wordpress
准备机器: 192.168.58.151 (关闭防火墙和selinux) 安装好docker服务 (详细参照:http://t.csdnimg.cn/usG0s 中的国内源安装docker) 部署wordpress: 创建目录: [rootdocker ~]# mkdir…...

【docker四】使用Docker-compose一键部署Wordpress平台
目录 一、YAML 文件格式及编写注意事项(重要) 1、yaml文件使用时注意事项: 2、yaml文件的基本数据结构: 2.1、声明变量(标量。是单个的不可再分的值,类型:字符串,整数,…...

HTML程序大全(1):简易计算器
HTML代码,主要创建了几个按钮。 <div class"container"><div class"output" id"output">0</div><button class"button" onclick"clearOutput()" id"clear">C</button>…...

esp32服务器与android客户端的tcp通讯
esp32 //esp32作为服务端 #include <WiFi.h>#define LED_BUILTIN 2 // 创建热点 const char *ssid "ESP32"; const char *password "12345678"; const int port 1122; //端口 WiFiServer server(port); void setup() {delay(5000);pinMode(LED_…...

自定义Mybatis LanguageDriver性能优化
场景:高并发情况下mybatis 动态sql 解析 锁问题优化 优化前 并发测试 XMLLanguageDriver 类 的 createSqlSource 方法有锁 而且 每次执行时都会走该方法 优化前 : 线程有Block 优化后的 LanguageDriver public class CustomXMLLanguageDriver im…...

DevEco Studio 鸿蒙(HarmonyOS)项目结构
DevEco Studio 鸿蒙(HarmonyOS)项目结构 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、项目结构 创建简单的Hello World移动应用项目结构如下图 由上到下说明各个文件夹的作用 .hvigor:存…...

Springboot整合篇Druid
一、概述 1.1简介 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。 它本身还自带一个监控平台,可以查看时时产生的sql、uri等监控数据,可以排查慢sql、慢请求࿰…...

uniapp 微信小程序 封装axios 包含请求拦截、响应拦截、无感刷新令牌功能
前言: 1、为什么不适用uniapp自带的请求功能? 答:uniapp自带的请求功能,再刷新了令牌后,重新请求返回的数据无法返回给发起请求的方法。也就是说,刷新令牌后重新发起的请求和第一次发起请求的方法是割裂的。…...

C语言精选——选择题Day41
第一题 1. 有以下程序段: char *p, *q; p (char *)malloc(sizeof(char) * 20); q p; scanf("%s %s", p, q); printf("%s %s\n", p, q); 若从键盘输入:abc def↙,则输出结果是( ) A:d…...

Tomcat头上有个叉叉
问题原因: 这是因为它就是个空的tomcat,并没有导入项目运行 解决方案: war模式:发布模式,正式发布时用,将WEB工程以war包的形式上传到服务器 war exploded模式:开发时用,将WEB工程的文件夹直接…...

Linux shell编程学习笔记35:seq
0 前言 在使用 for 循环语句时,我们经常使用到序列。比如: for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i * 2 $(expr $i \* 2)"; done 其中的 1 2 3 4 5 6 7 8 9 10;就是一个整数序列 。 为了方便我们使用数字序列,Linux提供了…...

Nougat:结合光学神经网络,引领学术PDF文档的智能解析、挖掘学术论文PDF的价值
Nougat:结合光学神经网络,引领学术PDF文档的智能解析、挖掘学术论文PDF的价值 这是Nougat的官方存储库,Nougat是一种学术文档PDF解析器,可以理解LaTeX数学和表格。 Project page: https://facebookresearch.github.io/nougat/ …...

涉密网络的IP查询防护策略
涉密网络的安全性对于维护国家、企业及个人的核心利益至关重要。在当今数字化时代,网络攻击日益猖獗,其中IP查询是攻击者获取目标信息的一种常见手段。本文将探讨涉密网络中防护IP查询的关键策略,以确保网络的机密性和安全性。 1. 专用VPN和…...

基础算法(1):排序(1):选择排序
今天对算法产生了兴趣,开始学习基础算法,比如排序,模拟,贪心,递推等内容,算法是很重要的,它是解决某个问题的特定方法,程序数据结构算法,所以对算法的学习是至关重要的&a…...

GeoTrust OV证书
当谈到网站安全性和可信度时,GeoTrust OV证书是一个备受推崇的选择。作为一家备受尊敬的数字证书颁发机构,GeoTrust以其卓越的品牌声誉和高质量的产品而闻名于世。GeoTrust OV证书提供了一系列的安全功能,同时还具有出色的性价比,…...

第一个“hello Android”程序
1、首先安装Android studio(跳过) Android Studio是由Google推出的官方集成开发环境(IDE),专门用于Android应用程序的开发。它是基于JetBrains的IntelliJ IDEA IDE构建的,提供了丰富的功能和工具࿰…...