Docker实战——容器
目录
- Docker 容器的基本概念与操作
- 1.使用“docker create”创建容器。这里基于Nginx的镜像创建了一个容器,名字为mycontainer。
- 2.使用“docker ps -a”命令查看所有的容器,这时的容器不一定是运行状态。
- 3.使用 “docker start” 命令可以启动容器。
- 4.使用 “docker run” 命令可以直接创建容器并启动容器。
- 5.使用 “docker exec” 命令可以进入容器内。
- 6.使用 “docker stop” 命令可以停止容器。
- 7.使用 “docker rm” 命令可以删除容器。当容器正在运行时,是不能直接将其删除的。但可以使用 -f 参数进行强行删除。
- 8.使用 “docker export” 命令导出一个已经创建的容器,不管容器处于什么状态。通过这种方式剋实现容器的迁移。
- 9.使用 “docker import” 命令可以将从容器导出生成的文件重新导入容器。
- 10.使用 mynginx_imported 镜像来创建一个容器。这里需要注意的是:如果要使用导入的镜像创建并启动容器,则需要在启动时跟上具体的命令,否则就会出现错误。
- Docker 的日志
- 访问Docker引擎日志
- 访问Docker应用日志
- 1.查看指定时间后的日志,只显示最后5行。
- 2.查看容器最近30分钟的日志。
- 管理容器的资源
- 什么是 Linux CGroup
- 1.确定操作系统的发行版本。
- 2.根据操作系统的发行版本,可以确定是否启用了 Linux CGroup。
- Docker 对内存的使用
- 1.创建一个Dockerfile 文件,输入以下内容。
- 2.执行 “docker build” 命令将其编译成镜像,镜像的名称是mycentos。
- 3.以下语句使用了 mycentos 来进行测试。
- 4.使用 “docker stats” 命令观察容器占用的内存,会发现容器占用的内存被限定在256MB。
- Docker 对 I/O 宽带的使用
- 1.执行以下命令可以获取这些参数机器含义。
- 2.Docker I/O 管理相关参数。
- 3.下面通过两个示例来演示如何在启动了的 Docker 容器中使用上面的参数来对容器使用的 I/O 带宽进行限定
- 示例一
- 1.使用 --device-read-bps 和 --device-write-bps 参数限定容器的读写速率。
- 2.在容器中执行以下命令。其中,oflag=direct 表示读写数据采用直接 I/O 方式。
- 3.在宿主机上使用 iotop 命令观察容器的写入速度,会发现容器的写入速度被限定在1035kb/s(即 1 MB/s 左右)。
- 4.以下语句将限制容器的读取速度为 1MB/s。
- 示例二 使用 --device-read-iops 和 --device-write-iops 参数限定容器的读写次数。
- 1.为了观察结果,先在宿主机上安装 sysstat 软件包。
- 2.创建并启动容器,通过使用 --device-write-iops 参数将容器写数据的速率设定为每秒5次。
- 3.在容器中执行以下命令,其中,oflag=direct 表示读写数据采用直接 I/O 方式。
- 4.在宿主机上使用以下命令观察输出结果,这个命令每个1秒刷新1次。
- 5.以下语句会将容器读取数据的速率设定为每秒5次
- 管理Docker容器中的数据
- 在 Docker 容器中实现数据管理的两种方式
- 1.数据卷(Data Volumes)
- 2.数据卷容器(Data Volume Containers)
- 使用数据卷管理 Docker 容器中的数据
- 1.创建一个名为 “myvolume” 的数据卷。
- 2.查看所有的数据卷。
- 3.使用 “docker inspect volume” 命令查看数据卷的详细信息。
- 4.启动一个容器,并使用 myvolume 数据卷。这里使用 Nginx 镜像创建一个容器,并将容器的 80 端口映射到宿主机的 1234 端口,容器名称为 “mynginx”
- 5.切换到 “/var/lib/docker/volumes/myvolume/_data” 目录下,并修改 Nginx的首页 index.html 文件的内容
- 6.通过浏览器访问宿主机的 1234 端口,打开Nginx的主页会看到显示的就是新修改的Nginx主页。
- 7.在挂载数据卷时,也可以使用 -v 参数。以下命令是将宿主机的 "/root" 目录挂载到了容器内的 “/root/container/mydatavolume” 目录下。下图表示挂载成功了。
Docker 容器的基本概念与操作
Docker 的容器类似操作系统的文件夹,其中包含应用喝应用运行时所需要的依赖环境。每一个Docker 容器都是从 Docker 镜像创建的。
Docker 容器的操作包括:创建容器、停止容器、进入容器、删除容器、导入和导出容器、查看容器等。
1.使用“docker create”创建容器。这里基于Nginx的镜像创建了一个容器,名字为mycontainer。
sudo docker create --name mycontainer nginx
2.使用“docker ps -a”命令查看所有的容器,这时的容器不一定是运行状态。
# 查看所有容器
sudo docker ps -a
# 查看所有运行中的容器
sudo docker ps
3.使用 “docker start” 命令可以启动容器。
sudo docker start [CONTAINER ID]
4.使用 “docker run” 命令可以直接创建容器并启动容器。
sudo docker run -d --name mycontainer1 nginx
5.使用 “docker exec” 命令可以进入容器内。
sudo docker exec -it [CONTAINER ID]/[CONTAINER NAMES] /bin/bash
# 其中的参数说明
# -t :为Docker 分配一个伪终端
# -i :为Docker 打开标准输入
6.使用 “docker stop” 命令可以停止容器。
sudo docker stop [CONTAINER ID]/[CONTAINER NAMES]
7.使用 “docker rm” 命令可以删除容器。当容器正在运行时,是不能直接将其删除的。但可以使用 -f 参数进行强行删除。
sudo docker rm [CONTAINER ID]/[CONTAINER NAMES]
8.使用 “docker export” 命令导出一个已经创建的容器,不管容器处于什么状态。通过这种方式剋实现容器的迁移。
sudo docker export -o <name.tar> [CONTAINER ID]
9.使用 “docker import” 命令可以将从容器导出生成的文件重新导入容器。
sudo docker import nginx.tar mynginx_imported
# 这里mynginx_imported是一个镜像
10.使用 mynginx_imported 镜像来创建一个容器。这里需要注意的是:如果要使用导入的镜像创建并启动容器,则需要在启动时跟上具体的命令,否则就会出现错误。
# 错误写法
sudo docker run -d mynginx_imported
# 正确写法
sudo docker run -d mynginx_imported /bin/bash
# 其中/bin/bash表示在启动容器时需要在容器中执行的指令。
Docker 的日志
在 Docker 的整个生命周期中,超过70%的时间我们都是在做 Docker 的运维工作。查看 Docker 日志,是运维工作中非常重要的一个环节。
Docker 日志分为两种类型:Docker 引擎的日志、应用的日志。下面分别对这两种日志进行介绍。
访问Docker引擎日志
Docker 引擎的日志是指,在 Docker 守护进程执行过程中产生的日志信息。如果 Docker 引擎出现了问题,则需要在不同的操作系统的宿主机上使用不同的方式进行查看。
操作系统 | 日志位置 |
---|---|
Ubuntu 22.04 | journalctl -u docker.service![]() |
访问Docker应用日志
Docker 将应用运行在容器中,应用输出日志也就输出到容器中了,访问Docker 应哟个的日志也就变成访问 Docker 容器的日志。要访问容器的日志,首先需要了解 Docker 的日志引擎。以下是 Docker 支持的日志引擎。
日志引擎 | 说明 |
---|---|
journald | Docker 默认的日志引擎。这种引擎把所有容器的回显日志输出到系统的journald中 |
json-file | 把每个容器的回显日志以JSON 文件格式输出到每个容器的内部。如果在实际应用中某些应用产生了大量的日志信息,则可能导致容器的 JSON 日志文件过大而占满宿主机的磁盘 |
syslog | 把所有容器的回显日志输出到系统的 syslog 服务中 |
fluentd | 把所有容器的回显日志输出到系统的 fluentd 服务中 |
gelf | 把所有容器的日志输出到支持 GELF 格式的服务中,如 Logstash |
none | 关闭 Docker 容器的日志。使用这种方式 ,则意味着无法通过 “docker logs” 命令查看任何容器输出的日志 |
利用以下命令查看 Docker 默认的日志引擎
sudo docker info | grep Logging
并不推荐直接读取 Docker 日志内容,原因是 Docker 提供了 “docker logs” 命令来帮助我们读取日志信息。
以下图片内容由另一台服务器提供(仅供示例参考)
1.查看指定时间后的日志,只显示最后5行。
docker logs -f -t --since='2024-01-01' --tail=5 [CONTAINER ID]
2.查看容器最近30分钟的日志。
docker logs --since 30m [CONTAINER ID]
管理容器的资源
在一台 Docker 宿主机上可以同时启动多个容器。在默认情况,Docker 没有限制其中运行的容器使用硬件资源。而在实际环境中,容器的负载过高会占用宿主机的大量资源。这里的资源是指宿主机的 CPU、内存和 I/O 宽带这三个方面。
本节内容介绍如何使用 Docker 的资源管理给容器的资源使用设置一个阀值,以控制容器对宿主机 CPU、内存和 I/O 贷款的使用。
什么是 Linux CGroup
由于 Docker 构建在Linux 的基础上因此从 Linux 底层来看,Docker 是利用 Linux Control Group(简称:Linux CGroup)来实现对资源使用的控制。因此,要掌握 Docker 容器的资源管理,有必要先了解一下什么是 Linux CGroup。
Linux CGroup 是 Linux 中的一些进程,通过这些进程可以限制应用对资源的使用。并且,通过 Linux CGroup 可以对系统资源做精细化控制。
Linux CGroup 主要提供一下功能。
Resource limitation:限制资源的使用,例如,使用 CPU 及内存的上线。
Prioritization:应用优先级控制,例如,控制任务进度。
Accounting:应用的审计和统计,例如,实现应用的计费。
Control:实现对应用的控制,例如,应用的挂起、恢复和执行等。
要使用 Linux CGroup,则需要先通过执行以下步骤确定Linux 内核是否启用了 Linux CGroup。
1.确定操作系统的发行版本。
2.根据操作系统的发行版本,可以确定是否启用了 Linux CGroup。
cat /boot/config-5.15.0-92-generic | grep CGROUP
# 其中CGROUP的参数值是 “y”,表示已经启动 Linux CGroup
Docker 对内存的使用
利用底层的 Linux CGroup,能够很方便地通过参数 -m 来设定容器所使用的内存
默认情况下,一个容器可以使用主机上的所有内存。
在使用 -m 参数时,可以指定具体的参数值的后缀,如 K、M 或者 G。
下面通过具体的步骤来演示。这里基于CentOS的基础镜像安装压力测试工具 stress 来进行测试。
1.创建一个Dockerfile 文件,输入以下内容。
FROM centos:7
RUN yum install -y epel-release && yum install -y stress
ENTRYPOINT ["stress"]
2.执行 “docker build” 命令将其编译成镜像,镜像的名称是mycentos。
sudo docker build -t mycentos .
3.以下语句使用了 mycentos 来进行测试。
sudo docker run -it --rm -m 256m mycentos --vm 1 --vm-bytes 128M --vm-hang 0
# 其中参数说明如下:
# -m 256m:限制容器使用内存的大小。
# --vm-bytes 128M:压力测试工具stress每次分配大小为128M的内存空间。
# --vm-hang 0:压力测试工具stress 分配完内存后立即释放分配的内存;如果该值为100,则表示分配内存后,等待100秒后再释放分配的内存。
4.使用 “docker stats” 命令观察容器占用的内存,会发现容器占用的内存被限定在256MB。
Docker 对 I/O 宽带的使用
要在 Docker 中对容器使用 I/O 带宽进行限定,则需要先了解 Docker I/O 管理相关的参数。
1.执行以下命令可以获取这些参数机器含义。
sudo docker help run | grep -E 'bps|IO'
2.Docker I/O 管理相关参数。
参数名称 | 说明 |
---|---|
–blkio-weight | 可以通过–blkio-weight修改容器 blkio 的权重,权重值为10~1000 |
–blkio-weight-device | 指定某个设备的权重 |
–device-read-bps | 按每秒读取设备的数据量设定上限 |
–device-read-iops | 按照每秒读操作的次数设定上限 |
–device-write-bps | 按每秒写入块设备的数据量设定上限 |
–device-write-iops | 按照每秒写操作次数设定上限 |
3.下面通过两个示例来演示如何在启动了的 Docker 容器中使用上面的参数来对容器使用的 I/O 带宽进行限定
示例一
1.使用 --device-read-bps 和 --device-write-bps 参数限定容器的读写速率。
sudo docker run -it --rm --device-write-bps /dev/sda:1mb centos /bin/bash
2.在容器中执行以下命令。其中,oflag=direct 表示读写数据采用直接 I/O 方式。
dd if=/dev/zero of=test.out bs=1M count=200 oflag=direct
3.在宿主机上使用 iotop 命令观察容器的写入速度,会发现容器的写入速度被限定在1035kb/s(即 1 MB/s 左右)。
4.以下语句将限制容器的读取速度为 1MB/s。
sudo docker run -it --rm --device-read-bps /dev/sda:1mb centos /bin/bash
示例二 使用 --device-read-iops 和 --device-write-iops 参数限定容器的读写次数。
参数 --device-read-iops 和 --device-write-iops 的格式如下,其中,limit必须是正整数。
--device-read-iops <device-path>:<limit>
--device-write-iops <device-path>:<limit>
以下是操作步骤。
1.为了观察结果,先在宿主机上安装 sysstat 软件包。
sudo apt-get install sysstat
2.创建并启动容器,通过使用 --device-write-iops 参数将容器写数据的速率设定为每秒5次。
sudo docker run -it --rm --device-write-iops /dev/sda:5 centos /bin/bash
3.在容器中执行以下命令,其中,oflag=direct 表示读写数据采用直接 I/O 方式。
dd if=/dev/zero of=test.out bs=1M count=200 oflag=direct
4.在宿主机上使用以下命令观察输出结果,这个命令每个1秒刷新1次。
iostat 1
5.以下语句会将容器读取数据的速率设定为每秒5次
sudo docker run -it --rm --device-read-iops /dev/sda:5 centos /bin/bash
管理Docker容器中的数据
在生产环境中使用 Docker,一方面,需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在 Docker 的容器被删除后,并不会涉及容器的数据管理。。
那么如何现实信息的持久化呢?这必然涉及容器的数据管理。
在 Docker 容器中实现数据管理的两种方式
1.数据卷(Data Volumes)
数据卷本质上是一个挂载目录,类似使用 Linux 的 mount 命令挂载的目录。数据卷可以供容器使用,并且可以在不同的容器之间共享和重用数据卷。对数据卷的修改会立即生效。数据卷与容器彼此独立,对数据卷的更新不会影响镜像
即使容器被删除,容器卷默认也会一直存在,直到数据卷被删除为止。
在 Docker 中可以使用 -mount 和 -v 两种方式给容器挂载数据卷。
2.数据卷容器(Data Volume Containers)
数据卷容器是一种特殊的容器,用来维护数据卷。它可以在多个容器之间共享数据信息。利用数据卷容器可以很方便的完成数据迁移。
使用数据卷管理 Docker 容器中的数据
下面通过具体实战来演示。
1.创建一个名为 “myvolume” 的数据卷。
sudo docker volume create myvolume
2.查看所有的数据卷。
sudo docker volume ls
3.使用 “docker inspect volume” 命令查看数据卷的详细信息。
sudo docker inspect myvolume
4.启动一个容器,并使用 myvolume 数据卷。这里使用 Nginx 镜像创建一个容器,并将容器的 80 端口映射到宿主机的 1234 端口,容器名称为 “mynginx”
sudo docker run -d -p 1234:80 --name mynginx --mount type=volume,source=myvolume,target=/usr/share/nginx/html/ nginx
其中的参数说明如下:
–mount:指定在容器启动时挂载数据卷
type:指定数据卷挂载的方式,它有三个值,看下表。
type的取值 | 说明 |
---|---|
volume | 普通数据卷,这是默认的type类型。其函数映射到主机 “、var/lib/docker/volumes” 目录下 |
bind | 绑定数据卷。使用这种类型可以在挂载数据卷时将其映射到主机的指定目录下 |
tmpfs | 临时数据卷,只将容器的目录挂载到宿主机的内存中。一般在实际环境中不会使用这种方式 |
source:指定宿主机上的目录或者数据卷。这里使用在第一步所创建的数据卷myvolume
target:将容器中的 “/usr/share/nginx/html/” 目录挂载到主机
通过宿主机的 “/var/lib/docker/volumes/myvolume/_data” 目录可以访问容器内部的 “/usr/share/nginx/html/” 目录。
5.切换到 “/var/lib/docker/volumes/myvolume/_data” 目录下,并修改 Nginx的首页 index.html 文件的内容
cd /var/lib/docker/volumes/myvolume/_data
echo "<h1>New Nginx Home Page</h1>" > index.html
6.通过浏览器访问宿主机的 1234 端口,打开Nginx的主页会看到显示的就是新修改的Nginx主页。
7.在挂载数据卷时,也可以使用 -v 参数。以下命令是将宿主机的 “/root” 目录挂载到了容器内的 “/root/container/mydatavolume” 目录下。下图表示挂载成功了。
sudo docker run -it -v /root:/root/container/mydatavolume centos bash
需要说明的是,使用这样的方式挂载的数据卷默认的权限是“读写”(rw),用户也可以通过 ro 将其指定为 “只读” 。
sudo docker run -it -v /root:/root/container/mydatavolume:ro centos bash
使用数据卷容器管理 Docker 容器中的数据,暂时不写了。有需要的可以留言。
相关文章:

Docker实战——容器
目录 Docker 容器的基本概念与操作1.使用“docker create”创建容器。这里基于Nginx的镜像创建了一个容器,名字为mycontainer。2.使用“docker ps -a”命令查看所有的容器,这时的容器不一定是运行状态。3.使用 “docker start” 命令可以启动容器。4.使用…...

亚信安慧AntDB开启超融合数据库新纪元
(一) 前言 据统计,在信息化时代的今天,人们一天所接触到的信息量,是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外,人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&…...

数学建模【多元线性回归模型】
一、多元线性回归模型简介 回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是,通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进…...

【 10X summary report】怎么看?详细解读笔记
报告内容 在开始正式的分析之前,需要查看在对齐和计数过程中生成的任何总结统计信息。下图是由Cell Ranger工具创建的10X总结报告,在从10X scRNA-seq实验生成计数矩阵时会生成。 The left half of the report describes sequencing and mapping statist…...
K8S—Pod控制器
目录 1.什么是POD控制器 2.POD控制器有几种类型 3.POD与控制器之间的关系 4.示例 4.1 Deployment 4.2 SatefulSet ①为什么要有headless? ②为什么要有volumeClainTemplate? ③服务发现:就是应用服务之间相互定位的过程。 ④K8S里服…...

LabVIEW石油钻机提升系统数字孪生技术
LabVIEW石油钻机提升系统数字孪生技术 随着数字化、信息化、智能化的发展,石油钻采过程中的石油钻机数字化技术提升成为了提高钻井效率、降低生产成本的重要途径。基于中石油云平台提供的数据,采用数字孪生技术,对石油钻机提升系统进行数字化…...
C#双向链表实现:在当前节点后插入新数据的方法Insert()
目录 1.定义一个泛型节点类并自动属性 2.定义链表类,并实现Append、Print、MoveFirst、 Insert 3.Main方法 1.定义一个泛型节点类并自动属性 /// <summary> /// 定义泛型节点类 /// </summary> /// <typeparam name"T">泛型运算符&…...

