当前位置: 首页 > news >正文

Docker 常用命令基础详解(一)

一、Docker 初相识

在当今数字化时代,软件开发和部署的效率与灵活性成为了关键因素。Docker,作为一款开源的应用容器引擎,犹如一颗璀璨的明星,照亮了软件开发与部署的道路,为开发者们带来了前所未有的便利。它就像是一个神奇的 “集装箱”,可以将应用程序及其所有的依赖项打包在一起,形成一个独立的、可移植的运行环境。无论你是在开发、测试还是生产环境中,Docker 都能确保你的应用程序稳定运行,就像在一个 “密封舱” 里一样,不受外界环境的干扰。

(一)Docker 的独特优势

  1. 轻量级与高效性:与传统的虚拟机相比,Docker 容器的启动速度极快,几乎可以瞬间启动,而虚拟机的启动则需要数分钟的时间。这就好比你要出门,Docker 容器就像穿上一件轻便的外套,瞬间就能出发;而虚拟机则像穿上厚重的铠甲,准备时间漫长。此外,Docker 容器的资源占用极少,多个容器可以共享同一宿主机的内核,大大提高了资源的利用率。就像在一个大房子里,Docker 容器可以巧妙地利用每一寸空间,而虚拟机则像一个个巨大的房间,占据了大量的空间。
  1. 一致性与可移植性:Docker 容器确保了应用程序在不同环境中的一致性。无论你是在本地开发环境、测试环境还是生产环境中运行,应用程序的行为都是一致的。这就好比你制作了一个精美的蛋糕,无论你把它放在哪个厨房里展示,它的味道和外观都是一样的。而且,Docker 容器可以轻松地在不同的操作系统和基础设施之间移植,让你的应用程序可以在任何地方运行,就像一个万能的 “旅行家”。
  1. 快速部署与迭代:使用 Docker,你可以快速地部署和更新应用程序。通过简单的命令,你就可以创建、启动和停止容器,大大缩短了应用程序的部署时间。这就好比你在搭建一个乐高积木城堡,Docker 就像一个神奇的工具,让你可以快速地搭建和修改城堡,而不需要花费大量的时间和精力。

(二)Docker 的广泛应用场景

  1. 开发与测试环境:在开发和测试过程中,Docker 可以帮助开发者快速搭建和管理开发环境。每个开发人员都可以拥有自己独立的开发环境,避免了因环境差异而导致的问题。这就好比每个开发者都有自己的专属实验室,里面的设备和工具都是一样的,不会因为环境的不同而影响实验结果。
  1. 持续集成与持续部署(CI/CD):Docker 与 CI/CD 工具的完美结合,实现了自动化的构建、测试和部署过程。每次代码更新时,Docker 可以自动构建新的容器,并将其部署到生产环境中,大大提高了软件开发的效率和质量。这就好比一个高效的生产线,每个环节都紧密相连,自动化地完成产品的生产和交付。
  1. 微服务架构:在微服务架构中,每个微服务都可以独立地打包成一个 Docker 容器,实现了服务的独立部署、扩展和管理。这就好比一个大型的商场,每个店铺都是一个独立的个体,可以自由地调整经营策略和布局,而不会影响到其他店铺的运营。

(三)掌握 Docker 命令的重要性

要充分发挥 Docker 的强大功能,掌握其常用命令是至关重要的。这些命令就像是开启 Docker 宝藏的钥匙,让你能够轻松地管理容器、构建镜像、进行网络配置等操作。无论是创建和启动容器,还是管理镜像和仓库,每一个命令都有其独特的用途和魅力。接下来,让我们一起深入探索 Docker 的常用命令,开启这段精彩的技术之旅吧!

二、Docker 基础命令

2.1 查看版本信息

在使用 Docker 时,了解其版本信息是很有必要的,这有助于我们确定所使用的功能是否可用,以及排查一些与版本相关的问题。查看 Docker 版本信息的命令非常简单,只需在终端中输入:

 

docker version

执行该命令后,你会看到类似如下的输出:

 

Client:

