【Docker二】docker网络模式、网络通信、数据管理、资源控制

目录

一、docker网络模式:

1、概述

2、docker网络实现原理:

3、docker的网络模式:

3.1、bridge模式:

3.2、host模式:

3.3、container模式:

3.4、none模式:

3.5、自定义网络模式:

4、docker网络总结:

二、docker的数据管理:

1、数据卷

1.1、容器和宿主机之间进行数据共享:

1.2、容器和容器之间实现数据共享:

三、docker网络通信

1、容器互联:

四、docker网络练习:

五、docker的资源控制:

1、CPU资源控制:

1.1、对容器占用CPU的时间进行限制:

1.2、设置CPU资源占用比(设置多个容器时才有效)

1.3、设置容器绑定指定的CPU

2、限制容器对内存的使用:

3、限制使用swap:

4、磁盘IO配额(了解):

5、清理docker占用的磁盘空间:


一、docker网络模式:

1、概述

docker的网络就是基于桥接模式实现的

桥接模式:用于连接两个不同网络段的设备,共享通信的一种方式

桥接设备:工作在OSI模型的二层,数据链路层,转发数据帧,基于Mac地址转发

类似于交换机,只能转发同一网段,通过泛洪广播来找目标设备mac地址。学习模式

2、docker网络实现原理:

桥接模式是一种网络模式,它在Docker中的工作方式可以分为以下几个步骤:

1、虚拟网络创建:当您启动Docker守护进程时,Docker创建一个虚拟网络桥(通常称为Docker0)是一个虚拟的网络设备,类似于物理网络设备的交换机

2、分配唯一的ip地址每次您运行一个容器时,Docker分配一个唯一的IP地址给该容器

这个IP地址是在桥接模式网络的子网中

3、连接容器到桥接网络:当容器启动时,Docker将容器的虚拟网络接口连接到虚拟网络桥上。其中一个端点位于容器,而另一个端点位于主机上

4、容器之间的通信:如果有多个容器在相同的桥接网络上运行,他们可以通过各自的ip地址直接通信。Docker会自动在桥接网络上设置路由,使得容器可以与外部网络通信,而外部网络看到的是主机的IP地址

5、NAT(网络地址转换):默认情况下,Docker使用NAT技术,将容器的私有IP地址映射到主机上的公共IP地址。这样,容器可以与外部通信,而外部网络看到的是主机的IP地址

问题:docker的网桥是宿主机虚拟出来的,并不是一个真正存在的网络设备,外部网络无法寻址找到。外部网络无法直接访问docker:0这个虚拟网桥分配给容器的IP地址

Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,也就是无法直接访问容器ip访问容器

如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主机(端口映射)

即Docker run创建容器时用-p/-P启用,访问到的时候就通过宿主ip+容器端口来访问容器

给容器做端口映射:

-P:创建容器的时候,在宿主机和容器之间做一个端口映射。后不接数字代表随机分配一个端口给宿主机,容器的端口是不变的

-P32768开始

-P(大写):随机制定

-p 80:80(小写):指定端口

进入容器开启一下服务

实际上,docker是在宿主机和容器之间做了一个iptables的nat地址转换。

docker run -itd --name test1 -P nginx:1.22.0 /bin/bash

-p 80:80

前面80是宿主机的端口,后面是容器的端口80

docker run -itd --name test3 -p 80:80 nginx:1.22.0 /bin/bash

做端口映射时,宿主机的端口一定是未被占用

宿主机直接查看容器产生的日志:

docker run -itd --name test11 -p 456:80 nginx

必须是在run的时候不加/bin/bash

docker logs 容器名/容器id 查看全部日志

docker logs -f 容器名/容器id 尾部查看全部,动态查看

docker logs --tail=10 -f 容器名/容器id 尾部10条,动态查看

/bin/bash就是为了让容器后台有一个运行程序,保证容器不会退出

-d后台守护运行,但是时间一长容器自动退出

加/bin/bash就是容器的标准输出,docker logs日志捕获的是cmd和entrypoint标准输出。/bin/bash和捕获日志会冲突

3、docker的网络模式:

3.1、bridge模式:

在创建docker时不需要指定网络类型,默认就是bridge

docker run -itd --name test1 -p 4300:80 nginx:1.22.0

4300是宿主机的端口

80是nginx容器的端口

访问宿主机的ip+端口就等于访问nginx容器

