【Docker】docker Overlay2 文件系统原理

news2024/12/25 17:17:26

概述

overlayFS是被称为联合文件系统的其中一个解决方案。在2014年,发布了第一个版本并且合并到了Linux的内核3.18版本中,此时,在docker被称为是overlay文件驱动。后来在Linux 内核4.0 版本中进行了改进,称为overlay2。(overlay存在诸多性能和不稳定的问题,不推荐使用overlay,直接使用默认的overlay2即可)

overlay2工作原理

如下图。overlayfs 通过三个目录:lower 目录、upper 目录、以及 work 目录实现,其中 lower 目录可以是多个,work 目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见,最后联合挂载完成给用户呈现的统一视图称为为 merged 目录。
在这里插入图片描述

  • lowerdir对应底层文件系统,是能被上层文件系统upperdir所共享的只读层
  • workdir则可以理解为overlay2运作的一个工作目录,用于完成copy-on-write等操作
  • overlay2运作时(也就是容器启动时),会将lowerdir、upperdir和workdir联合挂载到merged目录,为使用者提供一个“统一视图”

在具体使用中。可以查看 /var/lib/docker/overlay2/容器ID目录结构,并使用mount | grep overlay查看overlay的挂载情况。如下,确实此目录下的link、lower、work、diff等目录是通过挂载多个目录后,合并显示在一起的。

[root@k8s-m2 ~]# ls /var/lib/docker/overlay2/
0b7652536a0b18637a8326008b4dd50a577562d1f3d5a62eebe02564845fd9c0       
0b7652536a0b18637a8326008b4dd50a577562d1f3d5a62eebe02564845fd9c0-init    
......
[root@k8s-m2 ~]# mount |grep overlay|more
overlay on /var/lib/docker/overlay2/0b7652536a0b18637a8326008b4dd50a577562d1f3d5a62eebe02564845fd9c0/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/SG5
OKVILBSA6FA4TG6QC3RW4CC:/var/lib/docker/overlay2/l/3SHYUCXLHK7TDFYIIMBGZMHY6J:/var/lib/docker/overlay2/l/67UXAPNT4CKASMUI7FGMJS2UOE:/var/lib/docker/overlay2/l/XDCHJ3X76XZLAA
43KZOHSUO5ZP,upperdir=/var/lib/docker/overlay2/0b7652536a0b18637a8326008b4dd50a577562d1f3d5a62eebe02564845fd9c0/diff,workdir=/var/lib/docker/overlay2/0b7652536a0b18637a83260
08b4dd50a577562d1f3d5a62eebe02564845fd9c0/work)
......

overlay2 是如何存储文件的?

1、环境准备
为了更好的说明,在测试时使用一个干净的环境:没有任何镜像和容器,/var/lib/docker/overlay2目录开始就backingFsBlockDevl 两个目录。

[root@kube1 ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
[root@kube1 ~]# yum install yum-utils -y
[root@kube1 ~]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@kube1 ~]# sudo yum makecache fast
[root@kube1 ~]# yum install -y docker-ce
[root@kube1 ~]# systemctl start docker
[root@kube1 overlay2]# ll
total 0
brw------- 1 root root 253, 0 Jan 27 22:04 backingFsBlockDev
drwx------ 2 root root      6 Jan 27 22:04 l

2、 镜像拉取
拉取一个nginx镜像用于测试,观察拉取过程:可以看到目前版本的Nginx镜像一共被分为7层拉取。

[root@kube1 overlay2]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
2f44b7a888fa: Pull complete 
8b7dd3ed1dc3: Pull complete 
35497dd96569: Pull complete 
36664b6ce66b: Pull complete 
2d455521f76c: Pull complete 
dc9c4fdb83d6: Pull complete 
8056d2bcf3b6: Pull complete 
Digest: sha256:4c0fdaa8b6341bfdeca5f18f7837462c80cff90527ee35ef185571e1c327beac
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

3、观察存储目录情况
可以发现/var/lib/docker/overlay2/ 目录下比刚开始多了7个文件夹。