Version: 20.10.12

API version: 1.41

Go version: go1.16.12

Git commit: e91ed57

Built: Mon Dec 13 11:45:04 2021

OS/Arch: linux/amd64

Context: default

Experimental: true

Server:

Engine:

Version: 20.10.12

API version: 1.41 (minimum version 1.12)

Go version: go1.16.12

Git commit: 459d0df

Built: Mon Dec 13 11:43:49 2021

OS/Arch: linux/amd64

Experimental: false

containerd:

Version: 1.4.12

GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d

runc:

Version: 1.0.3

GitCommit: v1.0.3-0-gf46b6ba

docker-init:

Version: 0.19.0

GitCommit: de40ad0

从输出中可以看到,它分别展示了客户端(Client)和服务端(Server)的版本信息,包括版本号、API 版本、Go 版本、Git 提交信息、构建时间、操作系统和架构等。这就像是我们购买了一款软件,查看版本信息可以让我们了解这个软件的 “生产日期” 和 “配置参数”,以便更好地使用它。

2.2 获取帮助文档

当我们对某个 Docker 命令不太熟悉,或者想了解某个命令的具体用法和参数时,Docker 提供的帮助文档就像是一位贴心的 “小助手”,随时为我们答疑解惑。获取 Docker 整体帮助文档的命令如下:

 

docker --help

执行该命令后,你会看到一个非常详细的帮助页面,它列出了 Docker 的所有命令以及一些通用选项。例如,你可以看到管理命令(Management Commands),如 builder、config、container 等,以及普通命令(Commands),如 attach、build、commit 等。每个命令后面都有简短的描述,让你对其功能有一个初步的了解。这就好比你拿到了一本厚厚的使用说明书,虽然内容很多,但它能帮助你全面了解这个工具的各种功能。

如果你想获取某个具体命令的帮助文档,比如docker run命令,只需在命令后面加上--help,如下所示:

 

docker run --help

这样,你就会得到关于docker run命令的详细帮助信息,包括该命令的用法、各种选项及其含义。例如,--name选项用于为容器指定一个名称,-d选项用于在后台运行容器并返回容器 ID 等。通过查看这些详细的帮助信息,我们可以更准确地使用命令,避免因为参数错误而导致的问题。

2.3 了解系统状态

要全面了解 Docker 系统的运行状态,我们可以使用docker info命令。这个命令就像是一个 “系统探测器”,它会收集并展示 Docker 系统的各种详细信息,包括镜像数量、容器数量、存储驱动、网络配置等。在终端中输入以下命令:

 

docker info

执行后,你会看到类似如下的输出:

 

Containers: 3

Running: 1

Paused: 0

Stopped: 2

Images: 5

Server Version: 20.10.12

Storage Driver: overlay2

Backing Filesystem: extfs

Supports d_type: true

Native Overlay Diff: true

userxattr: false

Logging Driver: json-file

Cgroup Driver: cgroupfs

Cgroup Version: 1

Plugins:

Volume: local

Network: bridge host ipvlan macvlan null overlay

Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

Swarm: inactive

Runtimes: runc

Default Runtime: runc

Init Binary: docker-init

containerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5d

runc version: v1.0.3-0-gf46b6ba

init version: de40ad0

Security Options:

seccomp

Profile: default

Kernel Version: 5.10.0-10-amd64

Operating System: Debian GNU/Linux 11 (bullseye)

OSType: linux

Architecture: x86_64

CPUs: 2

Total Memory: 3.855GiB

Name: your-hostname

ID: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

Docker Root Dir: /var/lib/docker

Debug Mode: false

Registry: https://index.docker.io/v1/

Labels:

Experimental: false

Insecure Registries:

127.0.0.0/8

Live Restore Enabled: false

Product License: Community Engine

从输出中,我们可以清晰地看到当前系统中容器的运行状态,如正在运行的容器数量、暂停的容器数量和停止的容器数量。同时,还能了解到镜像的数量、存储驱动的类型、网络插件的信息等。这些信息对于我们监控和管理 Docker 系统非常重要,就像医生通过各种检查数据来了解病人的身体状况一样,我们可以根据这些信息来优化和调整 Docker 系统的配置,确保其稳定高效地运行。

