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

Docker基础入门:容器化技术详解

Docker基础入门:容器化技术详解

1. Docker简介

Docker是一个开源的容器化平台,它允许开发者将应用及其依赖打包到一个可移植的容器中,从而确保应用在不同环境中的一致运行。Docker于2013年发布,迅速成为软件开发领域的革命性工具,解决了传统开发中"在我的机器上能运行"的经典问题。

1.1 Docker的核心理念

Docker的核心理念是"构建一次,随处运行"。它通过容器技术实现了应用的标准化部署,无论底层系统如何定制,容器化的应用都能保持一致的行为。这极大地简化了应用的交付和部署过程,提高了开发和运维的效率。

1.2 Docker与虚拟机的区别

Docker容器与传统的虚拟机有本质区别:

特性Docker容器虚拟机
启动时间秒级分钟级
资源占用轻量级,共享主机内核重量级,每个VM都有完整的OS
隔离级别进程级隔离硬件级隔离
性能接近原生有一定损耗
存储空间MB级别GB级别

Docker容器共享主机的内核,但在用户空间是隔离的,这使得容器比虚拟机更加轻量和高效。一台服务器上可以同时运行数十甚至数百个Docker容器,而同等资源可能只能运行几个虚拟机。

2. Docker的核心组件

Docker平台包含了多个关键组件,共同构成了Docker的生态系统。

2.1 Docker引擎(Docker Engine)

Docker引擎是Docker平台的核心,它包括:

  • Docker守护进程(dockerd):负责监听Docker API请求并管理Docker对象(镜像、容器、网络和卷)
  • Docker客户端(docker):用户通过命令行与Docker进行交互的主要工具
  • Docker API:提供程序与Docker守护进程通信的接口

Docker引擎采用客户端-服务器架构,Docker守护进程和客户端可以在同一系统上运行,也可以通过REST API跨网络通信。

2.2 Docker Desktop

Docker Desktop是一个易于安装的应用程序,适用于Mac、Windows或Linux环境,它包含Docker守护程序、Docker客户端、Docker Compose等多个组件,使开发人员能够轻松开始使用Docker。

2.3 Docker注册表(Registry)

Docker注册表用于存储Docker镜像。Docker Hub是一个公共注册表,任何人都可以使用,Docker默认从Docker Hub查找镜像。企业也可以运行自己的私有注册表。

3. Docker的核心概念

3.1 容器(Container)

容器是Docker的核心概念,它是镜像的可运行实例。容器具有以下特点:

  • 自包含:每个容器包含运行应用所需的一切,不依赖于主机上预先安装的依赖项
  • 隔离:容器在隔离环境中运行,对主机和其他容器的影响最小,提高了应用的安全性
  • 独立:每个容器独立管理,删除一个容器不会影响其他容器
  • 可移植:容器可以在任何地方运行,从开发机器到数据中心或云环境,行为保持一致

容器相当于一个轻量级、隔离的运行环境,它包含了应用程序及其所有依赖,但共享主机的操作系统内核。

3.2 镜像(Image)

Docker镜像是用于创建容器的只读模板。镜像包含了应用程序代码及其所有依赖项,是容器的基础。

镜像具有以下特性:

  • 分层结构:镜像由多个层(layers)组成,每个层代表Dockerfile中的一条指令
  • 共享层:不同镜像可以共享相同的基础层,节省存储空间并提高性能
  • 版本控制:可以使用标签(tags)对镜像进行版本控制
  • 不可变性:镜像一旦创建就不可更改,确保了应用环境的一致性

当你运行一个容器时,Docker会在镜像的顶部添加一个可写层,允许容器在运行时修改文件,而不影响底层只读镜像。

3.3 Dockerfile

Dockerfile是一个文本文件,包含构建Docker镜像的指令。它指定了基础镜像、依赖项和构建镜像所需的命令。

一个基本的Dockerfile示例:

# 使用官方Node.js镜像作为基础镜像
FROM node:14# 设置工作目录
WORKDIR /app# 复制package.json和package-lock.json
COPY package*.json ./# 安装依赖
RUN npm install# 复制应用程序代码
COPY . .# 暴露端口
EXPOSE 3000# 启动应用程序
CMD ["npm", "start"]