使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。
可以使用iptables -t nat -vnL 查看。
 

3.2、host模式:

容器将不会虚拟出自己的网卡,也没有自己的IP地址。全部使用宿主机的IP地址和端口

host:容器和宿主机共用一个网络命名空间

创建容器的时候指定网络模式:--network host

docker run -itd --name test1 --network host nginx:latest bin/bash

公用模式:如果是单个容器运行,可以使用host模式。容器的端口和宿主机端口公用一个,但是有多个容器,访问不了

3.3、container模式:

container:容器和容器之间共用一个网路命名空间

要想容器都起来必须后接/bin/bash

docker run -itd --name test1 --network host nginx:1.22.0 /bin/bash

创建一个test2和test1使用同一个ip和端口

docker run -itd --name test2 --network=container:test1 nginx:1.22.0 /bin/bash

容器中怎么启动服务:

cd /usr/bin

nginx 启动

nginx -s stop 停止

容器共用端口,但是不能同时启动。想要启动一个,其他容器必须关闭。

也就是说共用端口,只能使用一个

启动test1的nginx:

停止test1的nginx

nginx -s stop

3.4、none模式:

docker容器有自己的network-space,但是这个容器没有任何网络设置。

这个容器没有网卡,没有ip没有路由,只有lo回环网络。在none模式下,容器不可以联网(在工作中是用于容器功能测试用)

不能联网不能访问

封闭的网络能很好的保证容器的安全性。

docker run -itd --name test3 --network none nginx:1.22.0 /bin/bash

3.5、自定义网络模式:

我们可以给docker创建一个自己定义的网段

docker network ls

NETWORK ID:这个是docker网络唯一网络id

NAME:docker网络的名称

DRIVER:网络的驱动程序

SCOPE:

docker run -itd --name test6 --network bridge --ip 172.17.0.10 nginx:latest /bin/bash

在使用默认docker:0网桥时,创建容器是不能指定IP地址的,只能由docker网桥自动分配

除非用户自定义的网络才可以给容器自定义IP地址

创建自定义网络:

可以先自定义网络,再使用指定IP运行docker

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork

--opt "com.docker.network.bridge.name"="docker1":这里可以不加,但是网卡名称难以识别,系统会给你命名复杂名称

mynetwork:自定义网络的名称

有自定义网段之后,创建容器的时候就可以自定义IP地址了

docker run -itd --name nginx1 --network mynetwork --ip 172.18.0.10 nginx:latest /bin/bash

给容器自定义IP地址为 172.18.0.10

自定义IP地址,一定要先自定义网桥

4、docker网络总结:

docker的网络模式:

  1. bridge桥接模式:也是docker的默认模式,在创建时无需指定
  2. host模式:容器不会有自己的网络设备,但是可以和宿主机共享ip和端口
  3. container模式:容器和容器之间共享ip和端口
  4. none模式:也没有自己的网络设备,也没有网卡、ip。只有一个本地的回环地址。127.0.0.1。不能够联网的。相当于一个飞行模式,只能自己访问自己。一般用于测试容器的功能
  5. 自定义网络模式:创建容器时,默认使用docker0网桥是无法给容器定义IP地址的,自能自动分配,自定义网络在创建容器时,可以给容器指定IP地址

docker如何在创建容器时指定端口映射:
docker没有二次配置的机制,只能在创建的时候指定

-P(大写):随机指定端口

-p(小写):自定义指定端口

-p 32768:80 32768是宿主机的端口,后面80是容器的端口

docker容器外部查看日志

docker run -itd --name test11 -p 456:80 nginx

必须是在run的时候不加/bin/bash

docker logs 容器名/容器id 查看全部日志

docker logs -f 容器名/容器id 尾部查看全部,动态查看

docker logs --tail=10 -f 容器名/容器id 尾部10条,动态查看

/bin/bash就是为了让容器后台有一个运行程序,保证容器不会退出

-d后台守护运行,但是时间一长容器自动退出

加/bin/bash就是容器的标准输出,docker logs日志捕获的是cmd和entrypoint标准输出。/bin/bash和捕获日志会冲突

二、docker的数据管理:

1、数据卷

1.1、容器和宿主机之间进行数据共享:

数据卷:是一个供容器使用的特殊的目录,在容器中,和宿主机的目录进行映射,主机和宿主机之间都可以对目录中的文件进行修改,而且双方是同步生效。对镜像也没有影响。宿主机和容器之间实现数据迁移

