Docker-Container
Docker
- ①什么是容器
- ②为什么需要容器
- ③容器的生命周期
- 容器 OOM
- 容器异常退出
- 容器暂停
- ④容器命令清单
- 总览
- docker create
- docker run
- docker ps
- docker logs
- docker attach
- docker exec
- docker start
- docker stop
- docker restart
- docker kill
- docker top
- docker stats
- docker container inspect
- docker port
- docker cp
- docker diff
- docker commit
- docker pause
- docker unpause
- docker rm
- docker export
- docker wait
- docker rename
- docker container prune
- docker update
①什么是容器
通俗地讲,容器是镜像的运行实体,镜像是静态的只读文件
而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态
虽然容器的本质是主机上运行的一个进程,但是容器有自己独立的命名空间隔离和资源限制。也就是说,在容器内部,无法看到主机上的进程、环境变量、网络等信息,这是容器与直接运行在主机上进程的本质区别
容器是基于镜像创建的可运行实例,并且单独存在,一个镜像可以创建出多个容器。运行容器化环境时,实际上是在容器内部创建该文件系统的读写副本。 这将添加一个容器层,该层允许修改镜像的整个副本
🍂案例
镜像为基础类,容器是实例化出来的一个个对象,用户需要的不一样,里面的内容也就不一样了

②为什么需要容器
镜像是静态的文件,并不能提供服务,就像我拿了个 Linux 或者 Windows 的光盘一样,只有安装到主机里面运行起来才能对外提供服务,我们才能使用
③容器的生命周期
- created:初建状态
- running:运行状态
- stopped:停止状态
- paused:暂停状态
- deleted:删除状态