3.4 Docker Compose

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它使用YAML文件来配置应用程序的服务、网络和卷。

一个简单的docker-compose.yml示例:

version: '3'
services:web:build: .ports:- "3000:3000"depends_on:- dbdb:image: mongovolumes:- mongo-data:/data/db
volumes:mongo-data:

Docker Compose简化了多容器应用的管理,特别适合开发和测试环境。

4. Docker基本操作

4.1 安装Docker

Docker提供了适用于不同操作系统的安装包:

  • Linux:可以通过包管理器安装,如apt、yum等
  • Windows:安装Docker Desktop for Windows
  • Mac:安装Docker Desktop for Mac

安装完成后,可以运行以下命令验证安装:

docker --version
docker run hello-world

4.2 Docker镜像管理

4.2.1 查找镜像
docker search ubuntu
4.2.2 拉取镜像
docker pull ubuntu:20.04
4.2.3 列出本地镜像
docker images
4.2.4 构建镜像
docker build -t myapp:1.0 .
4.2.5 推送镜像到注册表
docker push username/myapp:1.0

4.3 容器管理

4.3.1 创建并启动容器
docker run -d -p 80:80 --name webserver nginx

该命令会:

  • 以分离模式(-d)运行容器
  • 将宿主机的80端口映射到容器的80端口(-p 80:80)
  • 将容器命名为webserver
  • 使用nginx镜像
4.3.2 查看运行中的容器
docker ps
4.3.3 查看所有容器(包括已停止的)
docker ps -a
4.3.4 停止容器
docker stop webserver
4.3.5 启动停止的容器
docker start webserver
4.3.6 删除容器
docker rm webserver
4.3.7 查看容器日志
docker logs webserver
4.3.8 进入容器内部
docker exec -it webserver bash

5. Docker网络

Docker提供了多种网络模式,以支持容器之间以及容器与外部网络之间的通信。

5.1 网络类型

  • 桥接网络(Bridge):默认模式,容器连接到宿主机上的私有内部网络
  • 主机网络(Host):移除容器与Docker主机之间的网络隔离,直接使用主机网络
  • 空网络(None):禁用容器的所有网络
  • 覆盖网络(Overlay):允许Swarm服务在多个节点之间通信
  • Macvlan:为每个容器分配MAC地址,使其在网络上显示为物理设备

5.2 网络命令

5.2.1 创建网络
docker network create mynetwork
5.2.2 列出网络
docker network ls
5.2.3 将容器连接到网络
docker run -d --network=mynetwork --name=myapp nginx
5.2.4 检查网络
docker network inspect mynetwork

6. Docker数据管理

Docker提供了多种方式来管理容器数据的持久化。

6.1 卷(Volumes)

卷是Docker管理的宿主机文件系统的一部分,由Docker创建和管理,提供了最好的数据持久化方案。

# 创建卷
docker volume create mydata# 使用卷启动容器
docker run -d -v mydata:/data --name myapp nginx

6.2 绑定挂载(Bind Mounts)

绑定挂载将宿主机上的特定路径直接挂载到容器中。

docker run -d -v /host/path:/container/path --name myapp nginx

6.3 临时文件系统(tmpfs)

tmpfs挂载存储在宿主机的内存中,不会写入宿主机的文件系统。

docker run -d --tmpfs /tmp --name myapp nginx

7. Docker Compose实战

Docker Compose使用YAML文件定义多容器应用,简化了复杂应用的部署和管理。

7.1 安装Docker Compose

在大多数平台上,Docker Compose已经包含在Docker Desktop安装包中。如果需要单独安装:

# Linux
sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

7.2 Docker Compose示例:Web应用 + 数据库

创建一个docker-compose.yml文件:

version: '3'
services:web:image: nginx:latestports:- "8080:80"volumes:- ./website:/usr/share/nginx/htmldepends_on:- dbdb:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: webdbMYSQL_USER: webuserMYSQL_PASSWORD: webpass
volumes:db_data:

7.3 Docker Compose命令

# 启动所有服务
docker-compose up -d# 查看服务状态
docker-compose ps# 查看服务日志
docker-compose logs# 停止服务
docker-compose down# 重新构建服务
docker-compose build