10-Java装饰器模式 ( Decorator Pattern )
Java装饰器模式 摘要实现范例 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构 装饰器模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供…...

Vue.js 实用技巧:深入理解 Vue.set 方法
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

单词规律00
题目链接 单词规律 题目描述 注意点 pattern只包含小写英文字母s只包含小写英文字母和 ’ ’s不包含任何前导或尾随对空格s中每个单词都被 单个空格 分隔 解答思路 本题与上一次同构字符串类似,思路可以参照同构字符串 代码 class Solution {public boolean …...

vue3 vite项目一运行就401(Unauthorized)
问题:项目一执行: pnpm run dev, 启动就出错, Failed to load resource: the server responded with a status of 401 (Unauthorized) 分析: 项目之前是正常运行的,没有问题,回溯刚刚改动,还原…...

LeetCode102.二叉树的层序遍历
题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]输入:root [1] 输出&am…...
Java底层自学大纲_JVM篇
JVM专题_自学大纲所属类别学习主题建议课时(h) A 深入理解Java虚拟机001 JVM类加载器设计原理2.5 A 深入理解Java虚拟机002 基于SPI破解双亲委派机制2.5 A 深入理解Java虚拟机003 JVM内部结构分析2.5 A 深入理解Java虚拟机004 字符串常量池原理2.5 …...