三、镜像操作命令

3.1 列出本地镜像

在使用 Docker 的过程中,我们常常需要查看本地已经下载或构建的镜像,这时就可以使用docker images命令。这个命令就像是一个 “镜像仓库管理员”,它会将本地镜像的信息清晰地展示出来。其基本语法如下:

 

docker images [OPTIONS] [REPOSITORY[:TAG]]

其中,OPTIONS是一些可选参数,REPOSITORY表示镜像仓库名称,TAG表示镜像标签。如果不指定REPOSITORY和TAG,则会列出所有本地镜像。常见的参数有:

  • -a:列出本地所有的镜像,包括中间映像层。默认情况下,会过滤掉中间映像层,只展示最终的镜像。就好比一个仓库里有很多货物,默认只展示摆放在外面的成品,而-a参数可以让我们看到仓库里所有的货物,包括半成品。
  • --digests:显示镜像的摘要信息,这对于确保镜像的完整性和一致性非常重要。就像我们购买商品时,查看商品的防伪标识,确保买到的是正品。
  • -f:根据指定条件过滤结果。例如,docker images -f "dangling=true"可以列出所有虚悬镜像(仓库名和标签都是<none>的镜像)。这就像是在仓库里筛选出特定类型的货物,方便我们管理和清理。
  • --format:指定返回值的模板文件,通过 Go 语言模板文件来定制展示的格式,让输出更符合我们的需求。
  • --no-trunc:显示完整的镜像信息,不会截断输出。有时候镜像的一些信息可能比较长,默认会截断显示,使用这个参数就可以看到完整的内容。
  • -q:只显示镜像 ID,简洁明了,适合在需要快速获取镜像 ID 的场景中使用。

执行docker images命令后,会看到一个类似如下的表格:

 

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx latest 8609f97d428d 2 weeks ago 133MB

ubuntu 20.04 94e19c99c257 3 weeks ago 72.8MB

hello-world latest c54a2cc56cbb 5 months ago 1.84kB

表格中的各列含义如下:

  • REPOSITORY:镜像所属的仓库名称,就像货物所属的品牌或类别。
  • TAG:镜像的标签,用于区分同一仓库中的不同版本,通常latest表示最新版本。这就好比商品的不同批次或型号。
  • IMAGE ID:镜像的唯一标识,类似于商品的条形码,通过它可以准确地识别和操作镜像。
  • CREATED:镜像的创建时间,让我们了解镜像的 “年龄”。
  • SIZE:镜像的大小,反映了镜像所占用的存储空间,就像商品的体积大小。

3.2 搜索镜像

当我们需要在 Docker Hub 中查找特定的镜像时,docker search命令就派上用场了。它就像是一个 “镜像搜索引擎”,帮助我们在海量的镜像中找到符合需求的那一个。其基本语法为:

 

docker search [OPTIONS] TERM

其中,OPTIONS是可选参数,TERM是搜索的关键词,比如镜像名称或相关描述。常见的参数有:

  • --automated:只列出自动构建的镜像,这些镜像通常是由一些自动化工具或流程创建的,质量和稳定性可能更有保障。
  • --filter, -f:根据指定条件过滤结果。例如,docker search -f "stars=30" nginx可以筛选出点赞数(STARS)大于等于 30 的 nginx 镜像。这就像是在搜索引擎中设置筛选条件,快速找到符合要求的信息。
  • --limit:限制搜索结果的最大条数,默认是 25 条。如果我们只需要查看前几个最相关的镜像,可以使用这个参数来控制输出数量。
  • --no-trunc:不截断输出,显示完整的镜像描述和其他信息,让我们能更全面地了解镜像的详细情况。
  • --stars, -s:只展示点赞数(STARS)不低于该数值的结果,通过点赞数可以大致了解镜像的受欢迎程度和质量。

例如,我们要搜索 nginx 镜像,可以执行以下命令:

 

