[Docker#3] LXC | 详解安装docker | docker的架构与生态

目录

1.LXC容器操作

安装LXC

LXC容器操作步骤

2.理论

LXC 是什么?

Docker 是什么

Docker 和虚拟机的区别

Docker 和 JVM 虚拟化的区别

Docker 版本

⭕Docker 官方网站(建议收藏)

Docker 架构

生活案例

Docker 生态

Docker 解决方案

3. Docker 安装

centos 安装

ubuntu 安装


1.LXC容器操作

实战目的

  • 通过LXC学习容器的创建与管理,体会容器化技术的基本原理。
  • 了解Docker不是唯一的容器实现方式,Docker在0.9版本起引入了自家的libcontainer,而如今大部分Docker使用的都是libcontainer而非LXC。

基础知识

LXC的常用命令说明:

  • 检查系统支持性
lxc-checkconfig

用于检查系统是否支持LXC容器。

  • 创建容器
lxc-create -n NAME -t TEMPLATE_NAME [--template-options]

创建指定模板的容器。

  • 启动容器
lxc-start -n NAME -d

启动指定容器。

  • 列出容器
lxc-ls -f

列出所有容器,-f参数显示容器的详细信息。

  • 查看容器信息
lxc-info -n NAME

查询某个容器的运行状态及相关信息。

  • 进入容器
lxc-attach --name=NAME [--COMMAND]

在容器内执行命令。

  • 停止容器
lxc-stop -n NAME

停止容器运行。

  • 删除容器
lxc-destroy -n NAME

删除停止状态的容器。


安装LXC

Ubuntu安装LXC

  1. 检查及卸载(如需)
systemctl status lxc
lxc-stop -n xxx # 停止所有运行的容器
lxc-destroy -n xxx # 删除所有容器
apt-get purge --auto-remove lxc lxc-templates
systemctl status lxc # 确保服务已卸载
  1. 安装LXC
apt install lxc lxc-templates bridge-utils -y
systemctl status lxc # 检查服务是否正常

CentOS安装LXC

  1. 检查及卸载(如需)
systemctl status lxc
lxc-stop -n xxx
lxc-destroy -n xxx
yum remove lxc lxc-templates lxc-libs lxc-extra libvirt debootstrap
systemctl status lxc # 确保服务已卸载
  1. 配置源并安装LXC
yum -y install epel-release
yum -y install lxc lxc-templates bridge-utils lxc-libs libcgrouplib libvirt lxc-extra debootstrap
  1. 启动服务并检查
systemctl start lxc
systemctl start libvirtd
systemctl status lxc
systemctl status libvirtd

LXC容器操作步骤

1. 检查LXC服务运行状态

systemctl status lxc

2. 检查系统对容器支持情况

lxc-checkconfig

3. 查看可用的容器模板

ls /usr/share/lxc/templates/

4. 创建LXC容器

Ubuntu上创建Ubuntu容器

lxc-create -n lxchost1 -t ubuntu -- -r xenial -a amd64

Ubuntu上创建CentOS容器

lxc-create -n centos7 --template=download -- --dist=centos --release=7 --arch=amd64

5. 查看容器创建结果

ls /var/lib/lxc/<容器名>/
ls /var/cache/lxc/

6. 列出容器信息

lxc-ls -f

7. 启动容器

lxc-start -n lxchost1 -d
lxc-ls -f

8. 查看容器详细信息

lxc-info -n lxchost1

9. 使用SSH进入容器

ssh ubuntu@10.0.3.248

10. 在容器中执行常用命令

ip addr # 查看网络信息
df -h # 查看磁盘挂载情况
ps -ef # 查看进程信息

11. 从宿主机向容器中发送命令

lxc-attach -n lxchost1 --clear-env -- echo "Hello LXC"

12. 停止容器

lxc-stop -n lxchost1

13. 删除容器

lxc-destroy -n lxchost1

了解从安装到创建、启动、管理和删除LXC容器的全过程,为进一步理解Docker等容器技术打下坚实基础。

补充:

nano 操作快速参考

保存并退出:Ctrl + O,然后按 Enter,接着按 Ctrl + X


2.理论

LXC 是什么?
  • LXC(LinuX Containers)是一种操作系统层虚拟化技术,为 Linux 内核容器功能的一个用户空间接口。
  • 它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。
  • 透过统一的名字空间和共享 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得 Linux 用户可以容易地创建和管理系统或应用容器。

尽管 LXC 极大地简化了容器技术的使用,但比起直接通过内核调用来使用容器技术,其复杂程度其实并没有多大降低,因为我们必须要学会 LXC 的一组命令工具,且由于内核的创建都是通过命令来实现的,通过批量命令实现数据迁移并不容易。

其隔离性也没有虚拟机那么强大。后来就出现了 Docker,所以从一定程度上来说,Docker 就是 LXC 的增强版。

Docker 是什么
  • Docker 本质其实是 LXC 之类的增强版,它本身不是容器,而是容器的易用工具。
  • 容器是 Linux 内核中的技术,Docker 只是把这种技术在使用上简易普及了。Docker 在早期的版本其核心就是 LXC 的二次封装发行版。
  • Docker 作为容器技术的一个实现,或者说让容器技术普及开来的最成功的实现。
  • Docker 是基于 Go 语言实现的一个开源项目,它的主要目标是“Build,Ship and Run Any APP,Anywhere”,即通过对组件的封装、分发、部署、运行等生命周期的管理,使得用户的应用及其运行环境能够做到一次封装,到处运行”。
  • 早期 Docker 利用 LXC 做容器管理引擎,但在创建容器时,不再使用模板去安装生成,而是通过镜像技术(把一个操作系统用户空间所需要使用到的组件事先编排好,并整体打包成一个文件,image 文件),镜像文件集中放在一个仓库中
  • 当需要创建容器时,Docker 调用 LXC 的工具 lxc-create,但不再通过 lxc 的模板去安装,而是连接到镜像服务器上下载匹配的镜像文件,而后基于镜像启动容器。
  • 所以,Docker 极大地简化了容器的使用难度。以后我们创建启动容器,只需要一个命令,docker-run,docker-stop 就可以启动停止一个容器了。

Docker 的引擎迭代

  • Docker 早期是基于 LXC 容器管理引擎实现。
  • 当后来成熟之后,Docker 自建了一个容器引擎叫 libcontainer。
  • 后来 CNCF 的介入,Docker 又研发了一个工业化标准的容器引擎 runC。
  • 目前所使用的新版 Docker,所使用的容器引擎就是 RunC。
Docker 和虚拟机的区别

特性

传统虚拟机

Docker 容器

磁盘占用

几个 GB 到几十个 GB 左右

几十 MB 到几百 MB 左右

CPU 内存占用

虚拟操作系统非常占用 CPU 和内存,需要通过虚拟层调用占用率高

Docker 引擎占用资源极低,直接作用于硬件资源占用少

启动速度

(从开机到运行项目)几分钟

(从开启容器到运行项目)几秒

安装管理

需要专门的运维技术

安装、管理方便

应用部署

手动部署,速度慢

体系化部署,可以自动化,速度快

隔离性

系统级别

进程级别

封装程度

打包整个操作系统

打包项目代码和依赖信息

Docker 为什么比虚拟机资源 利用率高,启动快,耦合低

  • Docker 有比虚拟机更少的抽象层。Docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 Docker 容器上的程序直接使用的是实际物理机的硬件资源。因此在 CPU、内存利用率上 Docker 将会在效率上有明显的优势。Docker 利用的是宿主机的内核,而不需要 Guest OS,节省了 Guest OS 占用的资源。
  • Docker 不需要 Guest OS,创建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻、加载操作系统内核返回时耗时耗资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS,返回新建过程是分钟级别的。而新建一个 Docker 容器只需要几秒钟。
Docker 和 JVM 虚拟化的区别

特性

JVM

Docker 容器

性能

Jvm 需要占用一定的 CPU 和内存

基本没有损失

虚拟层面

基于 JVM 虚拟机,更加上层

基于操作系统,更加通用

代码无关性

一个特定代码的执行平台,它是运行时才存在的,只能支撑特定代码的执行,并且必须是在 jvm 进程内

模拟了一整个操作系统,它是静态存在的,可以支撑任何代码,相同平台的应用程序

主机隔离性

jvm 不隔离主机

通过命名空间实现隔离

Docker 版本

Docker 发展过程中衍生了以下版本,目前我们学习和使用提到的版本是 docker-ce。

  • lxc:上文中提到,lxc 是最早的 linux 容器技术,早期版本的 docker 直接使用 lxc 来实现容器的底层功能。虽然使用者相对较少,但 lxc 项目仍在持续开发演进中。
  • libcontainer:docker 从 0.9 版本开始自行开发了 libcontainer 模块来作为 lxc 的替代品实现容器底层特性,并在 1.10 版本彻底去除了 lxc。在 1.11 版本拆分出 runc 后,libcontainer 也随之成为了 runc 的核心功能模块,runc 后续变成了容器标准。
  • moby:moby 是 docker 公司发起的开源项目,其中最主要的部分就是同名组件 moby,事实上这个 moby 就是 dockerd 目前使用的开源项目名称,docker 项目中的 engine(dockerd)仓库现在就是从 moby 仓库 fork 而来的,使用 containerd 作为运行时标准。Moby
  • docker-ce:docker 的开源版本,CE 指 Community Edition。docker-ce 中的组件来自于 moby、containerd 等其他项目。Pricing | Docker
  • docker-ee:docker 的收费版本,EE 指 Enterprise Edition。其基础组件来源和 docker-ce 是一样的,但附加了一些其他的组件和功能。Pricing | Docker
⭕Docker 官方网站(建议收藏)
  • Docker 官网:Docker: Accelerated Container Application Development
  • 我们可以查看官方文档来进行学习
  • 后续我们会学到 客户端的 20 多条 常见的命令

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker 镜像来创建。

下面是对官网上的一张图的理解

  • Docker 仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 供了庞大的镜像集合供使用。
  • Docker daemon:Docker daemon 是服务器组件,是 Docker 最核心的后台进程,我们也把它称为守护进程。
  • Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。
  • Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
  • Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。
  • Docker 容器(Container):容器是独立运行的一个或一组应用。
生活案例

上面概念比较难以理解,我们列举个生活中的案例,以一家人去旅游入住酒店为例。

  • 我们一家人和朋友一块旅游去酒店,我们就是 Docker Client。
  • 到酒店办理入住,办理退房,缴费需要酒店前台提供各种服务,酒店前台就是我们的 Docker Daemon,Docker 的核心服务端。
  • 酒店是建在美丽的海边,酒店的宅基地和大楼就是我们实际的物理服务器或者虚拟服务器,也就是 Docker Host。
  • 酒店就 1000 多个房间,每个房间里面不一样,有标间、大床房、家庭房等,这就是 Docker 镜像仓库。
  • 酒店的标准的房间豪华大床房和双人标间,这个就是 Docker 镜像,我们客户是没有办法修改的。
  • 我们办理完入住了一个豪华大床房,然后把行李,个人物品带到了一个具体的房间号,比如 9527,那么这个房间我们可以使用了,朋友也开了一间豪华大床房,虽然豪华大床房一样,但是我们携带的物品都不一样,这个就是容器 Docker Container。
  • 容器的销毁,也就是我们一周后旅游结束了,搬出了酒店,酒店把我们的房间恢复了镜像原来的样子。
Docker 生态

新时代软件诉求

我们来考虑 2 个问题,Docker 为什么要设计镜像,然后又搭建个 Docker Hub,搞个镜像仓库呢?我们来看下现在的时代发生了什么。

1. 数据量疯狂增长

  • 随着物联网、边缘计算等智能终端设备不断普及,受到来自物联网设备信号、元数据、娱乐相关数据、云计算和边缘计算的数据增长的驱动,全球数据量呈现加速增长。根据 IDC 分布的《数据时代 2025》预测,全球数据量将从 2018 年的 33ZB 增至 2025 年的 175ZB,增长超过 5 倍;中国平均增速快于全球 3%,预计到 2025 年将增至 48.6ZB,占全球数据圈的比例由 23.4%提升至 27.8%。其中,中国企业级数据量将从 2015 年占中国数据量的 49%增长到 2025 年的 69%。

2. 处理能力快速增加

  • 腾讯云全球服务器数量 100w+,数据量 EB+;2020 年阿里云:在全国已建成 5 大超级数据中心,阿里云在全球 22 个地域部署了上百个数据中心,服务器的总规模数已经接近 200 万台。
  • 某省疾控中心疫苗预约系统、全员核酸检测系统、健康码系统共 300 余台服务器,并为核酸检测系统快速扩容计算和存储资源。

(重申 云 的概念:就像水和电一样的一种资源,但是不用了又可以归还)

3. 软件需求爆发式增长

软件发布频繁

  • 研发模式从瀑布开发演变为敏捷开发,原来 3 个月上一次新功能,现在两周一次,而开发过程中我们也经常遇到需要修改需求,然后变更再发布的情况。
  • 软件上线有问题需要快速回滚,对软件有着极强的版本管理和回滚诉求

软件需要共享

  • 软件的研发人员、研发公司在设计、研发好一款软件的时候,如何方便地共享给他人,而又能快速地使用起来

环境搭建复杂,技术种类繁多

  • 每个项目组使用的语言不一样,需要不同的环境,每个都得搞一套。每次都要从 yum 开始一个个完成部署安装,每次都有各种奇怪的问题,运维成本很高。

Docker 解决方案

云时代需要我们针对这些诉求有一套针对性的解决方案。

我们要处理海量的数据,如何处理呢?

  • 购买大量的服务器,并研发对应软件。

开发的需求需要频繁的变更上线,如何才能将修改的代码快速地分发到几百或者几千台服务器呢?如何共享软件呢?

  • 搞一个中心仓库,让各个服务器去下载软件包,安装,所以 CentOS 搞了 yum 仓库,docker 设计了镜像仓库,docker hub 是公共的托管仓库。

软件设计好以后,怎么快速安装启动,有问题回滚呢?

  • 将 docker 需要的所有信息设计一套软件格式,把所有的依赖搞进去,并打上版本标签,这样不会换一个服务器各种问题,所以 Docker 设计了镜像,根据版本标签就可以实现回滚了

不同的开发环境怎么搭建呢,一会 java,一会 c++?

  • docker 设计了镜像来应对,镜像里面存放了需要运行的环境,就像我们的 iPhone 内置 ios,我们的华为 mate 50 内置鸿蒙一样,一条命令就可以完成某个环境的搭建。

前置了解:

  • X86 高并发:基于 x86 架构的处理器,在高负载下处理大量并发请求的能力。
  • ARM :使用 ARM 架构处理器的移动设备,具有低功耗和高性能的特点。

操作系统:

  • CentOS:基于 Red Hat Enterprise Linux 的免费开源操作系统,适合企业级应用和服务器。
  • Ubuntu:基于 Debian 的免费开源操作系统,用户友好,广泛应用于个人电脑、服务器和云计算平台。

3. Docker 安装

下面我们来快速安装一下 Docker,对 Docker 有个初步的认识和了解。

各版本平台支持情况

•Server 版本

•桌面版本

centos 安装

安装依赖

支持的操作系统

  • CentOS 7
    CentOS 8 (stream)
    CentOS 9 (stream)

支持的 CPU

  • ARM/X86_64

安装 Docker

1. 确认操作系统

2.确认 CPU 架构

3.卸载旧版本

4.安装 docker

查看

借助工具包

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

配置使用国内源

sed -i 's@//download.docker.com@//mirrors.ustc.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo

  • 安装

因为centos的yum源,很多都用不了了,是在不行,就更换ubuntu系统了

最后的尝试:

curl -sLf https://gitee.com/lpsdz-ybhdsg-jk/yum-source-update/raw/master/install.sh -o ./install.sh && bash ./install.sh

ubuntu 安装

检测:

1.确定 CPU,可以看到我们的是 X86_64,是支持的,如果是 arm 一般会显示 aarch64

2.确定操作系统版本

3.卸载旧版本,如果是新购买的云服务器是没有的,比如输入 docker 并没有这个命 令,就不需要卸载

4.卸载历史版本

安装指南:

1. 更新软件包索引

首先,确保您的系统软件包索引是最新的:

sudo apt update

2. 安装必要的依赖包

安装一些必要的依赖包,以便能够通过HTTPS使用APT:

sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

3. 添加Docker的官方GPG密钥

下载并添加Docker的官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4. 设置Docker的稳定版仓库

设置Docker的稳定版仓库:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 更新软件包索引

再次更新软件包索引以包含Docker仓库的信息:

sudo apt update

6. 安装Docker Engine

安装Docker Engine:

sudo apt install -y docker-ce docker-ce-cli containerd.io

7.自动启动配置

#配置加载 
sudo systemctl daemon-reload 
#启动服务 
sudo systemctl start docker 
#开启启动 
sudo systemctl enable docker 
#查看服务状态 
sudo systemctl status docker 

8.检查安装结果查看版本

更详细可以:docker info查看

9.执行 hello-world 可以看到 Hello from Docker,表面 docker 服务正常

如果出现了如下报错

解决:

vi /etc/docker/daemon.json 
{
        "registry-mirrors": [
                "https://docker.m.daocloud.io",
                "https://dockerhub.timeweb.cloud",
                "https://huecker.io"
  ]
}
#文件内容输入后
sudo systemctl daemon-reload
sudo systemctl restart docker

运行:

成功啦

配环境心得:要相信自己一定能配好,遇见问题就高效的搜索解决方案,这没什么~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库专栏(五)连接MySQL数据库C API篇

摘要 本篇文章主要介绍通过C语言API接口链接MySQL数据库&#xff0c;各接口功能及使用方式&#xff0c;辅助类的封装及调用实例&#xff0c;可以直接移植到项目里面使用。 目录 1、环境配置 1.1、添加头文件 1.2、添加库目录 2、接口介绍 2.1、MySql初始化及数据清理 2.1.…

从0开始深度学习(27)——卷积神经网络(LeNet)

1 LeNet神经网络 LeNet是最早的卷积神经网络之一&#xff0c;由Yann LeCun等人在1990年代提出&#xff0c;并以其名字命名。最初&#xff0c;LeNet被设计用于手写数字识别&#xff0c;最著名的应用是在美国的邮政系统中识别手写邮政编码。LeNet架构的成功证明了卷积神经网络在…

如何用C#和Aspose.PDF实现PDF转Word工具

在本篇博文中&#xff0c;我将详细讲解如何用C#实现一个PDF转Word工具。这款工具基于Aspose.PDF库&#xff0c;实现PDF文件转为Word&#xff08;DOC/DOCX&#xff09;格式的功能&#xff0c;并通过用户友好的界面和状态提示提升用户体验。希望通过这篇文章帮助大家理解软件的实…

运维技术之文件系统(File System for 0peration and Maintenance Technology)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

IoTDB 与 HBase 对比详解:架构、功能与性能

五大方向&#xff0c;洞悉 IoTDB 与 HBase 的详尽对比&#xff01; 在物联网&#xff08;IoT&#xff09;领域&#xff0c;数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长&#xff0c;开发者和决策者们需要选择…

【Vue】Vue2和Vue3响应式原理

前言 Vue 3 的核心部分可以分为三个主要模块&#xff1a;Compiler、Reactivity 和 Runtime。响应式的处理逻辑在 Reactivity 部分。 Compiler&#xff08;编译器&#xff09;&#xff1a;Template > 渲染函数 将 Vue 的模板&#xff08;Template&#xff09;转换成 JavaS…

哪些人群适合考取 PostgreSQL 数据库 PGCM 证书?

#postgresql#&#xff0c;作为开源数据库领域的佼佼者&#xff0c;凭借其强大的功能和广泛的应用场景&#xff0c;吸引了大量数据库从业者的关注。它代表着持有者在PostgreSQL数据库管理、优化、安全和高可用性设计等方面的专家级技能。 PGCM证书适合那些具备扎实理论基础和一…

C++高级编程(9)

九、STL模板库 1.C函数模板 函数模板是一个独立于类型的函数&#xff0c;可产生函数特定类型的版本。通过对参数类型进行参数化&#xff0c;获取有相同形式的函数体。 它是一个通用函数&#xff0c;它可适应一定范围内的不同类型对象的操作。 函数模板将代表着不同类型的一组…

深圳世界之窗:文化与娱乐交织的旅游胜地

深圳世界之窗位于广东省深圳市南山区华侨城&#xff0c;是中国著名的缩微景区。它以弘扬世界文化为宗旨&#xff0c;将世界奇观、历史遗迹、民间歌舞表演、高科技游乐项目等融为一体&#xff0c;为游客打造出一个不出国门就能领略世界风情的旅游胜地。 从文化角度来看&#xff…

贪心day04(买卖股票的最佳时机)

1.买卖股票的最佳时机 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;我们其实只需遍历一篇就可以解决这个问题。首先我们定义一个min为无穷大值&#xff0c;再遍历只要有数字比min跟小我们就更改min的值就好&#xff0c;此时我们只需要找出…

ClickHouse创建账号和连接测试

在之前搭建ClickHouse的时候&#xff0c;把账户相关的去掉了&#xff0c;所以登录和连接的时候是不需要账号密码的&#xff0c;但是实际项目中&#xff0c;肯定是需要根据需要创建账号。 一&#xff0c;创建账号 1&#xff0c;进入到 /etc/clickhouse-server&#xff0c; 编辑…

网页版五子棋——匹配模块(客户端开发)

前一篇文章&#xff1a;网页版五子棋——用户模块&#xff08;客户端开发&#xff09;-CSDN博客 目录 前言 一、前后端交互接口设计 二、游戏大厅页面 1.页面代码编写 2.前后端交互代码编写 3.测试获取用户信息功能 结尾 前言 前面文章介绍完了五子棋项目用户模块的代码…

10. java基础知识(下)

文章目录 一、一带而过二、字符串类型String1. 简单了解2. 关于结束符\03. 自动类型转换与强制类型转换 三、API文档与import导包1. API文档2. import导包 四、java中的数组1. 创建2. 遍历3. 补充4. Arrays类① 简单介绍② 练习 五、方法的重载六、规范约束七、内容出处 一、一…

Sam Altman:年底将有重磅更新,但不是GPT-5!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

《Python编程实训快速上手》第四天--字符串操作

一、处理字符串 1、单引号和双引号 Python中单双引号均可以表示字符串&#xff0c;区别在于&#xff1a; 1、双引号中可以使用到单引号 2、单引号字符串中如果要使用单引号&#xff0c;要使用到转义字符 \ \ \t \n \\ 原始字符串 在开始的引号前加r&#xf…

原生html+js输入框下拉多选带关闭模块完整案例

<!DOCTYPE html> <html> <head> <title>多选下拉框</title> <style> * { box-sizing: border-box; margin: 0; padding: 0; } .multi-select-container { position: relative; width: 300px; margin: 20px; font-family: Arial, sans-seri…

在 Ubuntu 操作系统上:改变 App 任务栏菜单的背景色

Ubuntu 官方默认的终端&#xff0c;与操作系统的主题 theme 无关。

【优选算法 — 滑动窗口】滑动窗口小专题(一)

长度最小的子数组 长度最小的子数组 题目解析&#xff1a; 对于示例一 对于剩下两种示例&#xff1a; 解法一&#xff1a;暴力枚举 把所有的子数组全部枚举出来&#xff0c;并且枚举出的每一个子数组求和判断&#xff0c;返回长度最小的子数组&#xff1b; 时间复杂度 &…

半波整流器原理

一、二极管不控整流 1.阻性负载 1.1.电路拓扑结构 电路只由交流源、二极管和电阻组成。最基本的带阻性负载的半波整流器如图所示。输入源为交流源&#xff0c;目标是使输出电压含有非零直流分量&#xff0c;负载为R。功率二极管只允许电流往一个方向流动。 1.2.工作模态分析…

yolov8涨点系列之引入CBAM注意力机制

文章目录 YOLOv8 中添加注意力机制 CBAM 具有多方面的好处特征增强与选择通道注意力方面空间注意力方面 提高模型性能计算效率优化&#xff1a; yolov8增加CBAM具体步骤CBAM代码(1)在__init.pyconv.py文件的__all__内添加‘CBAM’(2)conv.py文件复制粘贴CBAM代码(3)修改task.py…