8. Docker最佳实践

8.1 镜像构建最佳实践

  1. 使用官方基础镜像:优先使用官方维护的基础镜像,如alpine版本以减小尺寸
  2. 减少层数:合并RUN命令以减少层数
  3. 利用构建缓存:合理排序Dockerfile指令以最大化缓存利用
  4. 使用.dockerignore:排除不需要的文件,减小构建上下文
  5. 多阶段构建:使用多阶段构建减小最终镜像大小

8.2 安全最佳实践

  1. 避免使用root用户:在Dockerfile中使用USER指令指定非root用户
  2. 扫描镜像漏洞:使用工具如Trivy、Clair扫描镜像安全漏洞
  3. 使用特定版本标签:避免使用latest标签,使用特定版本控制变更
  4. 限制容器资源:使用资源限制防止单个容器消耗过多资源
  5. 定期更新基础镜像:保持基础镜像更新以获取安全补丁

8.3 性能优化

  1. 使用Alpine基础镜像:尽可能使用Alpine Linux基础镜像减小尺寸
  2. 清理不必要的依赖:在安装后清理包管理器缓存
  3. 优化应用配置:根据容器环境优化应用配置
  4. 监控容器性能:使用工具如Prometheus、Grafana监控容器性能

9. Docker的应用场景

Docker在多种场景中表现出色:

9.1 开发环境标准化

Docker容器可以为团队成员提供一致的开发环境,无论他们使用什么操作系统,都能获得相同的开发体验,减少"在我的机器上能跑"的问题。

9.2 持续集成/持续部署(CI/CD)

Docker容器非常适合CI/CD工作流,可以在测试环境中快速创建和销毁一致的环境,加速软件开发周期。

9.3 微服务架构

Docker容器天然适合微服务架构,每个服务可以打包到独立的容器中,便于独立开发、部署和扩展。

9.4 快速扩展和弹性伸缩

容器化应用可以快速启动和停止,结合容器编排工具(如Kubernetes),可以实现应用的自动扩展和负载均衡。

10. 结语

Docker彻底改变了软件开发和部署方式,为开发人员和运维人员提供了一种标准化、高效的应用交付方法。掌握Docker基础知识,将帮助你简化应用开发、测试和部署流程,提高工作效率。

容器化技术正在快速发展,Docker只是这个生态系统的一部分。随着对容器化技术理解的深入,你可以进一步探索Kubernetes等容器编排技术,实现更复杂的容器管理和自动化部署方案。

参考资料

  • Docker官方文档
  • Docker Hub
  • Docker GitHub仓库

相关文章:

Docker基础入门:容器化技术详解

Docker基础入门:容器化技术详解 1. Docker简介 Docker是一个开源的容器化平台,它允许开发者将应用及其依赖打包到一个可移植的容器中,从而确保应用在不同环境中的一致运行。Docker于2013年发布,迅速成为软件开发领域的革命性工具…...

SQL注入的绕过方式

1.注释与空白符绕过 利用#,--,/**/替代被过滤的注释符 利用%09(Tab),%0A(换行) ,/**/代替空格:如union%0Aselect%0A1,2,3 2.编码绕过: URL编码,双重编码,十六进制编码,Unicode编…...

Java 23种设计模式 - 结构型模式7种

Java 23种设计模式 - 结构型模式7种 1 适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 优点 将目标类和适配者类解耦增加了类的透明性和复用性,将具体的实现封…...

Linux快速入门

Linux概述 Linux系统版本 Linux系统分为内核版和发行版 内核版 由Linux核心团队开发、维护 免费、开源 负责控制硬件 发行版 基于Linux内核版进行扩展 由各个Linux厂商开发、维护 有收费版本和免费版本 Linux系统发行版: Ubuntu:以桌面应用为主,免费 …...

了解Hadoop

Hadoop了解 Hadoop 是 Apache 基金会开发的一个开源分布式计算平台,主要用于存储和处理大规模数据集。 它能让用户在不了解分布式系统底层细节的情况下,轻松进行分布式程序的开发,将应用程序自动部署到由大量普通机器组成的集群上进行高效运…...

FPGA:如何提高RTL编码能力?

