云时代【6】—— 镜像 与 容器

云时代【6】—— 镜像 与 容器

  • 四、Docker
    • (三)镜像 与 容器
      • 1. 镜像
        • (1)定义
        • (2)相关指令
        • (3)实战演习
          • 镜像容器基本操作
          • 离线迁移镜像
          • 镜像的压缩与共享
      • 2. 容器
        • (1)定义
        • (2)容器的生命周期
        • (3)基本指令
          • 与容器交互
          • 容器的资源使用
          • 容器与宿主机
          • 容器与镜像
        • (4)实战演习
          • A. 实际操作案例
          • B. MySQL 与 Redis的容器化安装
          • C. Java 程序的容器制作
          • D. 容器资源更新

四、Docker

(三)镜像 与 容器

1. 镜像

(1)定义

镜像 的作用可以看成:纳戒 + 模板。 镜像”模板“很好理解它指的是:镜像可以被快速复制(拉取);而镜像”纳戒“的本质是: **Union FS** 联合文件系统
它可以将几层目录挂载到一起,形成一个虚拟文件系统。每一层文件系统我们叫做一层 layer。联合文件系统可以对每一层文件系统
设置三种权限:只读
**(readonly)**、读写**(readwrite)**和写出**(whiteout-able)**,但是** ****docker**镜像中每一层文件系统都是只读的。 构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。

理解了镜像”纳戒“的本质是联合文件系统之后,我们就能很好的理解镜像的优缺点了。

  • 优点:

    • 屏蔽了环境的差异
    • 分层的存储:可以充分利用共享层(减少存储空间的占用)
    • 快速分发(只添加缺失的层)
  • 缺点:

    • 镜像添加的依赖占用机器的空间
    • 寻找文件只能一层一层找,会带来一定的性能损失

(2)相关指令
docker rmi [镜像]:[版本]
docker rmi 'IMAGE ID'

# --no-prune 不移除该镜像的过程镜像

image.png

docker run -it --name mybusybox busybox:1.35.0 sh
docker rmi busybox:1.35.0 # error
docker rmi -f busybox:1.35.0 # 但是强制删除也没必要,可以先删除容器,再删除镜像

image.png
image.png


docker save -o xxx.tar [镜像]:[版本]

# 下图大小没有发生变化主要原因是:打了同一个镜像!(IMAGE ID相同)

image.png

docker load -i xxx.tar

image.png

docker load -i xxx.tar -q 
# -q 是安静模式(不显示进度条)

image.png


docker history [镜像]:[版本号]

# --no-trunc 不做截断(显示全部信息)

image.png


# 该层镜像不被任何一层镜像使用
docker image prune

# -a 删除全部不被容器使用的镜像

(3)实战演习

镜像容器基本操作
docker search busybox
docker pull busybox:1.36.0
docker images busybox

# 查看镜像的下载位置
cd /data/var/lib/docker # 在 /etc/docker/daemon.json
cd overlay2
cat repositories.json

# 查看镜像的详细信息
docker image inspect busybox:1.36.0
# 查看镜像的分层
docker history busybox:1.36.0

# 给镜像打标签
docker tag busybox:1.36.0 lllzxx/fortest:v1.36.0
docker push lllzxx/fortest:v1.36.0 -a

# 查看登录站点
cat /root/.docker/config.json

# 拉取镜像
docker pull lllzxx/fortest:v1.36.0

# 运行容器
docker run -it -d --name mybusybox -h myweb -e myenv=test lllzxx:v1.36.0 sh
ifconfig
exit

# 查看所有容器
docker ps -a

# 删除镜像
docker rmi lllzxx/fortest:v1.36.0
docker rm 'IAMGE ID' # 删除容器

image.png
image.png

离线迁移镜像
# A服务器
docker pull lllzxx/fortest:v1.36.0
cd /data/lllzxx
docker images
docker save -o mybusybox.tar lllzxx/fortest:v1.36.0

# B服务器
docker version # 检查是否安装Docker,没有则安装
mkdir -p /data/lllzxx
cd /data/lllzxx
ll

# A服务器
scp mybusybox.tar root@IP:/data/lllzxx # 需要输入密码

# B服务器
ll
docker load -i mybusybox.tar
docker images
docker run -it lllzxx/fortest:v1.36.0 sh
ifconfig
ping www.baidu.com
exit