docker search nginx

执行后,会看到一个类似如下的表格:

 

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

nginx Official build of Nginx. 16640 [OK]

jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1715 [OK]

richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 815 [OK]

表格中的各列含义如下:

  • NAME:镜像的名称,包含仓库名和镜像名,方便我们识别和拉取。
  • DESCRIPTION:镜像的描述信息,简单介绍了镜像的用途和特点,帮助我们判断是否符合需求。
  • STARS:镜像的点赞数,反映了该镜像在社区中的受欢迎程度,点赞数越高,通常表示该镜像质量和实用性较好。
  • OFFICIAL:表示是否为官方镜像,官方镜像由软件的官方项目组创建和维护,质量和安全性更有保障。
  • AUTOMATED:表示是否是自动构建的镜像,自动构建的镜像一般是通过特定的脚本或工具自动生成的,构建过程更加标准化和高效。

3.3 拉取镜像

从远程仓库获取镜像到本地,我们使用docker pull命令,它就像是一个 “镜像搬运工”,将我们需要的镜像从远程仓库搬运到本地。其基本语法为:

 

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

其中,OPTIONS是可选参数,NAME是镜像的名称,TAG是镜像的标签,用于指定版本,DIGEST是镜像的摘要,用于唯一标识一个镜像版本。如果不指定TAG,默认会拉取latest版本。常见的参数有:

  • --all-tags, -a:下载所有标签的镜像,这在我们需要获取某个镜像的所有版本时非常有用,不过可能会占用较多的存储空间。
  • --disable-content-trust:忽略镜像的校验,默认情况下,Docker 会对下载的镜像进行校验,确保镜像的完整性和安全性。但在某些特殊情况下,我们可能需要忽略校验,比如使用一些未经过官方签名的镜像时。

例如,要拉取最新版本的 nginx 镜像,可以执行:

 

docker pull nginx

如果要拉取特定版本,比如 1.19 版本的 nginx 镜像,则执行:

 

docker pull nginx:1.19

当我们执行拉取命令时,Docker 会首先检查本地是否已经存在该镜像,如果不存在,就会从远程仓库下载。下载过程中,会显示下载的进度和相关信息,让我们清楚地了解下载的状态。

3.4 推送镜像

将本地镜像推送到远程仓库,我们需要使用docker push命令,但在推送之前,必须先登录到远程仓库,就像我们要把东西寄到某个地方,首先要获得这个地方的 “通行证”。登录远程仓库的命令是docker login,执行后会提示输入用户名和密码。登录成功后,就可以使用docker push命令推送镜像了,其基本语法为:

 

docker push [OPTIONS] NAME[:TAG]

其中,OPTIONS是可选参数,NAME是镜像的名称,TAG是镜像的标签。如果不指定TAG,默认会推送latest版本。常见的参数有:

  • --disable-content-trust:忽略镜像的校验,在推送镜像时,也可以选择忽略校验,不过这可能会带来一定的安全风险,所以在正式环境中要谨慎使用。

例如,我们要将本地的一个名为myapp:v1.0的镜像推送到 Docker Hub 上,首先登录:

 

docker login

输入用户名和密码登录成功后,执行推送命令:

 

docker push myapp:v1.0

推送过程中,会显示推送的进度和相关信息。如果推送成功,我们就可以在远程仓库中看到这个镜像了,这样其他人也可以从远程仓库拉取这个镜像来使用。

3.5 删除镜像

当我们不再需要某个本地镜像时,可以使用docker rmi命令将其删除,它就像是一个 “镜像清理工”,帮助我们释放磁盘空间,保持本地镜像仓库的整洁。其基本语法为:

 

docker rmi [OPTIONS] IMAGE [IMAGE...]

其中,OPTIONS是可选参数,IMAGE是要删除的镜像,可以是镜像 ID、镜像名或镜像名:标签的形式。常见的参数有:

  • -f, --force:强制删除镜像,即使该镜像被一个或多个容器使用。有时候,我们想要删除的镜像可能正在被容器使用,如果直接删除会报错,这时使用-f参数就可以强制删除。但要注意,强制删除可能会导致正在运行的容器出现问题,所以在使用时要谨慎。
  • --no-prune:不移除该镜像的过程镜像,默认情况下,删除镜像时会同时移除相关的过程镜像,使用这个参数可以保留过程镜像。