[root@kube1 overlay2]# ls
10dd8ff4345f0387e720d5fdd1df6c6d2b73547d912d139868afd7835ff83503  backingFsBlockDev
2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1  c2f6ab870d00b7709f1745e0373fa6eb7f90cec78348d36b66ba57c3108045a0
410fc9512d1e11b714b6643ce2dcd987df56cc0025b4133afb4645f865757584  cb9d1b97aade9bd3e3a56268a8608622a86a7ac0d0ade9bbb2b0679f4c0ed620
48305d303096d54e0eea026f3366357e2c485c7d5b7c5939e5a062cc36bd03b2  l
a593596d98137556641a7376b14a4d0b00f6f2d6f05bdffe05b01d740a65e894

4、首先来查看一下l目录,可以看到l目录是一堆软连接,把一些较短的随机串软连到镜像层的 diff 文件夹下,这样做是为了避免达到mount命令参数的长度限制

[root@kube1 overlay2]# ls -al l/
total 4
drwx------  2 root root  244 Jan 27 22:12 .
drwx--x--- 10 root root 4096 Jan 27 22:12 ..
lrwxrwxrwx  1 root root   72 Jan 27 22:12 D6T76WE7CR4JMMPUM4NTO55AXG -> ../48305d303096d54e0eea026f3366357e2c485c7d5b7c5939e5a062cc36bd03b2/diff
lrwxrwxrwx  1 root root   72 Jan 27 22:12 GTRRPSN3NBPKHCIMECN7X7BJEP -> ../10dd8ff4345f0387e720d5fdd1df6c6d2b73547d912d139868afd7835ff83503/diff
lrwxrwxrwx  1 root root   72 Jan 27 22:12 JMSMKE6MVY4KJ5CB5ZDDIDVPW2 -> ../a593596d98137556641a7376b14a4d0b00f6f2d6f05bdffe05b01d740a65e894/diff
lrwxrwxrwx  1 root root   72 Jan 27 22:12 LHNRUYWVMA3S5JGMBYRKW4BWHI -> ../c2f6ab870d00b7709f1745e0373fa6eb7f90cec78348d36b66ba57c3108045a0/diff
lrwxrwxrwx  1 root root   72 Jan 27 22:12 SX6PROXGAB4ZJPH7HTPYRQUMH2 -> ../cb9d1b97aade9bd3e3a56268a8608622a86a7ac0d0ade9bbb2b0679f4c0ed620/diff
lrwxrwxrwx  1 root root   72 Jan 27 22:12 TMLMOWKXKUJ4WAWMNDCJVVLMBG -> ../2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1/diff
lrwxrwxrwx  1 root root   72 Jan 27 22:12 WCBZTXQX2YLYEZWCUYGFHKTAST -> ../410fc9512d1e11b714b6643ce2dcd987df56cc0025b4133afb4645f865757584/diff

5、docker image inspect nginx 查看nginx镜像的信息,每个镜像都会有一个GraphDriver.Data信息,这个信息指示了镜像是怎么存的

"GraphDriver": {
    "Data": {
        "LowerDir": "/var/lib/docker/overlay2/48305d303096d54e0eea026f3366357e2c485c7d5b7c5939e5a062cc36bd03b2/diff:/var/lib/docker/overlay2/cb9d1b97aade9bd3e3a56268a8608622a86a7ac0d0ade9bbb2b0679f4c0ed620/diff:/var/lib/docker/overlay2/10dd8ff4345f0387e720d5fdd1df6c6d2b73547d912d139868afd7835ff83503/diff:/var/lib/docker/overlay2/410fc9512d1e11b714b6643ce2dcd987df56cc0025b4133afb4645f865757584/diff:/var/lib/docker/overlay2/a593596d98137556641a7376b14a4d0b00f6f2d6f05bdffe05b01d740a65e894/diff:/var/lib/docker/overlay2/c2f6ab870d00b7709f1745e0373fa6eb7f90cec78348d36b66ba57c3108045a0/diff",
        "MergedDir": "/var/lib/docker/overlay2/2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1/merged",
        "UpperDir": "/var/lib/docker/overlay2/2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1/diff",
        "WorkDir": "/var/lib/docker/overlay2/2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1/work"
    },
    "Name": "overlay2"
},
"RootFS": {
    "Type": "layers",
    "Layers": [
        "sha256:571ade696b261f0ff46e3cdac4635afc009c4ed3429950cb95cd7e5f70ba0a07",
        "sha256:b6c2a8d6f0ac89ef77e161532f3d9d0dc5dfe0a5f20042e0afc0ad14288405eb",
        "sha256:b61d4b2cd2daf06047984c5876a35338c2beb5ae3f6bef479d25f05772a6a482",
        "sha256:eddcd06e5ef9b91677526f6c55fa01a7d6963c435d5cf2bfb488d91aaa72d4a8",
        "sha256:b4ad478450363f0a8020bb5552641fe6077e78fca48da4d77a979724a3ad2a72",
        "sha256:fbcc9bc44d3e165e7e4f56fb189a05ea5c562a733985ec00d5e3fad309eb63cc",
        "sha256:009507b8560964795eab5126f6363cb2b7403596adf370c9e95d4648c43e771f"
    ]
},
"Metadata": {
    "LastTagTime": "0001-01-01T00:00:00Z"
}

}