MySQL  33066:3306

宿主机的目录和容器中的目录进行挂载(映射关系)

docker run -itd --name test1 -v /opt/test1:/opt/test centos:7 /bin/bash

test1是宿主机目录

test是容器目录

docker run -itd --name test2 -v /opt/test2:/opt/test:ro centos:7 /bin/bash

创建只读模式,容器里面只能读

容器里面的目录的文件只能看

1.2、容器和容器之间实现数据共享:

test1 test2 可以有一个或者多个映射目录,实现数据互传,数据同步

数据卷容器:只提供挂载点,让另一方来收集数据

docker run -itd --name test11 -v /opt/data1 -v /opt/data2 centos:7 /bin/bash

docker run -itd --volumes-from test11 --name test12 centos:7 /bin/bash

test11和test12 实现容器间数据共享

三、docker网络通信

1、容器互联:

实现两个容器之间网络通信

老版本方法:

第一个容器创建:

docker run -itd -P --name test111 centos:7 /bin/bash

第二个容器

docker run -itd -P --name test222 --link test111:test222 centos:7 /bin/bash

在centos容器中下载net-tools工具可以用Linux命令

yum -y install net-tools

要互ping要做映射

新版本都用network指定:

自定义网络实现网段互ping

docker run -itd -P --name test112 --network=mynetwork centos:7 /bin/bash

docker run -itd -P --name test113 --network=mynetwork centos:7 /bin/bash

同一网段中不用做映射就可以实现互ping

新版本建议使用

四、docker网络练习:

1、部署一个MySQL镜像,创建一个MySQL容器,用navicat实现可以直接访问容器的MySQL,MySQL宿主机:33066

MySQL容器:3306

2、创建一个数据卷。在宿主机可以看到容器内MySQL的日志文件

创建运行mysql容器,并建立数据卷:

docker run -itd --name mysql1 -v /opt/demo1:/opt/test -p 33066:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.20

本机MySQL远程登录测试:

navicat:

my.cnf配置文件拖出来修改

docker cp mysql1:/etc/mysql/my.cnf /opt

重启docker容器

docker restart mysql1

五、docker的资源控制:

对容器使用宿主机的资源进行限制

docker使用Linux自导的cgroup进行控制

Control groups,是Linux内核系统提供的一种可以限制,记录,隔离进程组所使用的物理资源的机制。

docker借助这个机制,来实现资源的控制

cgroup本身是提供将进程进行分组化管理的功能和接口的基础结构。分配控制的机制来实现资源控制。

其他的资源依然是隔离的

1、CPU资源控制:

Linux通过CFS(completely fair scheduler 完全公平调度器),通过这个调度器来调度各个进程对CPU的使用。CFS的调度周期为100ms。

我们也可以自定义容器的调度周期。以及在这个周期时间之内,各个容器能够使用CPU的调度时间。

--CPU-period 设置容器调度CPU的周期

--CPU-quota 设置每个周期内,容器可以使用CPU的时间

两者可以配合使用

cd /sys/fs/cgroup/cpu/docker/09103baf76369ad9f6a77576665c49b384b34d01ed1f09f1c6b091abfae27115

cpu.cfs_period_us: 表示 CFS 调度周期的长度,以微秒为单位。

在每个周期内,容器可以使用指定比例的 CPU 时间。默认情况下,cpu.cfs_period_us 的值是 100000(即 100 毫秒)。

cpu.cfs_quota_us: 表示容器在 cpu.cfs_period_us 周期内能够使用的 CPU 时间量,同样以微秒为单位。

它定义了一个相对于周期的配额。如果设置为 -1,表示没有限制。如果设置为正值,表示在周期内的配额。

例如,如果 cpu.cfs_quota_us 设置为 50000,那么容器在一个周期内最多可以使用 50 毫秒的 CPU 时间。

在 Linux 的 CFS 调度器中,cpu.cfs_period_us 参数定义了一个周期,

而这个周期实际上是用来调度任务(包括容器)的基本时间单位。

然而,具体的一次调度的时间是由调度器决定的,并且这个时间在一般情况下是动态变化的。

CFS的周期的有效范围:1ms-1s之间。则--cpu-period  1000-1000000

容器使用CPU的配额时间,必须大于1ms,--cpu-quota的值,必须是>=1000