docker create: 创建容器后,不立即启动运行,容器进入初建状态
docker run: 创建容器,并立即启动运行,进入运行状态
docker start: 容器转为运行状态
docker stop: 容器将转入停止状态
docker kill: 容器在故障(死机)时,执行 kill(断电),容器转入停止状态,这种操作容易丢失数据,除非必要,否则不建议使用
docker restart: 重启容器,容器转入运行状态
docker pause: 容器进入暂停状态
docker unpause: 取消暂停状态,容器进入运行状态
docker rm: 删除容器,容器转入删除状态
killed by out-of-memory(因内存不足被终止):宿主机内存被耗尽,也被称为OOM(Out Of Memory → 内存耗尽)
非计划终止 这时需要杀死最吃内存的容器
container process exitde(异常终止):出现容器被终止后,将进入 Should restart? 选择操作:
yes需要重启,容器执行 start 命令,转为运行状态no不需要重启,容器转为停止状态
容器 OOM
Docker 在处理 OOM 事件时分为三种情况
(1)如果容器中的应用耗尽了主机系统分配给容器的内存限额,就会触发 OOM 事件。例如,在容器当中,部署了一个 web 服务。假设主机分配给此容器的内存上限为 1G,当脚本申请的内存大于 1G 时,此容器就会触发 OOM 事件。而在这种情况下,此容器将会被强制关闭
但需要注意的是,此时关闭容器的并非是 Docker Daemon,而是宿主机操作系统。因为一个容器其实就是一组运行在宿主机操作系统当中的进程,宿主机操作系统通过 cgroups 对这组进程设定资源上限,当这些进程申请的资源到达上限时,触发的是宿主机操作系统的内核 OOM 事件,因此最终是由宿主机内核来关闭这些进程
(2)如果用户不想关闭这个容器,那么可以选择--oom-kill-disable来禁用 OOM-Killer
使用此参数时,仍需要注意,如果使用 -m 设置了此容器内存上限,那么当容器到达内存资源上限时,主机不会关闭容器,但也不会继续向此容器继续分配资源,此时容器将处于 hung 状态。只需要将最坏的情况封闭在一定范围之内,而不至于蔓延出去
(3)如果用户使用了–oom-kill-disable,但也没有使用 -m 来设定上限,因而此时此容器将会尽可能多地使用主机内存资源。换言之,主机内存有多大,它就将用多大
容器异常退出
每个容器内部都存在一个 Init 进程,容器中其他所有进程都是此进程的子进程。运行的容器是因为 Init 进程在运行,如果一个子进程因为某种原因造成了退出,那么其父进程也会同步退出,直至 Init 进程也退出
当 Init 进程退出时,也就代表着此容器被关闭。docker 目前没有办法知道此时的进程退出属于正常退出还是异常退出。当出现容器关闭情况时,Docker Daemon 会尝试再次重新将此容器由 Stopped 状态转为 Running 状态。只有设置了–restart 参数的容器,Docker Daemon 才会去尝试启动,否则容器会保持停止状态
容器暂停
Docker"剥夺"了此容器的 CPU 资源。而其他资源,如 Memory 资源、Network 资源等还保留未动。如此一来,失去了 CPU 资源的进程,是不会被主机内核系统所调度的,所以此容器就处于“冰封”状态
④容器命令清单
总览
| command | alias | function |
|---|---|---|
| docker create | docker container create | 创建容器 |
| docker run | docker container run | 运行容器 |
| docker attach | docker container attach | 连接到正在运行中的容器 |
| docker commit | docker container commit | 将镜像提交为容器 |
| docker cp | docker container cp | 在容器和宿主机之间拷贝 |
| docker diff | docker container diff | 检查容器里文件结构的更改 |
| docker exec | docker container exec | 在运行的容器中执行命令 |
| docker export | docker container export | 将容器导出为 tar |
| docker container inspect | 查看容器详细信息 | |
| docker kill | docker container kill | 杀死容器 |
| docker logs | docker container logs | 查看日志 |
| docker ps | docker container ls, docker container list, docker container ps | 查看正在运行的进程 |
| docker pause | docker container pause | 暂停进程 |
| docker port | docker container port | 查看容器端口映射 |
| docker container prune | 删除停止的容器 | |
| docker rename | docker container rename | 重命名容器 |
| docker restart | docker container restart | 重启容器 |
| docker rm | docker container rm, docker container remove | 删除容器 |
| docker start | docker container start | 启动容器 |
| docker stats | docker container stats | 查看资源占用信息 |
| docker stop | docker container stop | 停止容器 |
| docker top | docker container top | 查看某个容器的资源占用 |
| docker unpause | docker container unpause | 继续运行容器 |
| docker update | docker container update | 更新容器配置 |
| docker wait | docker container wait | 阻止一个或多个容器停止, 然后打印退出代码 |
docker create
-
功能
创建一个新的容器但不启动它
-
语法
docker create [OPTIONS] IMAGE [COMMAND] [ARG...] -
别名
docker container create -
参数
-i: 以交互模式运行容器,通常与 -t 同时使用-P: 随机端口映射,容器内部端口随机映射到主机的端口-p: 指定端口映射,格式为:主机(宿主)端口:容器端口-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用--name="nginx-lb": 为容器指定一个名称-h "mars": 指定容器的 hostname-e username="ritchie": 设置环境变量--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行-m: 设置容器使用内存最大值--network="bridge": 指定容器的网络连接类型--link=[]: 添加链接到另一个容器--volume , -v: 绑定一个卷--rm: shell 退出的时候自动删除容器--restart: 自动重启
🍂样例
# 创建一个名为 mynginx 的容器
docker create --name mynginx nginx:latest
docker run
-
功能
创建一个新的容器并运行一个命令
-
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -
别名
docker container run -
参数
-d: 后台运行容器,并返回容器 ID;比 create 多了这个参数-P: 随机端口映射,容器内部端口随机映射到主机的端口-p: 指定端口映射,格式为:主机(宿主)端口:容器端口-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用--name="nginx-lb": 为容器指定一个名称-h "mars": 指定容器的 hostname-e username="ritchie": 设置环境变量--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行-m: 设置容器使用内存最大值--network="bridge": 指定容器的网络连接类型--link=[]: 添加链接到另一个容器--volume , -v: 绑定一个卷--rm: shell 退出的时候自动删除容器--restart: 自动重启
🍂样例
# 使用 docker 镜像 nginx:latest 以后台模式启动一个容器, 并将容器命名为 mynginx
docker run --name mynginx -d nginx:latest
docker ps
-
功能
列出容器
-
语法
docker ps [OPTIONS] -
别名
docker container ls, docker container list, docker container ps -
参数
-a: 显示所有的容器,包括未运行的-f: 根据条件过滤显示的内容--format: 指定返回值的模板文件。如 json 或者 table-l: 显示 latest 的容器-n: 列出最近创建的 n 个容器--no-trunc: 不截断输出-q: 静默模式,只显示容器编号-s: 显示总的文件大小
🍂样例
# 列出全部容器(包括未运行的)
docker ps -a
docker logs
-
功能
查看容器日志
-
语法
docker logs [OPTIONS] CONTAINER -
别名
docker container logs -
参数
-f, --follow: 跟踪日志输出--since: 显示某个开始时间的所有日志-t, --timestamps: 显示时间戳-n, --tail: 仅列出最新 N 条容器日志
🍂样例
# 跟踪查看容器 mynginx 的日志输出
docker logs -f mynginx
docker attach
-
功能
连接到正在运行中的容器
-
语法
docker attach [OPTIONS] CONTAINER -
别名
docker container attach -
参数
--sig-proxy: 是否将所有信号代理,默认是 true,如果设置为 false,退出的话不会影响容器,否则退出会导致容器退出
🍂样例
# 连接到正在运行的容器(执行 ctrl+c 后会把容器杀死)
docker attach mynginx# 连接到正在运行的容器(执行 ctrl+c 后不会把容器杀死)
docker attach --sig-proxy=false mynginx
docker exec
-
功能
在容器中执行命令
-
语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] -
别名
docker container exec -
参数
-d: 分离模式: 在后台运行-i: 即使没有附加也保持 STDIN 打开-t: 分配一个伪终端-e: 设置环境变量-u, --user: 指定用户"<name|uid>[:<group|gid>]"-w, --workdir: 指定工作目录
🍂样例
# 在容器 mynginx 中以交互模式执行 echo
docker exec -it mynginx echo "Hello world"# 在容器 mynginx 中以交互模式打开 shell
docker exec -it mynginx bash
docker start
-
功能
启动停止的容器
-
语法
docker start [OPTIONS] CONTAINER [CONTAINER...] -
别名
docker container start -
参数
-a, --attach: 用于将容器的标准输入(STDIN)、标准输出(STDOUT)和标准错误(STDERR)流连接到执行该命令的终端-i, --interactive: 保持容器的 STDIN 打开,即使没有连接到终端
🍂样例
# 启动容器, 并将其输出连接到终端,同时在后台运行
docker start -ai mynginx
docker stop
-
功能
停止运行的容器
-
语法
docker stop [OPTIONS] CONTAINER [CONTAINER...] -
别名
docker container stop -
参数
-s: 发送的信号
🍂样例
# 停止 mynginx 容器
docker stop mynginx
docker restart
-
功能
重启容器
-
语法
docker restart [OPTIONS] CONTAINER [CONTAINER...] -
别名
docker container restart -
参数
-t, --time: 在发送 SIGTERM 信号后等待容器停止的秒数,默认为 10 秒
🍂样例
# 重启 mynginx 容器, 设置等待时间为 30 秒
docker restart -t 30 mynginx
docker kill
-
功能
强制退出容器
-
语法
docker kill [OPTIONS] CONTAINER [CONTAINER...] -
别名
docker container kill -
参数
-s, --signal: 用于指定发送给容器的信号。默认是 SIGKILL,但你可以指定任何有效的信号
🍂样例
# 立即停止 mynginx 容器
docker kill mynginx# 向 mynginx 的容器发送 SIGINT 信号
docker kill -s SIGINT mynginx
docker top
-
功能
查看容器中运行的进程信息,支持 ps 命令参数
-
语法
docker top CONTAINER [ps OPTIONS] -
别名
docker container top
注意事项
容器运行时不一定有 /bin/bash 终端来交互执行 top 命令,而且容器还不一定有 top 命令,可以使用 docker top 来实现查看 container 中正在运行的进程
🍂样例
# 查看 mynginx 容器中的进程信息
docker top mynginx
docker stats
-
功能
显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等
-
语法
docker stats [OPTIONS] [CONTAINER...] -
别名
docker container stats -
参数
-a. --all: 显示所有容器, 包括未运行的--format: 指定返回值的模板文件。如 table,json--no-stream: 展示当前状态就直接退出了,不再实时更新--no-trunc: 不截断输出
-
返回报文
CONTAINER ID & NAME: 容器 ID 与名称CPU % & MEM %: 容器使用的 CPU 和内存的百分比MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量NET I/O: 容器通过其网络接口发送和接收的数据量BLOCK I/O: 容器从主机上的块设备读取和写入的数据量PIDS: 容器创建的进程或线程数
🍂样例
# 列出所有正在运行的容器信息
docker stats# 列出所有正在运行的容器信息(Json 格式显示)
docker stats --format json
docker container inspect
-
功能
查看容器详细信息
-
语法
docker container inspect [OPTIONS] CONTAINER [CONTAINER...] -
参数
-f, --fortmat: 指定返回值的模板文件。如 table, json-s, --size: 显示总的文件大小
注意事项
docker inspect会自动检查是镜像还是容器, 然后显示详细信息
🍂样例
# 查看 mynginx 容器的详细信息
docker container inspect mynginx
docker port
-
功能
用于列出指定的容器的端口映射,或者查找将 PRIVATE_PORT NAT 到面向公众的端口
-
语法
docker port CONTAINER [PRIVATE_PORT[/PROTO]] -
别名
docker container port
🍂样例
# 查询 mynginx 容器的端口映射情况
docker port mynginx
docker cp
-
功能
在容器和宿主机之间拷贝文件
-
语法
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH -
别名
docker container cp
🍂样例
# 将主机 /www/ 目录拷贝到容器 mynginx 的 /www 目录下
docker cp /www/ mynginx:/www/# 将容器 /www/ 目录拷贝到主机的 /wwwbak 目录下
docker cp mynginx:/www/ /wwwbak/
docker diff
-
功能
检查容器里文件结构的更改
-
语法
docker diff CONTAINER
🍂样例
检查 mynginx 容器里文件结构的更改
docker diff mynginx
docker commit
-
功能
从容器创建一个新的镜像
-
语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] -
参数
-a: 提交镜像的作者-c: 使用 Dockerfile 指令创建镜像(可修改启动指令)-m: 提交时的说明文字-p: 在 commit 时, 将容器暂停
🍂样例
# 从 c3f279d17e0a 容器中创建 bibubibu/mynginx:v1 镜像
docker commit c3f279d17e0a bibubibu/mynginx:v1
docker pause
-
功能
暂停容器中所有的进程
-
语法
docker pause CONTAINER [CONTAINER...] -
别名
docker container pause
🍂样例
# 暂停 mynginx 容器中的所有进程
docker pause mynginx
docker unpause
-
功能
恢复容器中所有的进程
-
语法
docker unpause CONTAINER [CONTAINER...] -
别名
docker container unpause
🍂样例
# 恢复 mynginx 容器中的所有进程
docker unpause mynginx
docker rm
-
功能
删除停止的容器
-
语法
docker rm [OPTIONS] CONTAINER [CONTAINER...] -
别名
docker container rm -
参数
-f: 通过 SIGKILL 信号强制删除一个运行中的容器
🍂样例
# 删除 mynginx 容器
docker stop mynginx
docker rm mynginx
docker export
-
功能
导出容器内容为 tar 文件
-
语法
docker export [OPTIONS] CONTAINER -
别名
docker container export -
参数
-o: 写入到文件
🍂样例
# 导出 mynginx 为 mynginx_v1.tar
docker export -o mynginx_v1.tar mynginx
docker wait
-
功能
阻塞运行直到容器停止,然后打印出它的退出代码
-
语法
docker wait CONTAINER [CONTAINER...] -
别名
docker container wait
🍂样例
# 阻塞 mynginx 容器运行
docker wait mynginx
docker rename
-
功能
重命名容器
-
语法
docker rename CONTAINER NEW_NAME -
别名
docker container rename
🍂样例
# 将 mynginx 容器重命名为 myweb
docker rename mynginx myweb
docker container prune
-
功能
删除所有停止的容器
-
语法
docker container prune [OPTIONS] -
参数
-f, --force: 不提示是否进行确认
🍂样例
# 删除所有停止的容器
docker container prune
docker update
-
功能
更新容器配置
-
语法
docker update [OPTIONS] CONTAINER [CONTAINER...] -
别名
docker container update -
参数
--cpus: cpu 数量--cpuset-cpus: 使用哪些 cpu--memory: 内存限制--memory-swap: 交换内存--cpu-period: 用来指定容器对 CPU 的使用要在多长时间内做一次重新分配--cpu-quota: 用来指定在这个周期内,最多可以有多少时间用来跑这个容器
🍂样例
# 更新内存
docker update -m 400m mynginx