6、将这7个文件夹全部展开,可以看到目录结构几乎都是一致的,需要重点关注的是diff文件夹和lower文件。

[root@kube1 overlay2]# ls */
10dd8ff4345f0387e720d5fdd1df6c6d2b73547d912d139868afd7835ff83503/:
committed  diff  link  lower  work

2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1/:
diff  link  lower  work

410fc9512d1e11b714b6643ce2dcd987df56cc0025b4133afb4645f865757584/:
committed  diff  link  lower  work

48305d303096d54e0eea026f3366357e2c485c7d5b7c5939e5a062cc36bd03b2/:
committed  diff  link  lower  work

a593596d98137556641a7376b14a4d0b00f6f2d6f05bdffe05b01d740a65e894/:
committed  diff  link  lower  work

c2f6ab870d00b7709f1745e0373fa6eb7f90cec78348d36b66ba57c3108045a0/:
committed  diff  link

cb9d1b97aade9bd3e3a56268a8608622a86a7ac0d0ade9bbb2b0679f4c0ed620/:
committed  diff  link  lower  work

l/:
D6T76WE7CR4JMMPUM4NTO55AXG  JMSMKE6MVY4KJ5CB5ZDDIDVPW2  SX6PROXGAB4ZJPH7HTPYRQUMH2  WCBZTXQX2YLYEZWCUYGFHKTAST
GTRRPSN3NBPKHCIMECN7X7BJEP  LHNRUYWVMA3S5JGMBYRKW4BWHI  TMLMOWKXKUJ4WAWMNDCJVVLMBG

可以看到c2f6ab870d00b7709f1745e0373fa6eb7f90cec78348d36b66ba57c3108045a0文件夹中不存在lower文件,说明它是最底层的,相当于是根镜像,即docker pull时下载的第一层。
同时,下层diff文件夹下的文件,正是Linux文件目录结构。说明在nginx的dockerfile中,肯定有FROM 的操作。

实例说明:Dockerfile的每一个命令都可能引起了系统的变化,它的每一个变化都会记录一层diff文件。

容器怎么存储的?

1、当前环境只有一个nginx镜像,没有容器,/var/lib/docker/overlay2/ 目录下只有镜像层的存储目录。

2、docker run 启动一个容器

[root@kube1 overlay2]# docker run -id nginx
76cd5f0f5a3f8969d3061dfc94107858f4ae4e9c5634320347c8650528434e87
[root@kube1 overlay2]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
76cd5f0f5a3f   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   80/tcp    festive_lederberg
[root@kube1 overlay2]# ll
total 0
drwx--x--- 4 root root     72 Jan 27 22:12 10dd8ff4345f0387e720d5fdd1df6c6d2b73547d912d139868afd7835ff83503
drwx--x--- 4 root root     72 Jan 28 01:10 2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1
drwx--x--- 4 root root     72 Jan 27 22:12 410fc9512d1e11b714b6643ce2dcd987df56cc0025b4133afb4645f865757584
drwx--x--- 4 root root     72 Jan 27 22:12 48305d303096d54e0eea026f3366357e2c485c7d5b7c5939e5a062cc36bd03b2
drwx--x--- 4 root root     72 Jan 27 22:12 a593596d98137556641a7376b14a4d0b00f6f2d6f05bdffe05b01d740a65e894
brw------- 1 root root 253, 0 Jan 27 22:04 backingFsBlockDev
drwx--x--- 3 root root     47 Jan 27 22:12 c2f6ab870d00b7709f1745e0373fa6eb7f90cec78348d36b66ba57c3108045a0
drwx--x--- 5 root root     69 Jan 28 01:10 cb03d50e1baaf7e40f3c981c428213cef7a3b375d7d9134cc3db932fd94b9bcb
drwx--x--- 4 root root     72 Jan 28 01:10 cb03d50e1baaf7e40f3c981c428213cef7a3b375d7d9134cc3db932fd94b9bcb-init
drwx--x--- 4 root root     72 Jan 27 22:12 cb9d1b97aade9bd3e3a56268a8608622a86a7ac0d0ade9bbb2b0679f4c0ed620