cpu.cfs_quota_us:调度请求之后,根据配额,内核分配给容器使用CPU的时间

-1

如果配置是-1,那么容器在使用宿主机cpu的时间不做任何限制

cpu.rt_period_us

100000

CFS调度周期的长度,微秒,在每个周期内,容器可以使用指定比例的cpu时间,默认情况下都是100毫秒

CFS调度器,100毫秒就是定义了一个周期,在这个周期之内,调度任务(容器)的基本时间单位。

100毫秒一次调度容器请求cpu的资源。然后内核把cpu的资源分配给容器

查看容器的运行占用宿主机资源的情况

docker stats 容器名/id

查看容器内PID和宿主机的映射关系

docker top 容器名/id

1.1、对容器占用CPU的时间进行限制:

进行CPU压力测试

docker run -itd --name test1 centos:7 /bin/bash

docker exec -it test1 bash

vim /opt/cpu.sh

#!/bin/bash

i=0

while true

do

let i++

done

chmod +x /cpu.sh

./cpu.sh

top #可以看到这个脚本占了很多的cpu资源

设置50%的比例分配CPU使用时间上限

1、可以重新创建一个容器并设置限额

docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash

2、更改cpu.cfs_quota_us配置文件修改CPU使用时间

cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c119125360924bf7dfd6eaa42b/

echo 50000 > cpu.cfs_quota_us

默认是100000微秒,100毫秒对应的就是使用时间100%

改成50000微秒,就是50%

docker exec -it 3ed82355f811 /bin/bash

./cpu.sh

top #可以看到cpu占用率接近50%,cgroups对cpu的控制起了效果

在多核情况下,如果允许容器进程完全占用两个 CPU,

则可以将 cpu-period 设置为 100000( 即 0.1 秒), cpu-quota设置为 200000(0.2 秒)。

docker top test 查看容器内PID和宿主机的映射关系。

UID  是用户名。

PID 是进程在宿主系统上的 PID。

PPID 是进程在容器内部的 PID。

STIME 是进程的启动时间。

TTY 是终端类型和编号。

TIME 是进程的运行时间。

CMD 是进程的命令