镜像的压缩与共享
docker images nginx
docker pull [镜像]:[版本号] 
# 查看远端和本地的大小是否一样?
# 不一样。远端:①节省存储空间 ②减少网络带宽
# 如果远端的镜像是相同的,只是不同别名的话并不会真正上传,只会标示出不同镜像

2. 容器

(1)定义

容器是镜像的运行实体。镜像是静态的只读文件,而是容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。容器本质上是主机运行的一个进程,但是该进程被进行了各种各样的限制,无法看到主机的进程、环境变量、网络等信息。
注:不同角度理解会对容器做出不同定义,其他角度见”云时代【1】“。

(2)容器的生命周期

image.png

(3)基本指令
docker create --name mywebs1 -p 8080:80 nginx:1.23.4 # 创建容器(拧钥匙)
docker ps -a | grep mywebs1
docker start mywebs1 # 启动容器(踩油门)
docker ps -a | grep mywebs1

image.png

docker container inspect mywebs2

docker container inspect -s mywebs2 # -s 显示总的文件大小

image.png

docker stop mywebs2 # 停止-踩刹车
# 使用 stop 超时也会杀死容器

docker start mywebs2 # 开启-踩油门

image.png

docker ps -a | grep mywebs2

docker logs -f -n 5 mywebs2

docker restart mywebs2

docker restart -s 9 mywebs2

image.png
image.png

docker kill mywebs2

docker wait mywebs3

image.png

docker run -d --name mywebs3 nginx:1.23.4
docker ps -a
docker stop mywebs3
docker container prune
docker ps -a

image.png

docker rm -f [容器名] # -f 强制删除运行中的容器

# 重新 docker run 的话,名称和端口相同也不会冲突

image.png

docker logs mywebs2

# -f 跟踪日志输出
# -since="2099-01-01"
# -n x 多少条数据

image.png
image.png
image.png


与容器交互
docker attach mywebs2

# 使用 ctrl + c 之后会直接退出容器(熄火)

docker attach --sig-proxy=false mywebs2
# --sig-proxy 使用 ctrl + c 之后不会退出容器

image.png
image.png

docker exec -it mywebs2 bash

image.png

docker exec -it -d mywebs2 nginx -V # 在后台运行容器

docker exec -it -e mynginx=lllzxx mywebs2 bash # 设置容器的环境变量

docker exec -it mywebs2 cat /etc/passwd
docker exec -it -u nginx mywebs2 nginx -v # 指定用户

docker exec -it -w /etc mywebs2 bash # 指定工作目录

image.png
image.png
image.png
image.png


容器的资源使用
docker top mywebs2 

docker top mywebs2 aux # aux 能够查看资源使用情况

image.png

docker pause mywebs3
docker unpause mywebs3

image.png

docker stats -a --no-stream --no-trunc mywebs2

# -a 所有容器(停止的也打印)
# --format 打印模式,默认是表格,可以使用json
# --no-stream 不实时更新
# --no-trunc 不截断输出

image.png

docker stats --format json

image.png

docker rename [旧名字] [新名字]

image.png

free -m
docker stats mywebs2
docker update --memory 500m --memory-swap 500m mywebs2
docker stats mywebs2

# 一般来说都是会在创建容器的时候就规划好的

image.png


容器与宿主机
docker port mywebs2 

docker port mywebs2 80/tcp # 使用tcp协议的

image.png

docker cp mywebs2:/usr/share/nginx/html/index.html .
# .表示当前目录,即当前工作目录。
# ..表示父目录,即当前目录的上一级目录。

docker cp ./index.html mywebs2:/usr/share/nginx/html/index.html/

image.png
image.png

mkdir -p /data/lllzxx/textexport # -p 是递归地创建目录
cd /data/lllzxx/textexport
ls -l
docker export -o myweb3.tar mywebs3
docker import -m '将文件转回为镜像' mywebs3.tar mywebs3:v1.0 # 与 save 和 load 相比会丢失信息

image.png

# A服务器
docker pull lllzxx/fortest:v1.36.0
cd /data/lllzxx
docker images
docker save -o mybusybox.tar lllzxx/fortest:v1.36.0

# B服务器
docker version # 检查是否安装Docker,没有则安装
mkdir -p /data/lllzxx
cd /data/lllzxx
ll

