Docker概念详解
文章目录
- 一、Docker:容器化应用的基石
- 1.1 环境
- 1.2 Docker 是什么
- 1.3 Docker镜像
- 1.3.1 基础镜像(Base Image)
- 1.3.2 Dockerfile
- 1.3.3 容器镜像(Container Image)
- 1.4 Registry
- 1.5 容器
- 1.6 Docker VS 虚拟机
- 二、Docker 的架构原理
- 2.1 C/S软件架构
- 2.2 docker 命令
- 2.2.1 docker build
- 2.2.2 docker pull/push
- 2.2.3 docker run
- 三、Docker部署工具
- 3.1 Docker Compose :多容器部署
- 3.2 Docker Swarm :集群部署
- 3.3 Kubernetes :开源的容器编排平台
- 四、总结
- 全文参考《Docker 是什么?》
- golang全栈指南:
一、Docker:容器化应用的基石
1.1 环境
我们经常能听到程序员说"这个程序在我环境里明明是好的啊,怎么到你这就不行了呢"?注意这里的关键词,程序和环境。程序是跑在操作系统上的,而操作系统上又装了各种不同版本的依赖库和配置,这些被程序所依赖的信息,我们统称为"环境"。
作为一个程序员,如果你想安装一个 vim
文本编辑器,在不同环境里你得执行不同的命令。在 ubuntu,你需要执行 apt-get install vim
,在 centos 里,你需要执行 yum install vim
。装个小软件尚且如此,要是你想将自己写的代码部署到各个不同操作系统的服务器上,那依赖的软件和配置就更多了,需要针对每个环境单独写一套部署脚本,太麻烦了。
1.2 Docker 是什么
Docker 是一种开源的容器化平台,它允许开发者将应用程序及其依赖的环境打包到一个独立的容器中,作为代码和操作系统之间的中间层。
Docker 有三大核心组件,分别是镜像(Image)、容器(Container)和仓库(Repository):
- Docker 镜像:是一个只读的模板,用于创建 Docker 容器。它包含了容器运行所需的代码、运行时环境、库、环境变量和配置文件等。
- 容器:镜像的可写运行实例,它包含了运行应用程序所需要的一切,包括代码、运行时、系统工具、系统库等。容器通过镜像创建,可以被启动、停止、删除等。
- Docker 仓库:存储和分发镜像的场所,分为公共仓库(Docker Hub)和私有仓库。
1.3 Docker镜像
1.3.1 基础镜像(Base Image)
容器是一个轻量级、可移植的执行环境,它与宿主机共享内核,但拥有独立的用户空间。通过 Docker,开发者可以在不同的操作系统和环境中一致地部署和运行应用程序,从而解决了“在我的机器上可以运行”的问题。
既然上面提到环境不同,会导致程序运行结果不同,那么我们首先要做的最重要的事情,就是统一环境。而环境中,最最重要的就是操作系统。比如 centos 还是 ubuntu,我们得选一个,让所有程序都跑在同一个操作系统上。操作系统分为用户空间和内核空间,应用程序运行在用户空间。因此,我们可以阉割操作系统,只需要利用操作系统的用户空间部分,就能构建出应用所需的环境。
其次就是统一程序语言依赖,比如要跑 python 应用,你得装个 python 解释器,要跑个 java 应用,得装个 JVM,要跑 go 应用,那就。。什么都不需要装。选中一个基础操作系统和语言后,我们将它们对应的文件系统,依赖库,配置等放一起打包成一个类似压缩包的文件,这就是所谓的基础镜像(Base Image)。
1.3.2 Dockerfile
Dockerfile 是一个文本文件,它包含了一系列指令,定义了如何构建容器镜像。
有了基础镜像之后还不够,我们经常还需要安装一些依赖,比如yum install gcc
,甚至还要创建一些文件夹。最后才是运行我们的目标应用程序。
Linux 中,所有工作都可以通过命令行完成,所以我们可以将要做的事情以命令行的形式一行行列出来。就像一份 todo list。意思是要求在基础镜像的基础上按着 todo list 挨个执行命令。这份 todo list 长下面这样。
# 指定基础镜像
FROM python:3.9# 设置工作目录
WORKDIR /app# 复制依赖文件到容器中
COPY requirements.txt .RUN yum install gcc
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt# 将当前目录下的所有文件复制到容器的 /app 目录下
COPY . /app# 设置容器启动时执行的命令
CMD ["python", "app.py"]
具体含义是,基于一个装了 python3.9 解释器的操作系统(基础镜像),再执行 pip install 等命令安装其他依赖,从而构建出一个适合程序运行的环境,最后用
python app.py
运行我们的目标应用程序。
像这样一份列清楚了,从操作系统到应用服务启动,需要做哪些事情的清单文件(todo list),就是所谓的 Dockerfile。通过 Dockerfile,开发者可以清晰地描述应用程序的构建过程,确保每次构建的镜像都是一致的。
1.3.3 容器镜像(Container Image)
Dockerfile 只是描述了要做哪些事情,并没有真正开始做。当我们用命令行执行 docker build 的时候,Docker 软件就会按着 Dockerfile 的说明,一行行构建环境+应用程序。最终将这个环境+程序,打包成一个类似"压缩包"的东西,我们叫它容器镜像(container image)。
只要将容器镜像传到任意一台服务器上,对这个"压缩包"执行"解压缩",我们就能同时运行环境和程序。太完美了!但是现在还有个问题,怎么将容器镜像传到那么多服务器上呢?
1.4 Registry
服务器那么多,挨个将容器镜像传过去也不是不行,就是将压力全给到发送方的网络带宽了。有没有更好的解决方案?有。可以参考 github
代码仓库 的做法,我们通常会使用 git push
将代码传到 github,有需要的人自己通过 git pull
的方式将代码从 github 拉到自己的机器上。
那 Docker 也一样,弄一个镜像仓库,通过 docker push 将镜像推到仓库,有需要的时候再通过 docker pull 将镜像拉到机器上。这个负责管理镜像仓库推拉能力的服务,就叫 Docker Registry。
基于 Docker Registry 的能力,我们可以搭建各种官方或私人镜像仓库,比如官方的叫 DockerHub,非官方的有清华大学的 Tuna 等等,一般公司内部也会有自己的镜像仓库。
1.5 容器
现在,我们解决了服务器间传输容器镜像的问题。我们可以跑到目的服务器上,执行 docker pull 拿到容器镜像。然后执行 docker run 命令,将这个类似"压缩包"的容器镜像给"解压缩",获得一个独立的环境和应用程序并运行起来。这样一个独立的环境和应用程序,就是所谓的容器(container)。我们可以在一个操作系统上同时跑多个容器。且这些容器之间都是互相独立,互相隔离的。
- 隔离性 :容器之间相互隔离,每个容器都有自己独立的文件系统、进程空间和网络空间,不会互相干扰。这保证了应用程序在容器中运行的稳定性和安全性。
- 轻量化 :容器共享宿主机的内核,不需要像虚拟机那样虚拟出一整个硬件环境,因此容器的启动速度非常快,通常只需要几秒钟,并且占用的资源也相对较少。
- 可移植性 :由于容器是基于镜像运行的,而镜像在不同的环境(如开发、测试、生产环境)中都可以保持一致,因此容器可以在任何安装了 Docker 的机器上运行,具有很强的可移植性。
1.6 Docker VS 虚拟机
容器看起来很像我们用 vmware 或 kvm 整出来的传统虚拟机,但不同的是,传统虚拟机自带一个完整操作系统,而容器本身不带完整操作系统。
容器的基础镜像实际上只包含了操作系统的核心依赖库和配置文件等必要组件,它利用一个叫 Namespace 的能力让它看起来就像是一个独立操作系统一样,再利用一个叫 Cgroup 的能力限制它能使用的计算资源。所以说,容器本质上只是个自带独立运行环境的特殊进程,底层用的其实是宿主机的操作系统内核。
二、Docker 的架构原理
2.1 C/S软件架构
现在,我们回到日常使用场景中,聊聊 Docker 的架构原理。它是经典的 Client/Server
架构。Client
对应 Docker-cli
, Server
对应 Docker daemon
。我们在命令行里敲 Docker 命令,使用的就是 Docker-cli.
Docker-cli
会解析我们输入的 cmd 命令,然后调用 Docker daemon
守护进程提供的 RESTful API,守护进程收到命令后,会根据指令创建和管理各个容器。再具体点,Docker Daemon
内部分为 Docker Server,Engine
两层。
Docker Server
:本质上就是个 HTTP 服务,负责对外提供操作容器和镜像的 api 接口,接收到 API 请求后,会分发任务给Engine
层Engine
层:负责创建Job
,由Job
实际执行各种工作。不同的 Docker 命令会执行不同类型的 Job 任务。
2.2 docker 命令
2.2.1 docker build
如果你执行的是 docker build
命令,Job 则会根据 Dockerfile 指令,像包洋葱皮似的一层层构建容器镜像文件。
2.2.2 docker pull/push
如果你执行的是 docker pull
或 push
之类的镜像推拉操作,Job 则会跟外部的 Docker Registry
交互,将镜像上传或下载。
2.2.3 docker run
如果你执行的是 docker run
命令,Job 就会基于镜像文件调用 containerd 组件,驱使 runC 组件创建和运行容器。
现在我们再回过头来看这句话,Docker 本质上就是一个将程序和环境打包并运行的工具软件。具体点来说就是,它通过 Dockerfile 描述环境和应用程序的依赖关系, docker build 构建镜像, docker pull/push 跟 Docker Registry 交互实现存储和分发镜像,docker run 命令基于镜像启动容器,基于容器技术运行程序和它对应的环境,从而解决环境依赖导致的各种问题。
好了,到这里,我们就了解了 Docker 的架构和基本运行原理了。接下来,我们再来聊聊跟 Docker 相关的几个周边。
三、Docker部署工具
3.1 Docker Compose :多容器部署
我们现在知道了 Docker 容器 本身只是一个特殊进程,但如果我想要部署多个容器,且对这些容器的顺序有一定要求呢?比如一个博客系统,当然是先启动数据库,再启动身份验证服务,最后才能启动博客 web 服务。
按理说挨个执行 docker run 命令当然是没问题的,但有没有更优雅的解决方案?有。我们可以通过一个 YAML 文件写清楚要部署的容器有哪些,部署顺序是怎么样的,以及这些容器占用的 cpu 和内存等信息。
version: "3.8"services:A:image: "some-image-for-a"deploy:resources:limits:cpus: "0.50" # 限制 CPU 使用率为 50%memory: 256M # 限制内存使用量为 256MBB:image: "some-image-for-b"depends_on:- AC:image: "some-image-for-c"depends_on:- B
然后,通过一行Docker-compose up
命令,开始解析 YAML 文件,将容器们一键按顺序部署,就完成一整套服务的部署。这其实就是 Docker Compose 干的事情。Docker Compose 使得多容器应用的部署变得简单高效,特别适合开发和测试环境。
3.2 Docker Swarm :集群部署
Docker
:解决的是一个容器的部署。Docker Compose
:解决的是多个容器组成的一整套服务的部署。Docker Swarm
:解决的是这一整套服务在多台服务器上的集群部署问题。
Docker Swarm 是 Docker 官方提供的容器编排工具,用于在多台主机上管理和部署容器集群。它允许开发者将多个 Docker 主机组成一个虚拟的 Docker 环境,从而实现容器的高可用性、弹性伸缩和负载均衡。
在 Docker Swarm 中,容器可以自动在不同的主机之间迁移,当某个主机出现故障时,其他主机可以接管其上的容器,确保应用程序的持续运行。此外,Swarm 还支持服务的扩缩容,可以根据业务需求动态调整容器的数量。
3.3 Kubernetes :开源的容器编排平台
Kubernetes(通常简称为 k8s)是一个开源的容器编排平台,它与 Docker Swarm 的目标类似,都是用于管理和部署容器集群。
-
Docker 是 Kubernetes 的运行时基础
在 Kubernetes 中,容器是应用程序的基本运行单元,而 Docker 容器是 Kubernetes 支持的主要容器运行时之一(除了支持 Docker 的容器外,还支持别人家的容器)。Docker 提供了容器的隔离、打包和分发机制,而 Kubernetes 则在此基础上提供了更高级的编排功能,如服务发现、负载均衡、自动扩缩容等。 -
Pod 与 Docker 容器
Kubernetes 的核心概念是 Pod,Pod 是 Kubernetes 中最小的部署单元,它封装了一个或多个紧密相关的容器。在 Kubernetes 中,一个 Pod 中的容器共享相同的网络命名空间、存储卷等资源,它们可以像一个整体一样被调度和管理。从某种意义上说,Pod 可以被视为一个“超级容器”,它将多个 Docker 容器组(本质上就是一个服务进程)合在一起,形成一个逻辑单元。Docker 容器是 Pod 的组成部分,而 Pod 是 Kubernetes 编排的基本对象。
k8s会在多台 Node 服务器上调度 Pod,进行部署和扩缩容。每个 Pod 内部可以含有多个 container -
Kubernetes 的编排功能
Kubernetes 提供了强大的容器编排功能,它通过一系列的控制器(如 Deployment、StatefulSet、DaemonSet 等)来管理 Pod 的生命周期。这些控制器可以根据预定义的策略自动创建、更新、删除 Pod,并确保应用程序的高可用性和一致性。此外,Kubernetes 还提供了服务发现和负载均衡机制,通过定义 Service 对象,可以将 Pod 暴露为一个网络服务,客户端可以通过 Service 的虚拟 IP 地址访问 Pod 提供的服务。Kubernetes 的自动扩缩容功能可以根据业务负载动态调整 Pod 的数量,从而实现资源的高效利用。 -
对比Docker Compose
Docker Compose 基于多个 container 创建的一整套服务,其实就是 k8s 里的 pod。而 Docker Swarm 做的事情和 k8s 一样,本质上就是在调度 pod。k8s 的官方定义,叫容器编排引擎,将它理解为,以 API 编程的方式管理安排各个容器的引擎。
现在,我们再>回过头来看下 Docker 的图标,是一个个集装箱,放在一艘船上,这一个个集装箱指的就是互相隔离的容器,而 k8s 的图标,则是一个轮船上的方向盘,意思是 k8s 控制着轮船的航向,其实指的就是调度容器。这波联想就非常形象了,现在大家通了吗?
四、总结
-
Docker 本质上就是一个将程序和环境打包并运行的工具软件,而 Docker 容器本质上只是个自带独立运行环境的特殊进程,底层用的其实是宿主机的操作系统内核。
-
Docker 软件 通过
Dockerfile
描述环境和应用程序的依赖关系,docker build
构建镜像,docker pull/push
跟Docker Registry
交互实现存储和分发镜像,docker run
命令基于镜像启动容器,基于容器技术运行程序和它对应的环境,从而解决环境依赖导致的各种问题。 -
Docker 解决的是一个容器的部署问题,
Docker Compose
解决的是多个容器组成的一套服务的部署问题,Docker Swarm
解决的是多个容器组成的一套服务在多台服务器上的部署问题,k8s
则是Docker Swarm
的竞品,在更高维度上兼容了 Docker 容器,实现了容器编排调度。
在现代的云原生架构中,Docker 和 Kubernetes 已成为不可或缺的技术,它们为开发和运维团队提供了强大的工具,使得应用程序的开发、部署和管理变得更加高效和可靠。
相关文章:
Docker概念详解
文章目录 一、Docker:容器化应用的基石1.1 环境1.2 Docker 是什么1.3 Docker镜像1.3.1 基础镜像(Base Image)1.3.2 Dockerfile1.3.3 容器镜像(Container Image) 1.4 Registry1.5 容器1.6 Docker VS 虚拟机 二、Docker 的架构原理2.1 C/S软件架…...
CentOS7安装MySQL教程
一、准备阶段 1、更新系统软件包 首先,要确保系统已安装的软件包是最新版本,在终端执行以下命令: sudo yum update -y 2、添加 MySQL 官方 Yum 仓库 下载仓库配置文件(包含GPG公钥):执行以下命令下载 My…...
把dll模块注入到游戏进程的方法_远线程注入
一. 概述 远线程注入是指为要注入的目标进程创建一个远程线程,在远程线程里面加载要注入的目标dll。Windows操作系统提供了跨进程的内存读写机制,这就为各种注入打下了基础。 二. 用到的Windows API函数 创建远程线程的API是CreateRemoteThread,查找msdn,其函数原型如下…...
实践项目开发-hbmV4V20250407-React+Taro多端项目依赖冲突解决方案
ReactTaro多端项目依赖冲突解决方案 问题背景 在开发基于ReactTaro的多端项目时,经常会遇到各种依赖版本冲突问题,特别是当项目同时需要支持小程序、H5和React Native时。本文记录了一个实际项目中遇到的依赖冲突问题及完整解决方案。 环境信息 项目…...
黑苹果win10和macOS双系统
问题:win10系统更新导致原有clover引导损坏,无法通过clover引导进入双系统,每次只能进入win10。 解决办法:使用EasyUEFI管理EFI启动项,将macOS启动项移动至最前,如果没效果还是每次启动都进win10ÿ…...
机器学习-08-推荐算法-案例
总结 本系列是机器学习课程的系列课程,主要介绍机器学习中关联规则 参考 机器学习(三):Apriori算法(算法精讲) Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 23张图&#x…...
数据结构——栈和队列
目录 1.栈(stack) 1.1 模拟实现 1.1.1 定义栈 1.1.2 初始化栈 1.1.3 销毁栈 编辑 1.1.4 入栈----栈顶 编辑 1.1.5 判栈空 1.1.6 出栈——栈顶 编辑 1.1.7 取栈顶数据 编辑 1.1.8 取栈的有效数据个数 编辑 2.队列(…...
负载均衡与实时调度—LSF
文章目录 一、什么是LSF二、常用LSF作业命令2.1、提交作业-bsub2.2、查询作业-bjobs2.3、杀死作业-bkill2.4、查询队列-bqueues一、什么是LSF LSF(Load Sharing Facility),负载均衡设施,是一款分布式系统资源管理工具,LSF通过需求收集、分析负载、实时调度,使用户充分共享…...
[预备知识]2. PyTorch基本操作
PyTorch基本操作 本章节介绍 PyTorch 的基本操作,包括张量创建、数学运算和常用函数的使用方法。 1. 张量操作 1.1 张量创建 张量是PyTorch的核心数据结构,可表示为: 标量: x ∈ R x \in \mathbb{R} x∈R向量: x …...
音视频学习(三十五):aud
概念 AUD(Access Unit Delimiter)访问单元分隔符 AUD 是在视频编码(特别是 H.264/AVC)中定义的一种 NALU(网络抽象层单元) 类型,用于指示视频流中一帧(访问单元)的边界。…...
【Unity笔记】Unity音视频播放监听器封装笔记:VideoPlayer + AudioSource事件触发与编辑器扩展
关键点 Unity VideoPlayer 播放结束事件Unity AudioSource 播放检测 Unity音视频播放监听器封装笔记:VideoPlayer AudioSource事件触发与编辑器扩展 在 Unity 的多媒体开发中,我们经常需要监听 VideoPlayer 或 AudioSource 的播放状态,以便…...
使用有界线程池结合信号量限制任务提交速率
以下是使用 BoundedExecutor(有界线程池)结合信号量(Semaphore) 限制任务提交速率的完整代码实现,避免无界队列导致内存溢出: 代码实现 import java.util.concurrent.*;public class BoundedExecutorWithS…...
大数据学习(109)-Impala 和 Hive 之间的 SQL 差异
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
STM32F103_HAL库+寄存器学习笔记19 - CAN发送中断+CAN接收中断+接收所有CAN报文+ringbuffer数据结构
导言 完成本章节的学习后,CAN驱动代码已经具备实战项目的大部分功能,完全可以在工作上使用: CAN发送有串行与中断方式,且三个发送邮箱都使用了;CAN接收用FIFO1的三个邮箱与高效的数据结构ringbuffer。另外,还有接收FI…...
【 Git 全局忽略文件完全指南:配置、规则与最佳实践】
Git 全局忽略文件完全指南:配置、规则与最佳实践 前言 在软件开发过程中,我们经常遇到一些不需要被版本控制系统追踪的文件,例如IDE配置文件、编译生成的中间文件、日志文件等。虽然可以在每个项目中创建.gitignore文件,但对于开…...
RabbitMQ常见面试题回答重点
文章目录 什么是消息队列?为什么需要消息队列消息队列的模型消息队列常见名词如何保证消息不丢失?(可靠性)如何保证消息不重复/业务幂等性如何保证消息有序性如何处理消息堆积消息队列设计为推送还是拉取 / 推拉模式优点无法路由的…...
一文详解opencv-python环境搭建:Mac配置python的cv2开发环境
在计算机视觉领域,OpenCV 作为跨平台的计算机视觉和机器学习软件库,凭借其丰富的功能和稳定的性能,已成为开发者的重要工具之一。而 Python 语言因其简洁的语法和强大的科学计算生态,成为许多开发者调用 OpenCV 功能的首选语言组合…...
Unity打开项目时目标平台被改变
2021年1月20日18:20:32 现象: 我的项目已经是切换到目标平台为Android的项目,每天工作过程中会多次打开关闭该项目,但是总有偶然的几率,会出现打开项目以后,目标平台自动被切换为Windows,然后就开始忙碌于…...
Python 写一个带参数的EXE函数
Python写一个带参数的函数,压成EXE import argparse import time import sysdef main():# 创建参数解析器parser argparse.ArgumentParser(description"命令行参数示例程序")# 添加指定的参数parser.add_argument("-subitem", typestr, requi…...
4月21日星期一今日早报简报微语报早读
4月21日星期一,农历三月廿四,早报#微语早读。 1、女子伸腿阻止列车关门等待同行人员,被深圳铁路警方行政拘留; 2、北理工再通报:开除宫某党籍,免去行政职务,解除聘用关系; 3、澳门…...
2025年最新服务器、中间件安全(面试题)
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
《FDTD Solutions仿真全面教程:超构表面与光束操控的前沿探索》
FDTD基础入门FDTD基础入门 1、FDTD Solutions 求解物理问题的方法 1.1 FDTD与麦克斯韦方程 1.2 FDTD中的网格化 2、FDTD Solutions 特点与应用 3、FDTD功能与使用主窗口——CAD人机交互界面 计算机辅助设计(CAD)模拟编辑器:主标题栏、工具条、实体对象树…...
AI时代,是该切换到Cursor编辑器了
Cursor 使用指南:从入门到高效编程 一、Cursor 简介 Cursor 是一款基于人工智能技术的先进代码编辑器,它致力于为开发者打造更高效、智能的编程环境。通过集成前沿的自然语言处理(NLP)和代码生成技术,Cursor 能够精准…...
在 UE5 编辑器中,由于游戏设置 -> EV100 设置,点击播放前后的光照不同。如何保持点击播放前后的光照一致?
In Unreal Engine 5 (UE5), discrepancies in lighting between the editor and play modes are often due to auto exposure settings, particularly when using the EV100 system. To maintain consistent lighting across both modes, follow these steps:YouTube1Epic …...
【Linux网络编程十】网络原理之IP协议【网络层】
网络原理之IP协议【网络层】 1.理解IP协议2.IP报文2.1分片问题 3.路由器3.1路由问题 4.网络划分5.私有ip与公有ip6.理解运营商与全球网络7.NAT技术7.1NAPT 1.理解IP协议 IP协议的本质工作:提供一种能将数据跨网络从A主机送到B主机的能力。 而用户需要的是能够可靠的…...
C++23 让 Lambda 表达式中的 () 更可选:P1102R2 提案深度解析
文章目录 一、背景与动机:Lambda 表达式中的痛点1.1 问题的根源 二、P1102R2 提案:让 () 可选2.1 提案的核心内容2.2 语法调整的细节2.3 提案的合理性 三、编译器支持:主流编译器的跟进四、对 C 编程的影响:简化语法与提升一致性4…...
国产AI新突破!全球首款无限时长电影生成模型SkyReels-V2开源:AI视频进入长镜头时代!
在 AI 技术日新月异的今天,我们再次见证了历史性的突破。 昆仑万维 SkyReels 团队于近日正式发布了全球首款支持无限时长的电影生成模型——SkyReels-V2,并免费开源。这无疑为 AI 视频领域掀开了崭新的一页,标志着 AI 视频正式迈入长镜头时代…...
如何以特殊工艺攻克超薄电路板制造难题?
一、超薄PCB的行业定义与核心挑战 超薄PCB通常指厚度低于1.0毫米的电路板,而高端产品可进一步压缩至0.4毫米甚至0.2毫米以下。这类电路板因体积小、重量轻、热传导性能优异,被广泛应用于折叠屏手机、智能穿戴设备、医疗植入器械及新能源汽车等领域。然而…...
VScode-py环境
settings.json {"git.ignoreLimitWarning": true,"code-runner.runInTerminal": true,"code-runner.executorMap": {"python": "python3"} } 第二句话保证在终端里面进行IO 第三句话保证python3的用户不会执行python关键…...
4.21 从0开始配置spark-local模式
首先准备好安装包 然后使用命令解压 使用source /etc/profile命令让环境变量生效 输入命令 spark-submit --class org.apache.spark.examples.SparkPi --master local[2] /opt/module/spark-local/examples/jars/spark-examples_2.12-3.1.1.jar 10 即在spark运行了第一个程序…...
git详解
目录 常用命令速查 一、Git 的概念与作用 二、Git 仓库(Repository) 1. 本地仓库 2. 远程仓库 三、Git 的三个核心区域 1. 工作区(Working Directory) 2. 暂存区(Staging Area / Index) 3. 版本库…...
I/O复用函数的使用——select
I/O复用函数的使用——select 目录 一、概念 二、select接口 2.1 基础概念 2.2 使用 select 函数的标准输入读取代码 2.3 基于 select 模型的多客户端 TCP 服务器实现 一、概念 i/o复用使得程序能同时监听多个文件描述符,可以提高程序性能。 之前为了让服务器能…...
LangChain与图数据库Neo4j LLMGraphTransformer融合:医疗辅助诊断、金融风控领域垂直领域、法律咨询场景问答系统的技术实践
LangChain与图数据库融合:垂直领域问答系统的技术实践 一、技术背景与核心价值 在垂直领域(如金融、医疗、法律)的问答场景中,传统RAG系统常面临实体关系推理不足和专业术语理解偏差的痛点。LangChain通过集成图数据库与知识图谱…...
Trae国际版的下载与简单使用示例(免费使用Claude,GPT4.1等多个高级模型)
文章目录 Trae的下载与使用什么是Trae重要亮点Trae的核心功能主要特点 安装指南下载步骤系统要求安装步骤 基础操作代码补全代码生成代码解释 高级功能自定义设置 总结参考资料 Trae的下载与使用 什么是Trae Trae是一款先进的AI编程助手工具,专为开发者打造。它集…...
Python 金融量化分析
文章目录 1. IPython:交互式的 Python 命令行安装常用操作IPython Notebook 2. NumPy:数据计算模块主要功能安装与导入创建 ndarrayndarray 的常用属性示例代码常用创建函数示例代码 3. NumPy 索引和切片数组运算数组索引和切片布尔型索引花式索引通用函…...
Linux:进程:进程控制
进程创建 在Linux中我们使用fork函数创建新进程: fork函数 fork函数是Linux中的一个系统调用,用于创建一个新的进程,创建的新进程是原来进程的子进程 返回值:如果子进程创建失败,返回值是-1。如果子进程创建成功&a…...
量子计算在金融领域的应用与展望
在当今数字化时代,金融行业正面临着前所未有的技术变革。量子计算作为前沿科技领域的明珠,正在逐渐从实验室走向实际应用,为金融行业带来新的机遇和挑战。本文将探讨量子计算在金融领域的应用现状、优势以及未来的发展展望。 一、量子计算简介…...
StarRocks:一款开源的高性能分析型数据仓库
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO(基于成本优化)、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。 StarRocks 是一个 Linux 基金会开源项目,采用 Apache 2.0 许…...
NLP高频面试题(四十九)大模型RAG常见面试题解析
为什么要构建RAG系统? RAG系统通过结合信息检索和生成模型,解决了LLM在知识更新、幻觉和上下文限制等方面的挑战。它允许模型在生成响应前引用外部知识库,提高答案的准确性和相关性。 RAG与大模型微调的区别? 项目RAG系统大模型微调知识更新通过更新外部知识库实现需要重…...
【NLP 68、R-BERT】
为什么划掉你的名字,为什么不敢与你对视 —— 25.4.21 一、R-BERT:基于BERT的关系抽取模型 R-BERT(Relation BERT)是一种用于关系抽取(Relation Extraction)任务的模型,它结合了预训练语言模型…...
Java:多线程
多线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 并发和并行 并发:在同一时刻,有多个指令在单个CPU上交替执行 并行:在同一时刻,有多个指令在多个CPU上同时执行 …...
第一章:自然语言处理
目录 1.1 自然语言处理发展史 1.2 统计语言模型发展史 统计语言模型 NNLM 模型 Word2Vec 模型 ELMo 模型 BERT 模型 大语言模型 1.3 小结 自然语言处理(Natural Language Processing,NLP)是一门借助计算机技术研究人类语言的科学。虽…...
Git 大文件使用 Git-LFS 管理,推送失败
配置了.gitattributes文件后, *.jar filterlfs difflfs mergelfs -text *.so filterlfs difflfs mergelfs -text *.aar filterlfs difflfs mergelfs -text *.bin filterlfs difflfs mergelfs -text *.a filterlfs difflfs mergelfs -text 仍然推送失败 POST git-…...
[c语言日寄]免费文档生成器——Doxygen在c语言程序中的使用
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
RK3588上编译opencv 及基于c++实现图像的读入
参考博文: https://blog.csdn.net/qq_47432746/article/details/147203889 一、安装依赖包 sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpe…...
C++ GPU并行计算开发实战:利用CUDA/OpenCL加速粒子系统与流体模拟
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
Java 设计模式心法之第3篇 - 总纲:三大流派与导航地图
前两章,我们修炼了 SOLID 这套强大的“内功心法”,为构建高质量软件打下了坚实根基。现在,是时候鸟瞰整个设计模式的“武林”了!本文将为您展开一幅由 GoF 四人帮精心绘制的 23 种经典设计模式的“全景导航地图”。我们将探索这些…...
高级java每日一道面试题-2025年4月19日-微服务篇[Nacos篇]-Nacos未来的发展方向和规划有哪些?
如果有遗漏,评论区告诉我进行补充 面试官: Nacos未来的发展方向和规划有哪些? 我回答: Nacos 作为阿里巴巴开源的服务发现、配置管理和服务治理平台,其未来的发展方向和规划主要体现在以下几个关键领域: 1. 安全性与标准化 API分类精细化…...
跳过reCAPTCHA验证的技术解析与优化实践
Google的reCAPTCHA验证系统已成为保护网站安全的核心工具之一。然而,频繁的验证弹窗可能降低用户体验,甚至导致用户流失。如何在遵守平台规则的前提下,通过技术优化与用户行为管理减少验证触发率,成为我们亟需解决的难题。 但需要…...
idea使用docker插件一键部署项目
一、首先保证我们电脑上已经安装了docker docker -v查看docker版本,如果不能识别,需要先下载docker destop,在官网下载正常安装即可。 安装成功就可以使用docker 命令了 二、idea下载docker插件并配置docker参数 我是通过tcp连接docker服务…...