例如,要删除名为myapp:v1.0的镜像,可以执行:

 

docker rmi myapp:v1.0

如果要删除所有镜像,可以使用以下命令:

 

docker rmi -f $(docker images -qa)

这里的$(docker images -qa)会列出所有本地镜像的 ID,然后-f参数强制删除这些镜像。在执行删除所有镜像的命令时要特别小心,确保确实不再需要这些镜像,以免误删重要的镜像。

相关文章:

Docker 常用命令基础详解(一)

一、Docker 初相识 在当今数字化时代&#xff0c;软件开发和部署的效率与灵活性成为了关键因素。Docker&#xff0c;作为一款开源的应用容器引擎&#xff0c;犹如一颗璀璨的明星&#xff0c;照亮了软件开发与部署的道路&#xff0c;为开发者们带来了前所未有的便利。它就像是一…...

Java并发中的CAS机制:原理、应用与挑战(通俗易懂版)

上一期文章内容&#xff1a;Java并发中的乐观锁与悲观锁&#xff0c; 本期文章我们来讲一下Java并发中的CAS机制 一、从银行账户案例理解CAS CAS 是一种乐观锁机制&#xff0c;用于在不使用锁的情况下实现多线程对共享资源的并发访问。 它包含三个操作数&#xff1a;内存位置&a…...

腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型

在之前的文章中已经和大家介绍过腾讯HunYuan-3D 1.0&#xff0c;感兴趣的小伙伴可以点击下面链接阅读~ HunYuan-3D 是首个开源高质3D-DiT生成大模型&#xff0c;几何与纹理解藕生成&#xff0c;一键将创意具象化。 2.0模型架构图及介绍 2.0模型将几何和纹理生成解耦&#xff0…...

【机器学习】线性回归与一元线性回归

线性回归与一元线性回归 V1.1线性回归问题线性方程的最优解一元线性回归一元线性回归的方程一元线性回归距离衡量方法一元线性回归的最优化求解一元线性回归的最小二乘法解法 V1.1 线性回归问题 线性回归问题就是找一条线或超平面&#xff0c;并使用线或超平面来描述数据分布…...

哈希表-两个数的交集

代码随想录-刷题笔记 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 内容: 集合的使用 , 重复的数剔除掉&#xff0c;剩下的即为交集&#xff0c;最后加入数组即可。 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer…...

望远镜成像系统--科学评价光学镜头

望远镜是一种利用透镜或反射镜以及其他光学器件观测遥远物体的光学仪器。其原理是通过透镜的折射或反射镜的反射&#xff0c;将光线聚焦成像&#xff0c;再经过一个放大目镜进行观察。日常生活中的光学望远镜又称“天文望远镜”。1608年&#xff0c;荷兰的一位眼镜商汉斯利伯希…...

服务器延迟给视频网站造成的影响

在数字化时代中&#xff0c;网络视频已经成为人们日常娱乐和获取信息的重要平台&#xff0c;网络视频的流畅性会影响着用户的体验度&#xff0c;那么&#xff0c;当服务器出现延迟会对视频网站造成哪些影响呢&#xff1f;本文就来共同了解一下吧&#xff01; 当所使用的服务器由…...

C++算法竞赛基础语法-9

快速排序是一种高效的排序算法&#xff0c;由C. A. R. Hoare在1960年提出&#xff0c;基本思想是分治法&#xff08;Divide and Conquer&#xff09;策略&#xff0c;通过递归将一个大问题分解为若干个较小的子问题&#xff0c;然后合并这些子问题的解来解决原始问题 快速排序…...

国产编辑器EverEdit - 极简追梦人的福音:迷你查找