# A服务器
scp mybusybox.tar root@IP:/data/lllzxx # 需要输入密码

# B服务器
ll
docker load -i mybusybox.tar
docker images
docker run -it lllzxx/fortest:v1.36.0 sh
ifconfig
ping www.baidu.com
exit
docker exec -it mywebs2 bash
echo "Hello World!" > /test.html
ls -l

docker diff mywebs2

image.png


容器与镜像
docker images
docker run -d --name mywebsforcommit nginx:1.23.4
docker ps | grep mywebsforcommit
docker images mywebsforcommit
docker commit mywebsforcommit mywebsforcommit:v1.0 # docker commit [容器] [镜像名]:[版本号]
docker images mywebsforcommit

image.png

docker exec -it mywebsforcommit bash
echo "Hello World!" > /testforcommit.txt
ls -l
exit
docker diff mywebsforcommit
docker commit mywebsforcommit mywebsforcommit:v2.0
docker run -it --rm mywebsforcommit:v2.0 bash
ls -l
cat testforcommit.txt
exit

image.png
image.png

docker commit -a 'lzxx' -m 'create by lzxx' -p mywebsforcommit mywebsforcommit:v3.0

# -a 指定创建者
# -m 描述信息
# -p 创建镜像时停止

image.png

docker commit -a 'lzxx' -m 'create by lzxx' -c 'CMD ["tail","-f","/etc/hosts"]' -p mywebsforcommit mywebsforcommit:v4.0
docker images mywebsforcommit
docker run -d --rm --name mywebsforcommit2 mywebsforcommit:v4.0
docker ps --no-trunc | grep mywebsforcommit

image.png


(4)实战演习

A. 实际操作案例
docker images nginx
docker run -d --name mynginx01 -p 8101:80 nginx:1.22.0
docker ps
docker container inspet mynginx01
docker logs -f -n 10 mynginx01
docker rm mynginx01
docker stop mynginx01
docker ps -a | grep mynginx01
docker create --name mynginx02 -p 8102:80 nginx:1.22.0
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02

docker kill mynginx02
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02

docker stop mynginx02
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02

docker ps -a | grep mynginx02
docker restart mynginx02
docker ps -a | grep mynginx02

docker pause mynginx02
docker ps -a | grep mynginx02
docker unpause mynginx02
docker ps -a | grep mynginx02
# 批量过滤
# ps : Process Status,即进程状态。
docker ps -a
docker stop mywebs1 mywebs2
docker ps
docker ps -f name=mywebs1
docker ps -f status=exited
docker ps -f ancestor=nginx:1.23.4
docker ps -q

# 批量操作
docker stop `docker ps -q`
docker ps -a

image.png

# A-1.attached模式--该模式是在前台运行,按 ctrl + c 就会退出容器,会简化开发的过程,但不能用于生产
docker run --name mynginx03 -p 8103:80 nginx:1.22.0 
docker ps | mynginx03

# A-2.detached模式--在后台运行
docker run -d --name myngine04 -p 8104:80 nginx:1.22.0
docker ps | mynginx04
exit # 断开连接
docker ps | mynginx04 # 依旧在运行
docker logs -f mynginx04


# B.attach 会把 attached模式 转为 detached模式
docker attach mynginx04
ctrl + c 
docker ps -a | mynginx04 