要提升RTL(寄存器传输级)编码能力,需从硬件设计思维建立、典型电路建模、编码规范掌握、工具链应用和工程实践五个维度系统性训练。以下是具体提升路径: 一、建立硬件设计思维:理解RTL与软件的本质区别 RTL代码最终会…...

高频微服务面试题总结

微服务基础概念 什么是微服务架构? 将单一应用拆分为一组小型服务每个服务运行独立进程,轻量级通信独立开发、部署和扩展特点:松耦合、独立技术栈、独立数据库微服务与单体架构对比 维度单体架构微服务架构开发效率初期快初期慢部署整体部署独立部署扩展性整体扩展细粒度扩展…...

【RAG】Milvus、Pinecone、PgVector向量数据库索引参数优化

Milvus 、PgVector 索引参数优化 IVF类索引关键参数(基于聚类算法) nlist (倒排列表数量): 决定将向量空间划分为多少个聚类中心值越大搜索越精确但耗时越长推荐值: 通常设置为数据量的4√n到n/1000之间例如: 1百万数据量可设nlist1000到4000 nprobe (…...

基金基础知识-指数基金 | 投资理财(4) 【待续】

基金通常是由股票、债券等多种资产组合而成的投资工具​​,核心是分散化,将资金投向一篮子资产(动态),避免单一资产的风险。 按投资标的分类: 基金类型 相当于 特点 适合人群 货币基金 活期钱包&…...

【K8S系列】Kubernetes常用 命令

以下为的 Kubernetes 超全常用命令文档,涵盖集群管理、资源操作、调试排错等核心场景,结合示例与解析, 高效运维 Kubernetes 环境。 一、集群与节点管理 1. 集群信息查看 查看集群基本信息kubectl cluster-info # 显示API Server、DNS等核…...

高性能编程相关

​​​​​​​常见高性能编程技巧: 一,系统级性能优化:从系统架构设计考虑,例如消息队列,模块分成分级,IO读写带宽等 二,算法级性能优化:时间和空间优化 三,代码级性能优…...

使用 NV‑Ingest、Unstructured 和 Elasticsearch 处理非结构化数据

作者:来自 Elastic Ajay Krishnan Gopalan 了解如何使用 NV-Ingest、Unstructured Platform 和 Elasticsearch 为 RAG 应用构建可扩展的非结构化文档数据管道。 Elasticsearch 原生集成了行业领先的生成式 AI 工具和提供商。查看我们的网络研讨会,了解如…...

k8s之statefulset

什么是statefulset(sts) statefulset是用来管理有状态应用的工作负载API对象,也是一种工作负载资源 有状态和无状态 无状态应用:当前应用不会记录状态(网络可能会变、挂载的东西可能会变、顺序可能会变) 有状态应用:需要记录当前状态(网络不变、存储不变、顺序不变) 使…...

在自然语言处理任务中,像 BERT 这样的模型会在输入前自动加上一些特殊token

🌱 1. 什么是 BERT? BERT 是一个自然语言理解模型。你可以把它想象成一个超级聪明的“语言理解机器人”。你把一句话丢进去,它能: 理解这句话的意思;告诉你哪个词是实体(人名、地名)&#xff…...

java学习笔记

Java 方法返回值 Java 是一种强类型语言,方法在定义时必须明确指定返回值的类型。 这确保了类型安全和代码的可预测性. 方法返回值不能缺省。 必须显式声明返回类型. 如果方法没有返回值,需要使用 void 关键字来表示。 void 意味着该方法执行某些操作但不返回任何值。 访问修…...

动态规划--两个数组的dp问题

目录 1 最长公共子序列 2 最长回文子序列 3 不相交的线 4 不同的子序列 5 通配符匹配 6 正则表达式匹配 7 交错字符串 8 两个字符串的最小ASCII删除和 9 最长重复子数组 本文主要讲解两个数组的动态规划问题的几个经典例题,希望看完本文之后能够对大家做这…...

Xcavate 上线 Polkadot |开启 Web3 房地产投资新时代

在传统资产 Tokenization 浪潮中,Xcavate 以房地产为切口迅速崛起。作为 2023 年 OneBlock 冬季波卡黑客松冠军,Xcavate 凭借创新的资产管理与分发机制,在波卡生态中崭露头角。此次主网上线,标志着 Xcavate 正式迈入全球化应用阶段…...

在企业级项目中高效使用 Maven-mvnd

1、引言 1.1 什么是 Maven-mvnd? Maven-mvnd 是 Apache Maven 的一个实验性扩展工具(也称为 mvnd),基于守护进程(daemon)模型构建,目标是显著提升 Maven 构建的速度和效率。它由 Red Hat 推出,通过复用 JVM 进程来减少每次构建时的启动开销。 1.2 为什么企业在构建过…...

[论文阅读]Deeply-Supervised Nets

摘要 我们提出的深度监督网络(DSN)方法在最小化分类误差的同时,使隐藏层的学习过程更加直接和透明。我们尝试通过研究深度网络中的新公式来提升分类性能。我们关注卷积神经网络(CNN)架构中的三个方面:&…...

使用零样本LLM在现实世界环境中推广端到端自动驾驶——论文阅读

《Generalizing End-To-End Autonomous Driving In Real-World Environments Using Zero-Shot LLMs》2024年12月发表,来自纽约stony brook大学、UIC和桑瑞思(数字化医疗科技公司)的论文。 传统的自动驾驶方法采用模块化设计,将任务…...

多视图密集对应学习:细粒度3D分割的自监督革命

原文标题:Multi-view Dense Correspondence Learning (MvDeCor) 引言 在计算机视觉与图形学领域,3D形状分割一直是一个基础且具有挑战性的任务。如何在标注稀缺的情况下,实现对3D模型的细粒度分割?近期,斯坦福大学视觉…...

【论文阅读】——Articulate AnyMesh: Open-Vocabulary 3D Articulated Objects Modeling

文章目录 摘要一、介绍二、相关工作2.1. 铰接对象建模2.2. 部件感知3D生成 三、方法3.1. 概述3.2. 通过VLM助手进行可移动部件分割3.3. 通过几何感知视觉提示的发音估计3.4. 通过随机关节状态进行细化 四、实验4.1. 定量实验发音估计设置: 4.2. 应用程序 五、结论六、思考 摘要…...

Docker Compose 的详细使用总结、常用命令及配置示例

以下是 Docker Compose 的详细使用总结、常用命令及配置示例,帮助您快速掌握这一容器编排工具。 一、Docker Compose 核心概念 定位:用于定义和管理多容器 Docker 应用,通过 YAML 文件配置服务、网络、卷等资源。核心概念: 服务 …...

2025.05.08-得物春招研发岗-第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 矩阵魔法变换 问题描述 A先生是一位著名的魔法师,他最近发明了一种特殊的矩阵魔法。这种魔法可以同时改变矩阵中特定区域内所有元素的值。 A先生有一个 n m n \times m...

【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务:从配置到函数调用全解析

【Spring AI 实战】基于 Docker Model Runner 构建本地化 AI 聊天服务:从配置到函数调用全解析 前沿:本地化 AI 推理的新范式 随着大语言模型(LLM)应用的普及,本地化部署与灵活扩展成为企业级 AI 开发的核心需求。Do…...

【数据机构】2. 线性表之“顺序表”

- 第 96 篇 - Date: 2025 - 05 - 09 Author: 郑龙浩/仟墨 【数据结构 2】 文章目录 数据结构 - 2 -线性表之“顺序表”1 基本概念2 顺序表(一般为数组)① 基本介绍② 分类 (静态与动态)③ 动态顺序表的实现**test.c文件:****SeqList.h文件:****SeqList.c文件:** 数据结构 - 2 …...

Django ORM: values() 和 annotate() 方法详解

1. values()方法 1.1 基本概念 values()方法用于返回一个包含字典的QuerySet,而不是模型实例。每个字典表示一个对象,键对应于模型字段名称。 1.2 基本用法 # 获取所有书籍的标题和出版日期 from myapp.models import Bookbooks Book.objects.value…...

数据结构篇-二叉树

抽象定义CFG文法具体表示基本操作性质 抽象定义 二叉树是一个抽象的数学概念。它的定义是递归的 一棵二叉树可以是一个外部节点,一棵二叉树可以是内部节点,连接到一对二叉树,分别是它的左子树,和右子树。 这个抽象定义描述了二…...

前端面试每日三题 - Day 29

这是我为准备前端/全栈开发工程师面试整理的第29天每日三题练习: ✅ 题目1:Web Components技术全景解析 核心三要素 Custom Elements(自定义元素) class MyButton extends HTMLElement {constructor() {super();this.attachShado…...

Java设计模式之抽象工厂模式:从入门到精通

一、抽象工厂模式概述 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 1.1 专业定义 抽象工厂模式定义了一个工厂接口,用于创建一系列相关或依赖的对象,客户端通过调用抽象工…...

Rust中记录日志:fast_log

在Rust程序中记录日志,可以使用fast_log。 根据fast_log 的介绍,这是一个性能非常高的日志实现,还支持文件追加模式、压缩、切分与回滚等操作。 而且,这个库记录日志是异步的,即不会因为日志而影响程序的运行。只有当…...

构筑芯片行业的“安全硅甲”

在半导体行业,数据就是生命线。一份芯片设计图纸的泄露,可能让企业数亿研发投入付诸东流;一段核心代码的外传,甚至可能影响国家产业安全。然而,现实情况却是——许多芯片企业的数据防护,仍处于“裸奔”状态…...

C++ Dll创建与调用 查看dll函数 MFC 单对话框应用程序(EXE 工程)改为 DLL 工程

C Dll创建 一、添加 DllMain&#xff08;必要&#xff09; #include <fstream>void Log(const char* msg) {std::ofstream f("C:\\temp\\dll_log.txt", std::ios::app);f << msg << std::endl; }BOOL APIENTRY DllMain(HMODULE hModule, DWORD u…...

使用智能表格做FMEDA

一、优点 使用智能表格替代excel做FMEDA具备以下优势&#xff1a; 减少维护成本&#xff08;数据库关联&#xff0c;修改方便&#xff09;便于持续优化&#xff08;失效率分布&#xff0c;失效率模型可重复使用&#xff09;多人同步编写&#xff08;同时操作&#xff0c;同步…...

电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档

电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档 概述 本脚本real_data_model.m基于论文《大规模电动汽车充换电设施可调能力聚合评估与预测》(鲍志远&#xff0c;胡泽春)实现了电动汽车充电设施的负荷预测和可调能力评估。使用混合模型&#xff08;LSTM神经网络线…...

Tomcat 日志体系深度解析:从访问日志配置到错误日志分析的全链路指南

一、Tomcat 核心日志文件架构与核心功能 1. 三大基础日志文件对比&#xff08;权威定义&#xff09; 日志文件数据来源核心功能典型场景catalina.out标准输出 / 错误重定向包含 Tomcat 引擎日志与应用控制台输出&#xff08;System.out/System.err&#xff09;排查 Tomcat 启…...

MSF 生成不同的木马 msfvenom 框架命令

目录 什么是 msfvenom&#xff1f; 一、针对 Windows 的木马生成命令 1. EXE 格式&#xff08;经典可执行文件&#xff09; 2. VBS 脚本&#xff08;Visual Basic Script&#xff09; 3. PowerShell 脚本 4. DLL 文件&#xff08;动态链接库&#xff09; 5. Python 脚本…...

Linux云计算训练营笔记day05(Rocky Linux中的命令:管道操作 |、wc、find、vim)

管道操作 | 作用: 将前面命令的输出&#xff0c;传递给后面命令&#xff0c;作为后面命令的参数 head -3 /etc/passwd | tail -1 取第三行 head -8 /etc/passwd | tail -3 | cat -n 取6 7 8行 ifconfig | head -2 | tail -1 只查看IP地址 ifconfig | grep 192 过滤192的ip…...

【相机标定】OpenCV 相机标定中的重投影误差与角点三维坐标计算详解

摘要&#xff1a; 本文将从以下几个方面展开&#xff0c;结合典型代码深入解析 OpenCV 中的相机标定过程&#xff0c;重点阐述重投影误差的计算方法与实际意义&#xff0c;并通过一个 calcBoardCornerPositions() 函数详细讲解棋盘格角点三维坐标的构建逻辑。 在计算机视觉领域…...

传统销售VS智能销售:AI如何重构商业变现逻辑

如今最会赚钱的企业早就不靠堆人力了&#xff0c;他们都在悄悄用AI做商业变现。当普通销售还在手动记录客户信息时&#xff0c;AI销售系统已经能实时追踪客户在商品页的停留时长&#xff0c;甚至精确到秒。 传统客服人员还在机械地复制粘贴标准话术&#xff0c;AI销售却已经能根…...

从设计到开发,原型标注图全流程标准化

一、原型标注图是什么&#xff1f; 原型标注图&#xff08;Annotated Prototype&#xff09;是设计原型&#xff08;Prototype&#xff09;的详细说明书&#xff0c;通过图文结合的方式&#xff0c;将设计稿中的视觉样式、交互逻辑、适配规则等技术细节转化为开发可理解的标准…...

Mac QT水平布局和垂直布局

首先上代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QPushButton> #include<QVBoxLayout>//垂直布局 #include<QHBoxLayout>//水平布局头文件 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), …...

部署Superset BI(四)连接sql server数据库

sqlserver没有出现在Superset的连接可选菜单上&#xff0c;这一点让我奇怪。既然没有那就按着HANA的配置方式&#xff0c;照猫画虎。更奇怪的是安装好还不能出现&#xff0c;难道superset和微软有仇&#xff1f; --修改配置文件 rootNocobase:/usr/superset/superset# cd docke…...

Python爬虫(22)Python爬虫进阶:Scrapy框架动态页面爬取与高效数据管道设计

目录 一、背景&#xff1a;Scrapy在现代爬虫中的核心价值二、Scrapy项目快速搭建1. 环境准备与项目初始化2. 项目结构解析 三、动态页面处理&#xff1a;集成Splash与中间件1. 配置Splash渲染服务&#xff08;Docker部署&#xff09;2. 修改settings.py启用中间件3. 在Spider中…...

全球实物文件粉碎服务市场洞察:合规驱动下的安全经济与绿色转型

一、引言&#xff1a;从纸质堆叠到数据安全的“最后一公里” 在数字化转型浪潮中&#xff0c;全球企业每年仍产生超过1.2万亿页纸质文件&#xff0c;其中包含大量机密数据、客户隐私及商业敏感信息。据QYResearch预测&#xff0c;2031年全球实物文件粉碎服务市场规模将达290.4…...

使用Python 打造多格式文件预览工具 — 图、PDF、Word、Excel 一站式查看

在日常办公或文件管理场景中&#xff0c;我们经常面临这样的问题&#xff1a;在一个文件夹中短时间内产生了大量不同类型的文件&#xff08;如图片、PDF、Word、Excel&#xff09;&#xff0c;我们需要快速浏览和筛选这些文件的内容&#xff0c;却不希望一个个打开它们。有没有…...

Microsoft 365 Copilot:为Teams在线会议带来多语言语音交流新体验

随着AI技术的飞速发展&#xff0c;Microsoft 365 Copilot将大型语言模型&#xff08;LLM&#xff09;与业务数据深度融合&#xff0c;为用户带来了前所未有的办公体验。在Teams在线会议中&#xff0c;Copilot不仅能够作为智能助手提升会议效率&#xff0c;还能通过实时辅助同声…...

c++:双向链表容器(std::list)

目录 &#x1f9f1; 一、什么是 std::list&#xff1f; ⚙️ 二、底层结构图解 &#x1f9ea; 三、list 的常见操作 &#x1f4e6; 四、完整示例代码 &#x1f4cc; 五、特点总结对比 &#x1f6e0; 六、特殊函数 &#x1f4da; 七、list 迭代器操作 ⚠️ 八、使用场景…...

jenkins 启动报错

java.lang.UnsatisfiedLinkError: /opt/application/jdk-17.0.11/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory。 解决方案&#xff1a; yum install freetype-devel 安装完成之后重启jenkins。...

输入顶点坐标输出立方体长宽高的神经网络

写一个神经网络&#xff0c;我输入立方体投影线段的三视图坐标&#xff0c;输出分类和长宽高 import torch from torch import nn import torch.nn.functional as F# 假设每个视图有8个顶点&#xff0c;每个顶点有2个坐标值&#xff0c;因此每种视图有16个输入特征 input_dim…...