1.2、设置CPU资源占用比(设置多个容器时才有效

Docker 通过 --cpu-shares 指定 CPU 份额,默认值为1024,值为1024的倍数。

创建两个容器为 c1 和 c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为1/3和2/3。

--cpu-shares 指定容器占用CPU的份额。默认权重1024,设置的值只能是1024的倍数。

docker run -itd --name c1 --cpu-shares 512 centos:7

docker run -itd --name c2 --cpu-shares 1024 centos:7

--cpu-shares是给每个容器使用cpu设置了相对的权重,权重高的,可以使用CPU的资源更多,但是,如果只有一个容器在运行,即便设置了权重,但是没有其他更高的权重来占用资源,权重低的容器依然不受限

分别进入容器,进行压力测试

yum install -y epel-release

yum install -y stress

#stress 是一个用于模拟系统负载的工具,它可以测试系统在高负载条件下的稳定性。

stress -c 4 #产生四个进程,每个进程都反复不停的计算随机数的平方根

#查看容器运行状态(动态更新)

docker stats

可以看到在 CPU 进行时间片分配的时候,容器 c2 比容器 c1 多一倍的机会获得 CPU 的时间片。

但分配的结果取决于当时主机和其他容器的运行状态, 实际上也无法保证容器 c1 一定能获得 CPU 时间片。

比如容器 c1 的进程一直是空闲的,那么容器 c2 是可以获取比容器 c1 更多的 CPU 时间片的。

极端情况下,例如主机上只运行了一个容器,即使它的 CPU 份额只有 50,它也可以独占整个主机的 CPU 资源。

Cgroups 只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。

因此,无法单纯根据某个容器的 CPU 份额来确定有多少 CPU 资源分配给它,

资源分配结果取决于同时运行的其他容器的 CPU 分配和容器中进程运行情况。

1.3、设置容器绑定指定的CPU

#先分配虚拟机4个CPU核数

docker run -itd --name test7 --cpuset-cpus 1,3 centos:7 /bin/bash

#进入容器,进行压力测试

yum install -y epel-release

yum install stress -y

stress -c 4

#退出容器,执行 top 命令再按 1 查看CPU使用情况。

总结:对CPU的限制:

容器占用CPU的时间

容器占用CPU的权重比(要多个容器,才有效)

容器占用CPU的内核数(绑定指定的CPU内核给容器使用)

2、限制容器对内存的使用:

-m(--memory=) 选项用于限制容器可以使用的最大内存

docker run -itd --name test8 -m 512m centos:7 /bin/bash

docker stats

如果 --memory-swap 设置为 0 或者 不设置,则容器可以使用的 swap 大小为 -m 值的两倍。

如果 --memory-swap 的值和 -m 值相同,则容器不能使用 swap。

如果 --memory-swap 值为 -1,它表示容器程序使用的内存受限,

而可以使用的 swap 空间使用不受限制(宿主机有多少 swap 容器就可以使用多少)。

3、限制使用swap:

--memory-swap

docker run -itd --name test -m 512m --memory-swap=1g centos:7 /bin/bash

限制使用swap,必须和限制内存一起使用

--memory-swap 是必须要与 --memory 一起使用的。

设置swap有如下集中情况:

1、-m 512m --memory-swap=1g 那么容器实际上能够使用的swap空间是1g-512m=512m

2、如果不设置--memory-swap=1g,只有-m 512m,那么使用swap的空间是-m后面值的两倍也就是1024m

3、如果设置的--memory-swap的值和-m内存限制一样,容器不能使用swap空间 512-512=0

4、如果-m 512m --memory-swap=-1 设为-1则内存受限还是512m,但是容器使用swap空间不受限制

4、磁盘IO配额(了解):

限制容器在磁盘上的读速度:

--device-read-bps:

限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。

例:docker run -itd --name test11 --device-read-bps /dev/sda:1M  centos:7 /bin/bash

限制容器在磁盘上的写速度:

--device-write-bps :

限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。

例:docker run -itd --name test12 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

通过dd来验证写速度

dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct

在使用dd获取空字符集是从文件系统的缓存当中输入,速度是比较快的,禁用文件系统缓存,直接把数据写入磁盘,可以更真实的测试设备的行,模拟直接写入物理设备的情况

限制容器读取的次数:

docker run -itd --name test --device-read-iops /dev/sda:100 centos:7 /bin/bash

限制读取操作每秒100次

限制容器写入的次数:

docker run -itd --name test --device-write-iops /dev/sda:50 centos:7 /bin/bash

限制写入的操作,每秒50次

5、清理docker占用的磁盘空间:

docker system prune -a

删除已经停止的容器

删除所有未被使用的网桥设备(docker1)

删除所有未被使用的镜像

删除创建容器时的缓存,以及无用的数据卷

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

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

相关文章

青光眼术后险致盲,辗转多院幸于成都爱尔眼科重获光明

“我在一家医院诊断为青光眼,然后就做了青光眼手术。结果没有成功,后面产生了脉络膜脱离,从4月到10月底一直没有恢复,我去找医生结果那家医院的医生让我等……等着恢复……”张先生是一位青光眼术后患者,一场手术给他带…

TailwindCSS 配置可视化检查器

问题 TailwindCSS 框架为我们提供了大量默认的类和属性,而且开发者也能够自定义类和配置。 对于初学者来说,这些配置其实是比较复杂的,这也是tailwindcss最大的入手成本,开发者的记忆负担和心智负担也都比较大。 有没有办法能够…

谷歌Gemini被骂了?让子弹飞一会儿;如何构建高效RAG系统;Pika是腐朽王朝的颠覆者;AGI将重塑组织架构;对话月之暗面杨植麟 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 淘宝 X D.Design 堆友 | 淘宝年终好价节 AIGC 创作大赛 https://d.design/competition/taobao-promotion 淘宝携手堆友联合打造了「淘…

python用turtle画樱花飘落,python代码画樱花代码

这篇文章主要介绍了python用turtle画樱花飘落,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1、python画樱花树代码为: import turtle as T import random import…

基于ssm保险业务管理系统设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本保险业务管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

银行数字化转型导师坚鹏:兴业生活APP运营之道

基于招商银行案例研究的兴业生活APP运营之道培训圆满结束 ——线上引流平台流量经营与变现 兴业银行股份有限公司(简称“兴业银行”)成立于1988年8月,2022年总资产9.27万亿元,是经国务院、中国人民银行批准成立的首批股份制商业银…

在Ascend昇腾硬件用npu加速paddleLite版本ocr(nnadapter)

在Ascend昇腾硬件用npu加速paddleLite版本ocr(nnadapter) 参考文档* nnadapter参考文档地址* 华为昇腾 NPU参考文档地址* PaddleLite的CAPI参考文档 一.确保cpu版本运行正常二.编译Ascend上npu加速库三.跑通npu加速版本Demo1.Demo下载地址2.参考手册网址…

Jupyter Notebook工具

Jupyter Notebook 是一个交互式的笔记本环境,允许用户以网页形式编写和分享代码、文本、图像以及其它多媒体内容。它支持超过 40 种编程语言,最常用的是 Python。 以下是 Jupyter Notebook 工具的一些特点和用法: 1. 特点: 交互式…

vscode eide arm-gcc 编译环境搭建调试

安装cube,vscode 1.安装vscode插件 C/C Extension Pack Chinese (Simplified) (简体中文) Language Pack Cortex-Debug Embedded IDE 工具链设置 2.软件工程生成 调试 3.生成工程,导入工程 4. 配置工程 编译完毕

【PTA刷题】 求子串(代码+详解)

【PTA刷题】 求子串(代码详解) 题目 请编写函数,求子串。 函数原型 char* StrMid(char *dst, const char *src, int idx, int len);说明:函数取源串 src 下标 idx 处开始的 len 个字符,保存到目的串 dst 中,函数值为 dst。若 len…

【W5500】关于使用外部网络变压器的原理图设计

直接上原理图 链接也放一个吧【链接】 按照这个画,我实验在立创EDA上打了一个实验过是可以用的~ 画出来的板子长这个样子【就不公开原理图和PCB了,这个板子还是很容易画的】~ 注意在立创上找对网口,要无变压器的网口,相比TB卖的那…

基于Springboot+Vue前后端分离的电影推荐系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

前端路由(front-end routing)和后端路由(back-end routing)的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

渗透测试学习day8

文章目录 靶机:UnifiedTask1Task2Task3Task4 5-14解题过程Task5Task6Task7Task8Task9Task10Task11Task12Submit user flagSubmit root flag 靶机:Unified Task1 问题:前四个开放端口是哪一个? 22,6789,8080,8443nmap扫一下 T…

打包HTML

结合之前的webpack打包 ,对HTML进行相对应的打包 1.在浏览器打开npm搜索 html—webpack—插件 2.下划找到lnstall复制webpack5里的第一句到终端 3.下滑找到用法配置脚本语言 3.1 复制下图代码到之前的webpack.config.js脚本里放在开头的位置 3.2 复制下图代码到之…

pandas 使用方法(1)

目录 1. excel 表格处理 (1) 读取excel 表格 (2) 抽取excel表部分列数据 (3) 保存数据到excel表格 (4) 保存到 excel 表中的不同sheet 2. 判断二维数组中的某个数值是否为空 3. 删除二维数组中的空行 4. 在列表中添加某列属性 本文是将使用pandas过程中遇到的问题进行了…

【Web】SCU新生赛个人wp及完赛感想

目录 一些碎碎念: Web Guideline 2048 ezupload hardupload ezphp ezweb ezsql webbuilder tarit tarit_revenge VipDinner simplespi 一些碎碎念: scu新生赛是我全心全力打的第二场比赛,历时七天,期间不免煎熬&…

孜然地址引导页V9(带后台)

刚刚在浏览之前经常访问的网站的时候我发现他不用那个域名了,然后我见这个页面好看,就把他干下来了,然后把给他写了个后台。另外如果你的子页面收录多的话,人家百度访问你的子页面会显示404的,所以为了流量可观安装这个…

【算法题】字符串变换最小字符串 * (js)

思路: 将字符按字典排序得到minStr,对比原str 如果 minStr str 则本身就是最小字符串 否则从前往后遍历str,让str[i]和minStr[i]对比,如果不同则替换 str[i]为minStr[i],并且这个minStr[i]这个字符要从str中寻找, 如果…

抓取真实浏览器设备指纹fingerprint写入cookie方案

一个关于抓取真实浏览器设备指纹写入cookie方案,用户访问页面获取到用户设备生成指纹id,通过js把指纹存入cookie,然后用php进行获取cookie存的指纹值到后台。 用途:追踪用户设备,防恶意注册,防恶意采集 浏…