# C.interactive模式
# C-1.创建一个可交互的容器
docker run -it --name mynginx05 -p 8105:80 nginx:1.22.0 bash
ls /
cat /etc/*release*
nginx -v
nginx # 正式启动nginx
ctrl + c # 没有影响
exit # shell退出,也意味着:容器退出
# C-2.与后台运行的容器交互
docker run -it -d --name mynginx06 -p 8106:80 nginx:1.22.0
docker exec -it mynginx06 bash
curl 127.0.0.1
exit # shell退出,但容器依然正常运行
# 容器内部没有vim编辑器
docker run -it -d --name mynginx07 -p 8107:80 nginx:1.22.0
docker exec -it mynginx07 bash
cd /usr/share/nginx/html
ls -l
cat index.html
vi index.html # refuse
exit

mkdir -p /data/lllzxx/testcp
cd /data/lllzxx/testcp
ls -l
docker cp mynginx07:/usr/share/nginx/html/index.html .
vi index.html
docker cp ./index.html mynginx07:/usr/share/nginx/html/

docker exec -it mynginx07 bash
cd /usr/share/nginx/html
cat index.html

# 注意:cp 不支持容器与容器之间的拷贝
docker run -it --rm --name mynginx08 -p 8108:80 nginx:1.22.0 bash
nginx -v
exit
docker ps -a | grep mynginx08 # 查找不到

docker run -d --rm --name mynginx08 -p 8108:80 nginx:1.22.0 # 一停止就删除
docker ps | grep mynginx08
docker stop mynginx08
docker ps -a | grep mynginx08 # 同样查找不到
# restart: 
# no-不重启(默认);on-failure:3 指定重启次数;
# always-总是重启;unless-stopped-中途退出也重启
docker run -d --name mynginx09 -p 8109:80 --restart=always nginx:1.22.0
docker exec -it mynginx09 bash
nginx -s quit # 停止nginx服务
docker ps | mynginx09 # 发生重启

docker stop mynginx09 # 无法再次拉起
docker run -it --rm -e MYTEST1=1 -e MYTEST2=2 nginx:1.22.0 bash
env | grep MYTEST
exit

# 通过配置文件 设置环境变量
mkdir -p /data/lllzxx/mytestenv
cd /data/lllzxx/mytestenv
vi myenv.txt
docker run -it --rm --env-file=./myenv.txt nginx:1.22.0 bash
env | grep MYTEST
docker run --rm busybox ifconfig # 查看容器的
docker run --rm --net host busybox ifconfig # 使用宿主机的网络,查看宿主机的
# A服务器
docker run -d --name mynginx10 -p 8110:80 nginx:1.22.0
docker ps
docker exec -it mynginx10
cd /usr/share/nginx/html/
echo "Hello World" > index.html
cat index.html
exit
mkdir -p /data/lllzxx/testtar
cd /data/lllzxx/testtar
docker export -o mynginx10.tar mynginx10
ls -l

# B服务器
mkdir -p /data/lllzxx/testtar
cd /data/lllzxx/testtar

# A服务器
scp mynginx10.tar root@IP:/data/lllzxx/testtar # scp 在跨云的时候会有速度限制

# B服务器
docker import mynginx10.tar mynginx10:v10.0
docker images mynginex10
docker run -d --name mynginx10 -p 8010:80 mynginx10:v10.0 # refuse:CMD丢失。
docker inspect mynginx10:v10.0 # 还有很多其他源数据丢失
docker run -d --name mynginx10 -p 8010:80 nginx -g "daemon off" mynginx10:v10.0 

docker savedocker export 的区别可看下方文章:
docker save与docker export的区别_docker版本不同导致save-CSDN博客

docker run -d --name mynginx11 -p 8011:80 nginx:1.22.0 
docker logs -f mynginx11

# 流的重定向
docker logs mynginx11 > info.log 2>err.log # info.log 是标准信息流;err.log 是标准错误流

# 直接看Docker后台的目录
cd /data/var/lib/docker/containers
ls
docker ps
cd xxxxxxx
ls
cat xxxxx-json.log
docker run -d --name mynginx12 -p 8012:80 nginx:1.22.0 
docker stats mynginx12 # 整个容器总的资源占用
docker top mynginx12 aux # 容器中具体进程占用的资源

B. MySQL 与 Redis的容器化安装
docker run --name mysql -e MYSQL_ROOT_PASSWORD=lzxx@mysql -p 8201:3306 -d mysql:5.7
docker images
docker ps | grep mysql
docker exec -it mysql bash
mysql -u root -p # lzxx@mysql
exit # 退出 MySQL
exit # 退出 容器

image.png
image.png
image.png
image.png

docekr run --name redis -d -p 8300:6379 redis:7
docker ps | grep redis
docker exec -it redis bash
redis-cli
set sellcount 1
get sellcount
exit # 退出Redis
exit # 退出容器

C. Java 程序的容器制作
docker pull ubuntu:22.04
docker images | grep ubuntu
docker run -it --name myjava -p 8080:80 ubuntu:22.07 bash
# 使用中科大源拉取镜像,记得更新缓存
apt search jdk
apt-get install java-1.8.0-openjdk.x86_64 -y
java -version
exit

mkdir -p /data/lllzxx/myapp
cd /data/lllzxx/myapp
# 上传 .jar 包 :scp mynginx10.tar root@IP:/data/lllzxx/testtar
ls -l
docker cp ./myapp.jar myjava:/

docker exec -it myjava bash
ls /
java -jar myapp.jar
# 访问地址:IP:8080/hello/docker
exit # 现在是以前台方式运行,可以写 run 指令,也可以写 DockerFile

D. 容器资源更新
# A窗口
docker pull java:8
docker run -it --name myjava2 java:8 bash

# B窗口
cd /data/lllzxx/myapp
ls -l
docker cp myapp.java myjava2:/

# A窗口
ls -l
java -jar myapp.jar

# C窗口
docker stats myjava2

# D窗口
docker update -m 200m --memory-swap 200m myjava2 # 两者一样即只能使用物理内存而不能使用交换内存

# A窗口
ctrl + c

# D窗口
docker update -m 10m --memory-swap 10m myjava2

# A窗口
java -jar myapp.jar # OOM-Kill 因为申请的内存太多了,无法给这么多资源
# A窗口
docker run -it --name myjava3 java:8 bash

# B窗口
docker stats myjava3

# A窗口
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`
do
 dd if=/dev/zero of=/dev/null &
done
#说明:
#cat /proc/cpuinfo |grep “physical id” | wc -l 可以获得 CPU 的个数,我们将其表示为 N
#seq 1 N 用来生成1到N之间的数字
#for i in seq 1 N; 就是循环执行命令,从1到N
#dd if=/dev/zero of=/dev/null 执行 dd 命令, 输出到/dev/null, 实际上只占用 CPU, 没有 IO 操作
#由于连续执行N个(N是 CPU 个数)的 dd 命令, 且使用率为 100%, 这时调度器会调度每个 dd 命令在不同的 CPU 上处理,最终就实现所有CPU占用率 100%

# C窗口
docker update --cpu-quota 分子 --cpu-period 分母 myjava3

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB】语音信号识别与处理:SG滤波算法去噪及谱相减算法呈现频谱

1 基本定义 SG 滤波算法(Savitzky - Golay 滤波算法)是一种数字信号处理算法,用于对信号进行平滑处理。该算法利用最小二乘法拟合局部数据段,然后用拟合的函数来估计每个数据点的值,从而实现平滑处理。 SG 滤波算法的…

【MySQL】表的内连和外连(重点)

表的连接分为内连和外连。 一、内连接 内连接实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选,前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件; 注意&…

计算机毕业设计分享-ssm心理咨询预约管理系统 19086(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

本科生毕业设计(论文) 题 目心理咨询预约管理系统的设计与实现 学 院 XXXXX 专业班级 XXXXX 学生姓名 XXXX 指导岗位 XXXX 撰写日期:2023年4月 目 录 摘要 1 绪论 1.1背景及意义 …

输入一个整数,输出其最长连续因子。

输入一个整数&#xff0c;输出其最长连续因子。 例如 输入&#xff1a;60 输出&#xff1a;2 3 4 5 6 注意&#xff1a;1不算因子 输入输出格式 输入描述: 输入一个整数N&#xff0c;N<10000。 输出描述: 输出其最长连续因子&#xff0c;如果有多个最长&#xff0c;输出…

Linux篇: 进程控制

一、进程创建 1.1 fork函数初识 在Linux中&#xff0c;fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 返回值&#xff1a; 在子进程中返回0&#xff0c;父进程中返回子进程的PID&#xff0c;子进程创…

#WEB前端

1.实验&#xff1a;vscode安装&#xff0c;及HTML常用文本标签 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; &#xff08;1&#xff09;网页直接搜索安装vscode &#xff08;2&#xff09;打开vscode&#xff0c;在下图分别安装以下插件&#xff1a; Html Css Support …

PowerDesigner中怎么给ER图中字段设置默认值

双击table&#xff0c;进入数据库表详情页 详情页点击【Columns】 双击你要设置默认值得栏目&#xff0c;例如我得删除标记 点击【Standard Checks】&#xff0c;在【Defalut】中录入你想要得默认值&#xff0c;点击【应用即可】

CK98-数学家键盘配置

官方驱动和说明书下载地址 https://www.coolkiller.cn/download/lists_6.html 介绍&#xff1a;https://new.qq.com/rain/a/20221229A09B1M00 官方CK-98数学家驱动版本&#xff08;谨慎更新&#xff09; 如果升级驱动出现问题&#xff0c;重启驱动软件后会默认让你恢复的。 …

【Vue】更换浏览器默认 logo

更换浏览器默认logo为自定义图片 一. 浏览器默认 logo二. 替换为自定义logo三. 步骤3.1 转换大小3.1.1 查看图片尺寸3.1.2 修改尺寸&#xff08;为32px 32px&#xff09; 3.2 替换成功 一. 浏览器默认 logo 二. 替换为自定义logo 三. 步骤 3.1 转换大小 将自定义 logo 转为323…

AcWing 788. 逆序对的数量 解题思路及代码

先贴个题目&#xff1a; 以及原题链接&#xff1a; 788. 逆序对的数量 - AcWing题库https://www.acwing.com/problem/content/790/ 这题也是板子题&#xff0c;就是对归并排序的衍生&#xff0c;我们先分析下如果用归并排序对排序区间进行二分的话&#xff0c;逆序对可能出现的…

[计算机网络]--五种IO模型和select

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、五种IO…

Selenium 遇见伪元素该如何处理?

问题发生 在很多前端页面中&#xff0c;大家会见到很多&#xff1a;:before、::after 元素&#xff0c;比如【百度流量研究院】&#xff1a; 比如【百度疫情大数据平台】&#xff1a; 以【百度疫情大数据平台】为例&#xff0c;“累计确诊”文本并没有显示在 HTML 源代码中&am…

探寻2024年国内热门低代码平台排行!| 功能特点一览

低代码开发是一项革命性的技术&#xff0c;主要目的是尽量避免程序研发的复杂性&#xff0c;让外行开发者也能加入到应用程序的搭建中。低代码平台的核心概念和构成部分通常包括用户界面和拖拽设计、预构件和模块、自动化工作内容与数据库集成和扩展应用&#xff0c;应用低代码…

Python爬虫Cookies 池的搭建

Cookies 池的搭建 很多时候&#xff0c;在爬取没有登录的情况下&#xff0c;我们也可以访问一部分页面或请求一些接口&#xff0c;因为毕竟网站本身需要做 SEO&#xff0c;不会对所有页面都设置登录限制。 但是&#xff0c;不登录直接爬取会有一些弊端&#xff0c;弊端主要有…

Python中几个必须知道的函数

Python中自带了几个比较有意思的函数&#xff0c;一般在面试或者笔试基础的时候会问到&#xff0c;其中3个就是map、filter、reduce函数。 1.map(function, iterable) 它第一个要传的元素是函数名或lambda匿名函数表达式&#xff0c;第二个元素传入可迭代对象。 array [1,2,…

Java中心校智慧校园智慧班牌物联网平台源码

目录 智慧班牌 班牌首页 班级信息 课表信息 视频 图片 进离校管理 人脸登录页 学生个人中心 请假管理 成绩管理 家长留言 学生绑卡 学生评价 系统设置 通知管理 值日管理 倒计时 班级德育 班牌模式 1.课堂授课模式 2.家长会签到模式 3.考场模式 4.班级…

机器学习:模型评估和模型保存

一、模型评估 from sklearn.metrics import accuracy_score, confusion_matrix, classification_report# 使用测试集进行预测 y_pred model.predict(X_test)# 计算准确率 accuracy accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy*100:.2f}%")# 打印…

[微服务]Eureka注册中心

目录 1、引言 2、Eureka的结构和作用 2.1、图解 2.2、几个重要问题⭐ 3、搭建eureka-server 3.1.创建eureka-server服务 3.2、引入eureka依赖 3.3、编写启动类 3.4、编写配置文件 3.5、启动服务 4、服务注册(user) 4.1、引入依赖 4.2、配置文件 4.3、启动多个use…

【前端素材】推荐优质后台管理系统网页Stisla平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功能。后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使…

lv20 QT文件编程6

1 文件普通读写 略 2 流式操作 QFile file("in.txt"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text))return;QTextStream in(&file); while (!in.atEnd()) {QString line in.readLine();process_line(line);}示例 widegt.h #ifndef WIDGET_H #d…