3、查看/var/lib/docker/overlay2/ 目录,发现新增了两个目录:其中带-init的目录是只读的;没有init的容器目录才是容器的读写目录

4、link和lower文件与镜像层的功能一致,link文件内容为该容器层的短 ID,lower文件为该层的所有父层镜像的短 ID。diff目录为容器的读写层,容器内修改的文件都会在diff中出现,merged目录为分层文件联合挂载后的结果,也是容器内的工作目录。

5、根据 docker inspect nginx获取到的GraphDriver.Data数据显示,merged目录,是lowerDir各个目录合并UpperDir各个目录后的结果。

[root@kube1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
76cd5f0f5a3f   nginx     "/docker-entrypoint.…"   26 minutes ago   Up 26 minutes   80/tcp    festive_lederberg
[root@kube1 ~]# docker inspect 76
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/cb03d50e1baaf7e40f3c981c428213cef7a3b375d7d9134cc3db932fd94b9bcb-init/diff:/var/lib/docker/overlay2/2839c8c9efc53d0d0a89611b08d2ecead4717031e2458efe8721e2ec0007d7b1/diff:/var/lib/docker/overlay2/48305d303096d54e0eea026f3366357e2c485c7d5b7c5939e5a062cc36bd03b2/diff:/var/lib/docker/overlay2/cb9d1b97aade9bd3e3a56268a8608622a86a7ac0d0ade9bbb2b0679f4c0ed620/diff:/var/lib/docker/overlay2/10dd8ff4345f0387e720d5fdd1df6c6d2b73547d912d139868afd7835ff83503/diff:/var/lib/docker/overlay2/410fc9512d1e11b714b6643ce2dcd987df56cc0025b4133afb4645f865757584/diff:/var/lib/docker/overlay2/a593596d98137556641a7376b14a4d0b00f6f2d6f05bdffe05b01d740a65e894/diff:/var/lib/docker/overlay2/c2f6ab870d00b7709f1745e0373fa6eb7f90cec78348d36b66ba57c3108045a0/diff",
                "MergedDir": "/var/lib/docker/overlay2/cb03d50e1baaf7e40f3c981c428213cef7a3b375d7d9134cc3db932fd94b9bcb/merged",
                "UpperDir": "/var/lib/docker/overlay2/cb03d50e1baaf7e40f3c981c428213cef7a3b375d7d9134cc3db932fd94b9bcb/diff",
                "WorkDir": "/var/lib/docker/overlay2/cb03d50e1baaf7e40f3c981c428213cef7a3b375d7d9134cc3db932fd94b9bcb/work"
            },
            "Name": "overlay2"

6、当我们进入容器创建一个文件,然后再宿主机上相应的merged目录也会出现这个文件。

[root@kube1 ~]# docker exec -it 76 /bin/bash
root@76cd5f0f5a3f:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@76cd5f0f5a3f:/# touch a.txt
root@76cd5f0f5a3f:/# 
exit
[root@kube1 merged]# pwd
/var/lib/docker/overlay2/cb03d50e1baaf7e40f3c981c428213cef7a3b375d7d9134cc3db932fd94b9bcb/merged
[root@kube1 merged]# ls a.txt 

7、查看某个磁盘量使用大的容器
通过如下可以看到目前来说在当前服务器上,k8s_nginx-gateway这个容器磁盘使用量最大。