相关文章:
Docker-Container
Docker ①什么是容器②为什么需要容器③容器的生命周期容器 OOM容器异常退出容器暂停 ④容器命令清单总览docker createdocker rundocker psdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker container insp…...
下载安装anaconda和pytorch的详细方法,以及遇到的问题和解决办法
下载安装Anaconda 首先需要下载Anaconda,可以到官网Anaconda官网或者这里提供一个镜像网站去下载anaconda镜像网站 安装步骤可参考该文章:Anaconda安装步骤,本篇不再赘述 注意环境变量的配置,安装好Anaconda之后一定要在环境变量…...
2020年天津市二级分类土地利用数据(矢量)
天津市,位于华北平原海河五大支流汇流处,东临渤海,北依燕山。地势以平原和洼地为主,北部有低山丘陵,海拔由北向南逐渐下降,地貌总轮廓为西北高而东南低。天津有山地、丘陵和平原三种地形,平原约…...
设计模式——结构型——外观模式Facade
处理器类 public class Cpu {public void start() {System.out.println("处理器启动了...");} } 内存类 public class Memory {public void start() {System.out.println("内存启动了...");} } 硬盘类 public class Disk {public void start() {Syste…...
OpenGL的MVP矩阵理解
OpenGL的MVP矩阵理解 右手坐标系 右手坐标系与左手坐标系都是三维笛卡尔坐标系,他们唯一的不同在于z轴的方向,如下图,左边是左手坐标系,右边是右手坐标系 OpenGL中一般用的是右手坐标系 1.模型坐标系(Local Space&…...
前端超分辨率技术应用:图像质量提升与场景实践探索-设计篇
超分辨率! 引言 在数字化时代,图像质量对于用户体验的重要性不言而喻。随着显示技术的飞速发展,尤其是移动终端视网膜屏幕的广泛应用,用户对高分辨率、高质量图像的需求日益增长。然而,受限于网络流量、存储空间和图像…...
C++11入门手册第一节,学完直接上手Qt(共两节)
入门 hello.cpp #include <iostream>int main() { std::cout << "Hello Quick Reference\n"<<endl; return 0;} 编译运行 $ g hello.cpp -o hello$ ./helloHello Quick Reference 变量 int number 5; // 整数float f 0.95; //…...
Docker部署MinIO对象存储服务
1. 拉取MinIO镜像 # 下载镜像 docker pull minio/minio#查看镜像 docker images2. 创建目录 # 文件存储目录 mkdir -p /opt/minio/data# 配置文件 mkdir -p /opt/minio/config# 日志文件 mkdir -p /opt/minio/logs3. 创建Minio容器并运行 docker run \ -p 9000:9000 \ -p 90…...
基于Echarts的超市销售可视化分析系统(数据+程序+论文)
本论文旨在研究Python技术和ECharts可视化技术在超市销售数据分析系统中的应用。本系统通过对超市销售数据进行分析和可视化展示,帮助决策层更好地了解销售情况和趋势,进而做出更有针对性的决策。本系统主要包括数据处理、数据可视化和系统测试三个模块。…...
使用ai智能写作场景之gpt整理资料,如何ai智能写作整理资料
Ai智能写作助手:Ai智能整理资料小助手 Ai智能整理资料小助手可试用3天! 通俗的解释一下怎么用ChatGPT来进行资料整理: 搜寻并获取指定数量的特定领域文章: 想像你在和我说话一样,告诉我你想要多少篇关于某个话题的文…...
C/C++ 内存管理
1、C/C内存分布 首先我们来了解在一个程序中,代码主要存储在哪些地方; 1.栈:又叫堆栈,其中一般存储非静态局部变量、函数参数、返回值等,栈的增长是向下的。 2.内存映射段:是高效的 I/O 映射方式࿰…...
android pdf框架-10,相册浏览
MupdfViewer 这是最后apk,源码在前面的文章已经贴过了本站下载地址,只是不是最新的.可能不少是旧的内容. subsampling-scale-image-view这是一个大图片的分块加载的实现.比较不错的.滑动方面我觉得使用flinger的效果比它要流畅,惯性要好. 也有人把这个作成pdf渲染器.但翻页就…...
基于SSM的高校普法系统(有报告)。Javaee项目。ssm项目。
演示视频: 基于SSM的高校普法系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…...
数据结构刷题篇 之 【力扣二叉树基础OJ】详细讲解(含每道题链接及递归图解)
有没有一起拼用银行卡的,取钱的时候我用,存钱的时候你用 1、相同的树 难度等级:⭐ 直达链接:相同的树 2、单值二叉树 难度等级:⭐ 直达链接:单值二叉树 3、对称二叉树 难度等级:⭐⭐ 直达…...
Jackson 2.x 系列【6】注解大全篇二
有道无术,术尚可求,有术无道,止于术。 本系列Jackson 版本 2.17.0 源码地址:https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 注解大全2.11 JsonValue2.12 JsonKey2.13 JsonAnySetter2.14 JsonAnyGetter2.15 …...
在低成本loT mcu上实现深度神经网络端到端自动部署-深度神经网络、物联网、边缘计算、DNN加速——文末完整资料
目录 前言 DNN 量化神经网络 并行超低功耗计算范式 面向内存的部署 结果 原文与源码下载链接 REFERENCES 前言 在物联网极端边缘的终端节点上部署深度神经网络( Deep Neural Networks,DNNs )是支持普适深度学习增强应用的关键手段。基于低成本MCU的终端节点…...
【linux】基础IO |文件操作符
需要掌握:操作文件,本质:进程操作文件。进程和文件的关系 向文件中写入,本质上向硬件中写入->用户没有权利直接写入->操作系统是硬件的管理者,我们可以通过操作系统往硬件写入->操作系统必须提供系统调用&…...
探索 2024 年 Web 开发最佳前端框架
前端框架通过简化和结构化的网站开发过程改变了 Web 开发人员设计和实现用户界面的方法。随着 Web 应用程序变得越来越复杂,交互和动画功能越来越多,这是开发前端框架的初衷之一。 在网络的早期,网页相当简单。它们主要以静态 HTML 为特色&a…...
解决: MAC ERROR [internal] load metadata for docker.io/library/openjdk:17
错误信息: ERROR [internal] load metadata for docker.io/library/openjdk:17 ERROR: failed to solve: openjdk:17: error getting credentials - err: exit status 1, out: 解决方法: running this command rm ~/.docker/config.json before …...
View事件分发
MotionEvent 1.简介 MotionEvent 是Android系统中一个非常重要的类,它代表了屏幕上发生的触摸事件。当用户在屏幕上触摸、滑动或者长按时,都会生成一个MotionEvent对象,这个对象包含了触摸动作的各种信息。 2.事件类型 ACTION_DOWN&#x…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...
【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...