1 迷你查找 1.1 应用场景 某些场景下&#xff0c;用户不希望调出复杂的查找对话框&#xff0c;此时可以使用迷你查找窗口。 1.2 使用方法 选择主菜单查找 -> 迷你查找&#xff0c;或使用快捷键Ctrl Alt F&#xff0c;会在右上角弹出迷你查找窗口&#xff0c;如下图所示…...

Flutter 异步编程利器:Future 与 Stream 深度解析

目录 一、Future&#xff1a;处理单次异步操作 1. 概念解读 2. 使用场景 3. 基本用法 3.1 创建 Future 3.2 使用 then 消费 Future 3.3 特性 二、Stream&#xff1a;处理连续异步事件流 1. 概念解读 2. 使用场景 3. 基本用法 3.1 创建 Stream 3.2 监听 Stream 3.…...

数据结构 day05

数据结构 day05 5. 队列5.3. 链式队列5.3.1. 特征5.3.2. 代码实现 6. 双向链表6.1. 特性6.2. 代码实现 5. 队列 5.3. 链式队列 5.3.1. 特征 逻辑结构&#xff1a;线性结构 存储结构&#xff1a;链式存储 操作&#xff1a;创建、入列、出列、判空、清空 5.3.2. 代码实现 头文…...

股票数据接口API实例代码python、JAVA等多种语言演示免费获取实时数据、历史数据、CDMA、KDJ等指标数据配有API说明文档

​ 本文中所有接口均可直接在浏览器打开获取数据&#xff0c;为了便于大家验证有效性&#xff0c;已经做好了超链接&#xff0c;直接点击即可&#xff01; 沪深两市股票列表 API接口链接&#xff08;可点击验证&#xff09;&#xff1a;https://api.mairui.club/hslt/list/b…...

【Map vs Set】:Java数据存储的“双子星”对决

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 &#x1f370;一、搜索 &#x1f36e;1.概念 &#x1f36e;2.模型 &#x1f370;二、Map &#x1f368;1.什么是Map&#xff1f; &#x1f368;2.Map的实例化 &…...

ollama+langchain+deepseek本机跑通大模型

一、部署deepseek Ollama&#xff0c;这是是一个开源的大语言模型平台&#xff0c;它允许用户在本地环境中运行、创建和共享大型语言模型。Ollama提供了丰富的功能和特性&#xff0c;使得用户可以在自己的计算机上轻松地部署和运行大型语言模型。官网&#xff1a;https://ollam…...

03【FreeRTO队列-如何获取任务信息与队列的动静态创建】

一.利用 vTaskList()以及 vTaskGetRunTimeStats()来获取任务的信息 1.现象与开启启用宏 freeRTOSConfig.h //必须启用 #define configUSE_TRACE_FACILITY 1 #define configGENERATE_RUN_TIME_STATS 1 #define configUSE_STATS_FORMATTING_FUNCTIONS…...

vue-plugin-hiprint (vue2

页面效果 <template><div><div class="d-flex flex-column mt5"><div class="d-flex flex-row " style="margin-bottom: 10px;justify-content: center;"><!-- 纸张大小 A3、A4 等 --><div class="paper…...

【后端面试总结】什么是堆,什么是栈

堆与栈&#xff1a;计算机科学中的两大内存管理利器 在计算机科学中&#xff0c;内存管理是软件开发的核心组成部分之一。其中&#xff0c;堆&#xff08;Heap&#xff09;和栈&#xff08;Stack&#xff09;是两种最基本的内存分配方式&#xff0c;它们各自有着独特的特性和应…...

第39周:猫狗识别 2(Tensorflow实战第九周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 5.1 上次程序的主要Bug 5.2 修改版…...

力扣--239.滑动窗口最大值

问题 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], …...

傅里叶变换推导

基本模型 假设在二维直角坐标系中&#xff0c;可以用相互垂直的基向量和表示&#xff1a; 假设&#xff1a; 假设在上的投影为&#xff0c;那么&#xff1a; 所以&#xff1a; 用公式表达&#xff1a; 但是在实际中&#xff0c;基向量和不一定长度都是1&#xff0c;重新推导一…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...