[root@k8s-m3 ~]# du -s /var/lib/docker/overlay2/*/merged | sort -rn | head
2245124 /var/lib/docker/overlay2/eacbb4f09241f94054700abe1385477ffbdfb80ec8e12cbae3e2309307f84e48/merged
191388  /var/lib/docker/overlay2/2aaa6391b869059c4b7273688daa3380eea523c4940fa9ef677b81c3933d59d6/merged
118368  /var/lib/docker/overlay2/10a01f4c8eda3b5a397a3f883bb4d7f88154803accc0e201717584b5f4b2fad4/merged
110528  /var/lib/docker/overlay2/259b5e08903acc921fcd6f84d7ba95bd797118152f8a63c0543d41c806834902/merged
101548  /var/lib/docker/overlay2/c48167ccceed1301bcb25ed4c1888e0df566929b5400958af683900d1bed86a7/merged
47656   /var/lib/docker/overlay2/fa40f1b425689bde2573b77f31e21d8392a0be9f9243afbb0e93ce0fdc392ab5/merged
47656   /var/lib/docker/overlay2/f8dcd1cce200d1c018f597dd55d75e42c593165e2526d9aa6a6e380ab4a7e285/merged
47656   /var/lib/docker/overlay2/c2d775727d77d6f03c259d864714e3a03e8fefe4cf363ee1561bd0e5587cd5d3/merged
47656   /var/lib/docker/overlay2/4b0c49ba53bd03c2a4c81cd6ad899dfdcf859e115f6f6f204c4437b34b734050/merged
47656   /var/lib/docker/overlay2/43db1fd015f0f14b592f10f93d036fa2bde383c3f8da0a77acfc93f2faaac76d/merged

[root@k8s-m3 ~]# docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep  eacbb4f09241f94054700abe1385477ffbdfb80ec8e12cbae3e2309307f84e48
15110, 808f1771db3776c15251657d1bdf90702cd5470fc70d760d365ee56390c4f9ec, /k8s_nginx-gateway_my-nginx-7ff446c4f4-79wzx_default_2b11ff88-7c7b-4c73-b207-cb0b1d79924f_0, /var/lib/docker/overlay2/eacbb4f09241f94054700abe1385477ffbdfb80ec8e12cbae3e2309307f84e48/work

结论: overlay2将镜像层和容器层都放在单独的目录,并且有唯一 ID,每一层仅存储发生变化的文件,最终使用联合挂载技术将容器层和镜像层的所有文件统一挂载到容器中,使得容器中看到完整的系统文件。

更多关于docker的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出

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

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

相关文章

模拟堆