数据可视化?这些平台能处
图表在各行各业都起到举重若轻的作用,无论是项目汇报、业绩分析,亦或是数据挖掘、统计分析,良好的可视化可以为我们的阐述起到画龙点睛的效果。在一篇文章中,如果只有密密麻麻的文字堆积,无论是谁恐怕都无法长期保持注…...

[ai笔记14] 周鸿祎的ai公开课笔记1
欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第14篇分享! 本周二月的最后一周,并不是闲下来了,反而是开始进行一些更多的深入实践,关于gpt的主体架构、关于prompt,同时也看了不少书和直播&…...
在Linux系统中创建新用户并登录
1 创建新用户(使用 useradd 或 adduser 命令) 使用 useradd 命令(不带交互式选项)创建新用户,同时默认会在 /home 目录下创建同名目录作为家目录: sudo useradd -m 新用户名在执行上述命令后,…...

Vue.js+SpringBoot开发高校实验室管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…...

文献阅读笔记《Spatial-temporal Forecasting for Regions without Observations》13页
目录 目录 目录 发行刊物 ABSTRACT 1 INTRODUCTION 2 RELATED WORK(相关工作 2.1 Spatial-temporal Forecasting(时空预测 2.2 Spatial-temporal Forecasting withIncomplete Data(不完全数据的时空预测 2.3 Graph Contrastive Learn…...
如何学习openfoam
学习OpenFOAM的详细步骤、流程、学习网站、练习案例以及B站学习资源推荐如下: 一、详细步骤和流程 安装OpenFOAM:首先,你需要在你的计算机上安装OpenFOAM。你可以从OpenFOAM的官方网站下载适合你的操作系统的安装包,然后按照官方提…...
vue前端密码加密,springboot后端密码解密
1.模块安装 1 npm install crypto-js 2.src–>util–>secret.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 import CryptoJS from crypto-js // 默认的 KEY …...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...