import java.util.Scanner;public class Main{static int N 100010, size,m;static int[] h new int[N]; //h[i]表示下标i这个点是第多少static int[] hp new int[N]; //hp[i]表示下标为i的节点是第几个被加进来的static int[] ph new int[N]; //ph[i]表示第i个加进来…

BIO、NIO变成与直接内存、零拷贝

一、网络通信 1、什么是socket? Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,一般由操作 系统提供。客户端连接上一个服务端,就会在客户端中产生一个 socket 接口实例,服务端每接受 一个客户端…

qt初入门7:进度条,定时器,时间控件练习

参考课本demo,空闲时间练习一下进度条,定时器,日期相关控件和使用。 1:demo运行结果 2:进度条控件梳理 进度条显示控件实际上是QProgressBar, 显示的进度可以通过代码控制,也可以通过其他控件上获取到的值…

Android SystemUI 介绍

目录 一、什么是SystemUI 二、SystemUI应用源码 三、学习 SystemUI 的核心组件 四、修改状态与导航栏测试 本篇文章,主要科普的是Android SystemUI , 下一篇文章我们将介绍如何把Android SystemUI 应用转成Android Studio 工程项目。 一、什么是Syst…

【K12】运用tk控件演示欧姆定律串联电阻小应用

上述代码是一个基于Python的图形用户界面(GUI)应用程序,用于演示欧姆定律。用户可以通过输入电阻值来计算电流,并在图形上显示结果。该程序使用了Tkinter库来创建GUI,matplotlib库来绘制图形,以及numpy库进…

使用git工具向GitHub远程仓库提交代码

注意更新仓库: 远程仓库更新方法: 本地仓库更新方法:在终端进入克隆的文件夹,依次执行如下指令: git config pull.rebase false //使用默认的合并策略 git pull //执行实际的拉取操作以下为常规操作&#xff…

【React教程】(3) React之表单、组件、事件处理详细代码示例

目录 事件处理示例1示例2示例3(this 绑定问题)示例4(传递参数)Class 和 Style 表单处理组件组件规则注意事项函数式组件(无状态)类方式组件(有状态)组件传值 Propsthis.props.childr…

bert提取词向量比较两文本相似度

使用 bert-base-chinese 预训练模型做词嵌入(文本转向量) 模型下载:bert预训练模型下载-CSDN博客 参考文章:使用bert提取词向量 下面这段代码是一个传入句子转为词向量的函数 from transformers import BertTokenizer, BertMod…

神经网络建立(结果可变)最小神经元

目录 介绍: 初始化: 建模: 预测: 改变结果: 介绍: 在深度学习中,神经元通常指的是人工神经元(或感知器),它是深度神经网络中的基本单元。深度学习的神经元模拟了生…

腾讯发表多模态大模型最新综述,从26个主流大模型看多模态效果提升关键方法

在大规模语言模型(LLMs)通往通用人工智能(AGI)的道路中,从传统的单一的“语言模态”扩展到“图像”、“语音”等等的“多模态”必然是大模型进化的必经之路。 在过去的 2023 年,多模态大规模语言模型&…

Java 与 JavaScript的区别

Java 与 JavaScript的区别 Java 与 JavaScript:概述Java的特点JavaScript 的起源JavaScript 的特点Java 与 JavaScript,哪个更好?JavaScript 与 Java 相似吗?Java 与 JavaScript 的区别JavaScript 在服务器端的运行方式是怎样的&a…

arco design table遇到的一些问题

问题1:不知情就成了树形table table中不知道为啥就多了个树形加号在前面,查找问题后发现,是后端返回的数据中有children,框架中默认对这个参数做了树形结构。 解决办法: 当时没找到取消或者修改字段的属性或方法&…

美赛违规被判作弊,注意这几种情况

每年都会有队伍被判为作弊或无效,无非就是买了思路、找了代做或不小心造成的。 下图是2023美赛评奖结果(MCM是前三题,ICM是后三题,去年疫情补办了春季赛),可以看到共1264个队被取消评奖资格(Di…

扩展学习|一文明晰推荐系统应用开发核心技术发展

文献来源:Lu J, Wu D, Mao M, et al. Recommender system application developments: a survey[J]. Decision support systems, 2015, 74: 12-32. 主题:关于推荐系统应用开发的调查研究 关键词:推荐系统、电子服务个性化、电子商务、电子学习、电子政务 …

STM32学习笔记一——初识STM32

目录 一、什么是ARM 二. Cortex 内核 三.什么是STM32 四.STM32核心板原理图: 五.STM32的内部结构: 六.stm32系统结构简化图 STM32基本原理分析: 七.典型型号——STM32F103ZET6 stm32——32位单片机(数据总线是32位的&am…

idea连接docker

idea 插件无法连接docker问题 原文:idea 插件无法连接docker问题 // 修改docker配置 vi /usr/lib/systemd/system/docker.service // 加上该段配置允许任何ip访问 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock // 重启docker即可 systemctl restart dock…

计算机网络·网络层

网络层 网络层提供的两种服务 争论: 网络层应该向运输层提供怎样的服务?面向连接还是无连接? 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 2 种观点: 面向连接的可靠交付。 无连…

PaddleNLP的简单使用

1 介绍 PaddleNLP是一个基于PaddlePaddle深度学习平台的自然语言处理(NLP)工具库。 它提供了一系列用于文本处理、文本分类、情感分析、文本生成等任务的预训练模型、模型组件和工具函数。 PaddleNLP有统一的应用范式:通过 paddlenlp.Task…

Windows Server 2003 Web服务器搭建

系列文章目录 目录 系列文章目录 前言 一、Web服务器是什么? 二、配置服务器 1.实验环境搭建 2.服务器搭建 1)控制面板中找到增加或删除程序打开 2)点击增加程序 3)安装Web服务器 4)查看安装是否成功 5)打开Internet信息服务(IIS)管理器,进行配置 6)找…

Deepin基本环境查看(七)【任务管理器和进程管理】

Deepin基本环境查看 - 目录Deepin基本环境查看(一)【基本信息】Deepin基本环境查看(二)【内存】Deepin基本环境查看(三)【网络信息】Deepin基本环境查看(四)【硬盘/分区、文件系统、…