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

Docker详解

云是一种服务理念。在云里docker是业务的最小载体

doker是管理容器的引擎,为应用打包、部署平台、而非单纯的虚拟化技术

1.轻量级虚拟化

2.一致性

4.高效的资源利用

5.易于部署和扩展

docker和虚拟机的区别:

虚拟机:真机需要一个操作系统,虚拟机需要一个操作系统,两个操作系统内核完全隔离

docker:docker运行在真实的操作系统之间,但容器间的隔离性差,用策略做安全隔离

docker最大的问题是安全性

一、docker部署

1.部署docker软件仓库

[root@docker ~]# cd /etc/yum.repos.d/ [root@docker yum.repos.d]# vim docker-ce.repo

[docker] name=docker baseurl=Index of /docker-ce/linux/rhel/9/x86_64/stable/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror gpgcheck=0

2.下载docker

[root@docker ~]# yum install docker-ce.x86_64

3.启动docker

[root@docker ~]# systemctl enable --now docker

[root@docker ~]# docker info //查看docker版本

4.配置镜像加速器

[root@docker ~]# cd /etc/docker/ [root@docker docker]# vim daemon.json

{

"registry-mirrors": ["https://1gvlg6x3.mirror.aliyuncs.com"]

}

[root@docker docker]# systemctl restart docker

5.加载镜像

[root@docker ~]# docker load -i nginx-latest.tar.gz

此时docker就部署好了,现在运行一个web服务来验证是否部署成功

[root@docker ~]# docker run -d --rm --name webserver -p 80:80 nginx

run -d :在后台运行

--rm:容器关闭后就将他删掉

-p:暴露的端口,前面是本机的端口,后面是容器的端口

3.在内核参数里将group2降级到 group,且将iptables作为默认的火墙工具

二、docker基本命令

docker image inspect nginx:latest 镜像内容

docker history nginx:latest 镜像结构,查看容器使用的端口

docker image save -o nginx-latest.tar.gz镜像导出

docker load -i nginx-latest.tar.gz 镜像导入

docker rmi nginx:latest 删除镜像

docker rm test 删除容器

docker run -it --name test busybox i:交互式运行,t:打开一个终端

doocker attach test //进入容器(ctrl pq)

docker run -it --name test --network none busybox 在开启docker时让它没有网络(默认使用桥接接口)(--network 指定网络)

[root@node ~]# docker exec -it test /bin/bash 进入到容器的内部

[root@node ~]# docker attach test 容器退出但未停止,可使用这个命令再次进入(ctrl+d :退出且停止,ctrl+pq:退出但不停止)

docker exec -it test ip ad 在退出但未停止的状态下,可在容器的外部执行命令

docker inspect test 容器运行的信息

docker container prune -f 删除所有停止的容器

容器内容提交(分层提交)

想要容器的内容在容器被删掉后仍然存在,需要提交动作

[root@node ~]# docker commit -m "add zeefile" test busybox:v1生成一个新的镜像

[root@node ~]# docker run -it --name test busybox:v1

每提交一层,再创建新的镜像后上次提交的变为只读层

[root@node ~]# docker cp test:/file1 /mnt 将容器的内容拷贝到本机

[root@node ~]# docker cp /etc/passwd test:/ 将本机的东西拷贝到容器

[root@node ~]# docker logs test 查看容器的日志

三、docker镜像构建

3.1镜像构建过程

commit做的镜像不利于审计,我们一般用docker bulid

1.创建一个docker目录

[root@docker ~]# mkdir docker [root@docker ~]# cd docker/

2.编辑dockerfile文件

[root@docker docker]# vim Dockerfile

FROM busybox RUN touch /zeefile

3.对文件进行构建

[root@docker docker]# docker build -t busybox:v2 .//当前位置

docker build -f (Dockerfile所在位置) -t busybox:v3

[root@docker docker]# docker history busybox:v2

[root@docker docker]# docker run -it --rm --name test1 busybox:v2//此时可以看到zeefile

3.2构建参数

LABEL KEY:指定作者信息

FROM busybox

RUN touch /zeefile

LABEL Mail=1551145187@qq.com

COPY:复制文件

FROM busybox

RUN touch /zeefile

LABEL Mail=1551145187@qq.com

COPY passwd /passwd

ADD:指定压缩文件或url

FROM busybox

RUN touch /zeefile

LABEL Mail=1551145187@qq.com

ADD test.tar.gz /mnt

RUN:在容器构建的过程当中运行什么

FROM busybox

RUN touch /zeefile

LABEL Mail=1551145187@qq.com

ADD test.tar.gz /mnt

RUN mkdir /zee #在构建了镜像以后它会多一个zee目录

CMD:在启动容器时自动运行动作,可以被替代,(在run命令后加sh)

FROM busybox

RUN touch /zeefile

LABEL Mail=1551145187@qq.com

ADD test.tar.gz /mnt

RUN mkdir /zee

CMD ["/bin/sh","-c"," echo hello zee] //-c表示用shell执行什么命令

ENV:指定环境变量

ENV name=zee

CMD ["/bin/sh","-c"," echo $name]

ENTRYPOINT:与CMD类似,但不可被替代

ENV name=zee

CMD ["/bin/sh","-c"," echo $name]

ENTRYPOINT ["/bin/sh","-c"," echo end]

EXPOSE:暴露端口

EXPOSE 80 443

ENV name=zee

CMD ["/bin/sh","-c"," echo $name]

ENTRYPOINT ["/bin/sh","-c"," sleep 1000000"]//常驻程序

WORKDIR:工作目录(不写工作目录运行时在‘/’下)

EXPOSE 80 443

ENV name=zee

CMD ["/bin/sh","-c"," echo $name]

ENTRYPOINT ["/bin/sh","-c"," sleep 1000000"]

WORKDIR /mnt

VOLUME:申明数据卷,让容器将他的某个文件挂载到宿主机,宿主机通过这个文件向容器写东西

EXPOSE 80 443

ENV name=zee

CMD ["/bin/sh","-c"," echo $name]

ENTRYPOINT ["/bin/sh","-c"," sleep 1000000"]

WORKDIR /mnt

VOLUME /zee //宿主机的目录自动生成,可以把docker的数据持久化到宿主机(但此时没有建立数据卷,所以在docker关闭后数据也会随之消失)

3.3镜像构建企业

编辑Dockerfile文件

FROM centos:repo LABEL Mail=lee@timinglee.org ADD nginx-latest.tar.gz /mnt WORKDIR /mnt/nginx-latest.tar.gz RUN yum install gcc make pcre-devel openssl-devel -y RUN ./configure --prefix=/usr/local/nginx --with-http_ssl_mode --with_http_stub_status_mode RUN make RUN make install EXPOSE 80 443 VOLUME ["/usr/local/nginx/html"] CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off"]

此时构建镜像报错,因为容器无法下载软件,于是我们用本地的方式使容器可以下载软件

下载httpd

[root@docker docker]# dnf install httpd -y

将端口改为8888,80端口被占用

[root@docker docker]# vim /etc/httpd/conf/httpd.conf

[root@docker docker]# systemctl start httpd 在虚拟机多加一个rhel7.9镜像,创建目录,将目录挂载在sr1(新加的镜像)下

[root@docker docker]# mkdir /var/www/html/rhel7.9

[root@docker docker]# mount /dev/sr1 /var/www/html/rhel7.9/

将镜像提交

[root@docker docker]# docker commit -m "add repo" centos centos:repo

此时再构建镜像

[root@docker docker]# docker build -t nginx:v1 .

3.4镜像优化方案

四、docker仓库

4.1pull原理

1.docker客户端发送请求给索引(index)

2.索引根据认证给客户端一个token(令牌)

3.此时客户端直接连接库

4.库被连接的时候它会向索引去询问即会根据客户端持有的token跟index核实身份合法性

5.index确认此token的合法性

4.2搭建docker的私有仓库

1.拉取registry 镜像,查看镜像开启的端口

[root@docker ~]# docker history registry:latest

2.将端口暴露出来

[root@docker ~]# docker run -d -p 5000:5000 --restart=always registry

3.此时仓库就已经开了,就可以给仓库里推东西了,此时使用的使https需要认证,如果要用http的方式,则需要修改daemon.json文件

[root@docker ~]# vim /etc/docker/daemon.json

{ "insecure-registries": ["http://172.25.254.100:5000"] } [root@docker ~]# systemctl restart docker.service

[root@docker ~]# docker tag nginx:latest 172.25.254.100:5000/nginx:latest [root@docker ~]# docker push 172.25.254.100:5000/nginx:latest

4.查看数据上传在哪里

[root@docker ~]# docker inspect unruffled_kare

5.要看仓库里有哪些镜像

[root@docker ~]# curl 172.25.254.100:5000/v2/_catalog {"repositories":["nginx"]}

4.3docker仓库数据传输加密

给镜像仓库添加认证key

1.创建一个目录

[root@docker ~]# mkdir certs

2.在这个目录中建立加密文件,且要给仓库名(仓库地址)做解析 [root@docker ~]# vim /etc/hosts

[root@docker ~]# openssl req -newkey rsa:4096 -nodes -sha256 \
​
> -keyout certs/zee.org.key \
> -addext "subjectAltName = DNS:reg.zee.org" \#添加证书扩展信息
> -x509 -days 365 -out certs/zee.org.crt

3.建立启动registry仓库

docker run -d -p 443:443 --restart=always -v /root/certs:/certs

-e REGISTRY_HTTP_ADDR=0.0.0.0:443

-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/zee.org.crt

-e REGISTRY_HTTP_TLS_KEY=/certs/zee.org.key registry:latest

4.此时上传镜像会报错,没有认证,要用这个仓库需要docker加载它的证书

[root@docker ~]# mkdir -p /etc/docker/certs.d/reg.zee.org [root@docker ~]# cp /root/certs/zee.org.crt /etc/docker/certs.d/reg.zee.org/ca.crt

[root@docker ~]# systemctl restart docker.service

此时就可以推送上去,其他主机要想使用镜像仓库也需要有/etc/docker/certs.d/reg.zee.org/ca.crt证书

五、搭建docker-hub仓库

1.解压缩 软件包

2.解压缩后,会有harbor的目录,进入目录,将harbor.yml.tmpl复制为harbor.yml

[root@dockerhub harbor]# cp harbor.yml.tmpl harbor.yml

3.重新生成一个证书

4.进入复制好的harbor.yml文件

hostname: reg.zee.org//改为证书中的DNS

certificate: /data/certs/zee.org.crt private_key: /data/certs/zee.org.key//修改认证文件路径

harbor_admin_password: zee//修改密码

5.将生成的证书复制到data下的certs下

6.启动

./install.sh --with-chartmuseum

7.管理harbor仓库

[root@dockerhub ~]# docker compose up -d

[root@dockerhub ~]# docker compose stop

六、Docker网络

docker安装后会有三种网络

bridge、host、none

6.1docker原生bridge网络

企业9中默认使用的是nftable,我们需要将它换为iptable

grubby --update-kernel ALL --args iptables=true

[root@dockerhub ~]# docker network rm//删除

[root@dockerhub ~]# docker network ls//查看docker网络情况

运行一个容器,并将它的网络模式改为桥接,进入容器后,可以ping通外网,因为,此时容器的网关是docker0,相当于将宿主机当作路由器,dokcer0相当于路由器对内的接口,docker0通过内核路由功能到达eth0,到达eth0做地址伪装,伪装为eth0的ip,然后就可以出去了(如果我们将iptables的地址伪装功能禁用,此时容器仍然可以ping通外网,因为他还有dockerproxy功能)

docker run -it --name webserver --network bridge busybox

6.2docker自定义网络

bridge

overlay

macvlan

6.2.1自定义桥接

原生有桥接,为什么要自定义桥接:docker桥接的ip与开启的允许有关,ip是一直变动的,(但容器名称不变,所以不论是k8s还是容器都是通过容器名称进行通信)原生的桥接网络当中没有dns插件,所以无法通过名称通信,所以我们要建立一个bridge

[root@dockerhub ~]# docker network create mynet1 -d bridge

建立好后使用自定的桥接就可以实现使用名称进行通信

6.2.2如何让不同的自定义网络互通

不同的网络通过火墙策略隔离, 所以不同的网络不能互相通信

本来两个容器使用的是两个不同的网络栈,如果我们要他们能够相互之间通信,我们需要给其中一个容器增加一块网卡,此时就可使得容器间通信

[root@dockerhub ~]# docker network create mynet1 -d bridge

[root@dockerhub ~]# docker network create mynet2 -d bridge

[root@dockerhub ~]# docker run -it --name test --network mynet1 busybox

[root@dockerhub ~]# docker run -it --name test1 --network mynet2 busybox

[root@dockerhub ~]# docker network connect mynet1 test1

6.2.3joined容器网络

两个容器共享同一个网络栈,业务耦合度高,两个业务彼此运行

[root@dockerhub ~]# docker run -it --name test1 --network container:test busybox//第二个容器使用的是第一容器的网络,他们的ip相同,它访问的是自己的回环接口

实例

[root@dockerhub ~]# docker run -d --name mysqladmin --network mynet1 \

-e PMA_ARBITRARY=1 \ -p 80:80 phpmyadmin:latest

[root@dockerhub ~]# docker run -d --name mysql --network container:mysqladmin

-e MYSQL_ROOT_PASSWORD='zee'

mysql:5.7

[root@dockerhub ~]# docker exec -it mysql bash

6.3容器访问外网

将nftables改为iptables,修改的文件是

[root@dockerhub entries]# cd /boot/loader/entries/

[root@dockerhub entries]# cat e2916e407318490f9720641b4712dd0b-5.14.0-162.6.1.el9_1.x86_64.conf title Red Hat Enterprise Linux (5.14.0-162.6.1.el9_1.x86_64) 9.1 (Plow) version 5.14.0-162.6.1.el9_1.x86_64 linux /vmlinuz-5.14.0-162.6.1.el9_1.x86_64 initrd /initramfs-5.14.0-162.6.1.el9_1.x86_64.img $tuned_initrd options root=/dev/mapper/rhel-root ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet selinux=0 net.ifnames=0 iptables=true grub_users $grub_users grub_arg --unrestricted grub_class rhel

运行一个容器,可以看到这个容器将真机作为路由器,而在真机的nat表中可以看到,对172.17.0.0做了地址伪装,所以容器可以访问外网,当我在iptables策略中将此策略删除则无法对外网进行通信

[root@dockerhub ~]# iptables -t nat -D POSTROUTING 1

重启docker后策略就会回来

[root@dockerhub ~]# iptables -t nat -nL

由此我可以知道是通过iptables策略进行通讯

6.4外网访问docker容器

DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:80

4990 ? Sl 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.2 -container-port 80 4999 ? Sl 0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 80 -container-ip 172.17.0.2 -container-port 80

此时将第二条策略删掉,依然能够访问,双保险,不单走火墙策略还会走docker-proxy

相关文章:

Docker详解

云是一种服务理念。在云里docker是业务的最小载体 doker是管理容器的引擎,为应用打包、部署平台、而非单纯的虚拟化技术 1.轻量级虚拟化 2.一致性 4.高效的资源利用 5.易于部署和扩展 docker和虚拟机的区别: 虚拟机:真机需要一个操作系…...

清晰易懂的Maven安装教程(含自定义依赖包位置)

初学者也能看懂的 Maven 安装教程(含自定义依赖包位置) Maven 是一个强大的项目管理和构建工具,广泛用于 Java 项目的依赖管理和构建自动化。本教程将手把手教你如何在 Windows 系统上安装 Maven,并配置环境变量,同时…...

王道数据结构6.3

顶点x的第一个邻接点以及下一个邻接点 int first_neighbor(Algraph G, int x){if(G.vertices[x].firstarc! nullptr){return G.vertices[x].firstarc->adjvex;}else return -1; }int next_neighbor(Algraph G,int x,int y){ArcNode *pG.vertices[x].firstarc;while(p! null…...

【Linux操作系统——学习笔记二】Linux简单导航命令操作

一、前言 学习Linux,本质上是学习在命令行下熟练使用Linux的各类命令。 命令行:是一种通过输入命令和参数与计算机系统进行交互的方式,可以使用各种字符化命令对系统发出操作指令,打开Linux终端,进入命令行界面。 …...

贪心算法——c#

贪心算法通俗解释 贪心算法是一种"每一步都选择当前最优解"的算法策略。它不关心全局是否最优,而是通过局部最优的累积来逼近最终解。优点是简单高效,缺点是可能无法得到全局最优解。 一句话秒懂 自动售货机找零钱:用最少数量的…...

SPI 总线协议

1、协议介绍 SPI,是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。 SPI,是一种高速的,全双工,同步的通信总线。主节点或子节点的数据在…...

单片机开发资源分析的实战——以STM32G431RBT6为例子的单片机资源分析

目录 第一点:为什么叫STM32G431RBT6 从资源手册拿到我们的对STM32G431RBT6的资源描述 第二件事情,关心我们的GPIO引脚输出 第三件事情:去找对应外设的说明部分 第一点:为什么叫STM32G431RBT6 对于命名规则不太熟悉的朋友看这里…...

物联网(IoT)架构中,平台层的应用与技术

在物联网(IoT)架构中,平台层是连接物理设备(感知层)和应用服务(应用层)的核心部分。它负责数据的采集、处理、存储、分析以及设备管理等功能,是物联网系统的“大脑”。以下是平台层的主要功能及其技术实现手段: 平台层的主要功能 设备管理: 功能:管理物联网设备的注…...

大语言模型的压缩技术

尽管人们对越来越大的语言模型一直很感兴趣,但MistralAI 向我们表明,规模只是相对而言的,而对边缘计算日益增长的兴趣促使我们使用小型语言获得不错的结果。压缩技术提供了一种替代方法。在本文中,我将解释这些技术,并…...

JVM 2015/3/15

定义:Java Virtual Machine -java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收 数组下标越界检测 多态 比较:jvm/jre/jdk 常见的JVM&…...

DeepSeek辅助学术写作中期能力及提示词分享

目录 确立三论 收集资料 选取论据 展开论证 大家好这里是AIWritePaper官方账号!更多内容👉AIWritePaper~在如今这个学术圈的“快车道”上,时间就像是一场永不停歇的赛跑,而论文质量则是那颗我们拼命追逐的“金苹果”。最近一款…...

Git 实战指南:本地客户端连接 Gitee 全流程

本文将以 Gitee(码云)、系统Windows 11 为例,详细介绍从本地仓库初始化到远程协作的全流程操作 目录 1. 前期准备1.1 注册与配置 Gitee1.2 下载、安装、配置客户端1.3 配置公钥到 Gitee2. 本地仓库操作(PowerShell/Git Bash)2.1 初始化本地仓库2.2 关联 Gitee 远程仓库3. …...

汇编基础知识

机器语言 1、机器语言是机器指令的集合,机器指令就是机器可以正确执行的命令,由二进制数组成 2、当今我们常用的是pc机,由一个芯片完成上述功能,即CPU是一种微处理器,每一种微处理器由于自身硬件设计和内部构造不同都…...

线程池的拒绝策略适用场景思考

ThreadPoolExecutor有四种拒绝策略。刚开始学习线程池的时候我就觉得,就是应该当任务饱和(达到拒绝策略)时,就应该拒绝任务,抛出异常。最近仔细思考了下,既然线程池这么设计,也应该有一定的道理…...

on-policy对比off-policy

目录 持续更新。。。 on-policy与off-policy的定义 Q-learning属于on-policy算法还是off-policy算法? 为什么off-policy适用于从离线经验或多种探索策略中学习,明明 On-policy 也可以基于探索学习的啊? 重要性权重方法 off-policy方法可…...

如何记录Matlab程序运行过程中所占用的最大内存(续)

在上一篇博客中,我们讨论了如何记录Matlab程序运行过程中所占用的最大内存。 博客原文:如何记录Matlab程序运行过程中所占用的最大内存-CSDN博客 但经过测试发现,这与实际有非常大的差异。运行如下例子: clear;clc; profile on…...

解决MySQL字符集冲突引发的“Illegal mix of collations”错误

引言 在开发过程中,我们常常会遇到数据库层面的字符集兼容性问题。本文将通过一个典型的案例,分析因字符集不匹配导致的 Illegal mix of collations 错误,并提供完整的解决方案,帮助开发者彻底规避此类问题。 问题现象 假设我们…...

Vue3:F12后,页面弹出runtime errors及提示的解决办法

解决: vue.config.jsdevServer: {client: {overlay: false}, },关闭提示 main.js // 定义特性标志 window.__VUE_PROD_DEVTOOLS__ false window.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ false...

学习笔记:黑马程序员JavaWeb开发教程(2025.3.17)

11.5 案例-文件上传-阿里云OSS-入门 出现报错:Process exited with an error: 1 (Exit value: 1),点击exec那一行,出现错误原因:Command execution failed. 在CSDN上找到了解决方法: 之后出现新的报错&…...

EDAS:投稿经验-word版本-问题解决

1. 字体不对,字体未嵌入问题 问题:word转PDF后,总是显示有字体格式不对(忘记截图了)。 办法:1. EDAS投稿PDF格式问题-CSDN博客-PDF上修改 IEEE论文检测的字体未嵌入问题Times New Ro…...

【数据结构初阶第十九节】八大排序系列(下篇)—[详细动态图解+代码解析]

hello,好久不见! 云边有个稻草人-CSDN博客 上篇内容,回顾一下吧【数据结构初阶第十八节】八大排序系列(上篇)—[详细动态图解代码解析]-CSDN博客 今天我们来学习下篇 目录 (2)快速排序 【挖坑法】 —思路 —思路…...

不可不知的分布式数据库-TiDB

不可不知的分布式数据库-TiDB 介绍TiDb架构TiDb与Mysql的区别功能特性性能表现数据可靠性运维管理成本 Docker部署TiDB1. 获取 TiDB 配置文件2. 启动 TiDB 集群3. 连接到 TiDB4. 停止和清理 TiDB 集群注意事项 实用案例TiDB实现分布式事务实现原理实现方式SQL 方式编程方式 注意…...

BUUCTF Pwn babyheap_0ctf_2017 Unsorted bin attack部分

checksec exeinfo 开启了全保护 64位 查看函数: 堆题 增删查改齐了 可以在编辑堆的时候重新设置大小 存在堆溢出 delete函数的指针清零了 无UAF 想法是通过unsorted bin泄露libc基址: from pwn import *p process(./babyheap) #p remote("node…...

AI绘画软件Stable Diffusion详解教程(11):图生图进阶篇(局部用上传蒙版重绘)

总的功能与上一篇相似,但是在Stable Diffusion网页上手工涂绘的方法,有可能会因不够精细,导致重绘的效果不佳,涂绘区与非涂绘区的衔接有可能会出问题。这个时候可以用photoshop来制作蒙版,精确的圈出需要重绘的地方&am…...

SAP的WPS导出找不到路径怎么办;上载报错怎么办

一.打开注册编辑器 二.输入以下地址 计算机\HKEY_CLASSES_ROOT\ExcelWorksheet\Protocol\StdFileEditing\Server 去除掉EXE后面的命令即可 二:WPS上载文件没反应怎么办 如何切换整合模式或多组件模式-WPS学堂 根据官方操作把整合模式改成多组件模式...

Go语言不定长参数使用详解

不定长参数(Variadic Parameters)使用详解 核心概念 语法特性:...T 表示函数可接受任意数量的T类型参数底层实现:不定长参数在函数内部实际存储为切片类型 []T展开操作符:调用时使用 slice... 可将切片展开为独立参数…...

django如何配置使用asgi

以下是 Django 配置使用 ASGI 的完整指南: 一、配置前提 Django 版本:确保使用 Django 3.0(原生支持 ASGI)必要依赖:pip install daphne channels二、基础配置步骤 1. 创建/修改 ASGI 入口文件 在 Django 项目根目录…...

在C语言基础上学Java【Java】【一】

众所周知,Java是C风格的语言,对于学过C语言的人学Java可以快速适应。 废话不多说,直接边看代码边学。 数据类型,输入和输出 public class a1 {//a1是类名,就是文件名,所有的可执行代码需要写在这个里面 /…...

使用 Promise 和 .then() 解决同异步问题

在购物车功能中,用户点击“加入购物车”或“删除购物车”时,可能会遇到数据同步问题。例如,当用户快速连续点击“删除”按钮时,可能会导致删除操作基于过时的数据,从而引发错误。为了解决这个问题,我们可以…...

defineExpose函数

在软件开发中&#xff0c;特别是在像 Vue.js 这样的框架中&#xff0c;defineExpose 是一个函数&#xff0c;用于显式地将组件的某些属性或方法暴露给其父组件或其他组件。这在你想控制组件的内部状态或功能对外部可见性时非常有用。 Vue.js 3 中的示例&#xff1a; <scri…...

LabVIEW烟气速度场实时监测

本项目针对燃煤电站烟气流速实时监测需求&#xff0c;探讨了静电传感器结构与速度场超分辨率重建方法&#xff0c;结合LabVIEW多板卡同步采集与实时处理技术&#xff0c;开发出一个高效的烟气速度场实时监测系统。该系统能够在高温、高尘的复杂工况下稳定运行&#xff0c;提供高…...

台式机电脑组装---电源

台式机电脑组装—电源 22 33 主板供电是聚集了12V&#xff0c;5V,3.3V的24pin CPU供电的话主要是12V的44pin供电 44pin合并之后&#xff0c;就是8pin 55 SATA硬盘会使用饼io口取电&#xff0c;从电源获取12v,5v,3.3v的电 33...

中小型企业大数据平台全栈搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆级配置指南

目录 背景‌一、环境规划与依赖准备‌1. 服务器规划(3节点集群)2. 系统与依赖‌3. Hadoop生态组件版本与下载路径4. 架构图二、Hadoop(HDFS+YARN)安装与配置‌1. 下载与解压(所有节点)2. HDFS高可用配置3. YARN资源配置‌4. 启动Hadoop集群三、MySQL安装与Hive元数据配置…...

2023年蓝桥杯 省赛 ————特殊日期

2.特殊日期 - 蓝桥云课 错误原因&#xff1a; 分不清大小月&#xff0c;将闰年的2月天数当成了28天&#xff0c;非闰年当成了27天&#xff0c;因此出错 错误代码如下&#xff1a; package Lanqiao;import java.util.Scanner;/*** author zb* date2025/3/16 13:22*/ public …...

电动车出入库管理软件,电动车维修保养售后服务管理系统,佳易王电动车店管理系统操作教程

一、概述 本实例以 佳易王电动车店管理系统 为例说明&#xff0c;其他版本可参考本实例。试用版软件资源可到文章最后了解&#xff0c;下载的文件为压缩包文件&#xff0c;请使用免费版的解压工具解压即可试用。 软件特点&#xff1a; 操作便捷性高 软件功能实用且…...

计算机网络-综合布线系统

工作区子系统&#xff1a;由信息插座、插座盒、连接跳线和适配器组成 水平子系统&#xff1a;由一个工作区的信息插座开始&#xff0c;经水平布置到管理区的内测配线架的线缆所组成 管理子系统&#xff1a;由交连、互连配线架组成。管理子系统为连接其它子系统提供连接手段 …...

【蓝桥杯】24省赛:数字串个数

思路 本质是组合数学问题&#xff1a; 9个数字组成10000位数字有9**10000可能 不包括3的可能8**10000 不包括7的可能8**10000 既不包括3也不包括77**10000 根据容斥原理&#xff1a;结果为 9 ∗ ∗ 10000 − 8 ∗ ∗ 10000 − 8 ∗ ∗ 10000 7 ∗ ∗ 10000 9**10000 - 8**10…...

手写一些常见算法

手写一些常见算法 快速排序归并排序Dijkstra自定义排序交替打印0和1冒泡排序插入排序堆排序欧几里得算法求最大公约数 快速排序 public class Main {public static void main(String[] args) {int nums[] {1,3,2,5,4,6,8,7,9};quickSort(nums,0,nums.length - 1);}private st…...

AI自动生成数据

文章目录 概要案例生成简单的文本数据 概要 合成数据是人工生成的数据而不是从现实世界事件中收集的数据。它用于模拟真实数据&#xff0c;而不会泄露隐私或遇到现实世界的限制 安装依赖&#xff1a;pip install langchain_experimental 合成数据的优势&#xff1a; 1.隐私…...

【STM32】从新建一个工程开始:STM32 新建工程的详细步骤

STM32 开发通常使用 Keil MDK、STM32CubeMX、IAR 等工具来创建和管理工程。此处是 使用 Keil MDK5 STM32CubeMX 创建 STM32 工程的详细步骤。 新建的标准库工程文件已上传至资源中&#xff0c;下载后即可直接使用。 标准库新建 STM32 工程的基本目录结构&#xff1a;STD_STM…...

【Go语言圣经3.6】

目标 概念 常量与变量的主要区别在于&#xff1a; 不可变性&#xff1a;常量在声明后其值就固定下来&#xff0c;不能再被修改。这保证了程序运行时不会因意外修改而导致错误。 使用不可变数据&#xff08;例如数学常数 π&#xff09;可以避免意外修改带来的问题 编译期计算…...

[IP]UART

UART 是一个简易串口ip&#xff0c;用户及配置接口简单。 波特率从9600至2000000。 该 IP 支持以下特性&#xff1a; 异步串行通信&#xff1a;标准 UART 协议&#xff08;1 起始位&#xff0c;8 数据位&#xff0c;1 停止位&#xff0c;无奇偶校验&#xff09;。 参数化配置…...

Windows主机、虚拟机Ubuntu、开发板,三者之间文件互传

以下内容源于日常学习的整理&#xff0c;欢迎交流。 下图是Windows主机、虚拟机Ubuntu、开发者三者之间文件互传的方式示意图&#xff1a; 注意&#xff0c;下面谈及的所有方式&#xff0c;都要求两者的IP地址处于同一网段&#xff0c;涉及到的软件资源见felm。 一、Windows主…...

4.好事多磨 1

前言 我们已经学习了创建套接字和向套接字分配地址&#xff0c;接下来正式讨论通过套接字收发数据。 之前介绍套接字时举例说明了面向连接的套接字和面向消息的套接字这2种数据传输方式&#xff0c;特别是重点讨论了面向连接的套接字。这次将具体讨论这种面向连接的服务器端/客…...

AI预测体彩排3新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月18日第22弹

前面由于工作原因停更了很长时间&#xff0c;停更期间很多彩友一直私信我何时恢复发布每日预测&#xff0c;目前手头上的项目已经基本收尾&#xff0c;接下来恢复发布。当然&#xff0c;也有很多朋友一直咨询3D超级助手开发的进度&#xff0c;在这里统一回复下。 由于本人既精…...

相机标定之DLT算法学习

文章目录 1.针孔相机模型2.各个坐标系的定义1&#xff09;世界坐标系&#xff08;world coordinate&#xff09;2&#xff09;相机坐标系&#xff08;camera coordinate&#xff09;3&#xff09;图像坐标系&#xff08;film coordinate&#xff09;4&#xff09;像素坐标系&am…...

Flask实时监控:打造智能多设备在线离线检测平台(升级版)

前言 武林之中&#xff0c;最讲究的便是“掌控”。若是手下弟子忽然失踪&#xff0c;若是江湖好友生死未卜&#xff0c;岂不令人寝食难安&#xff1f;今日&#xff0c;吾等化身技术侠客&#xff0c;祭出Flask实时监控大法&#xff0c;打造一款智能多设备在线离线检测平台&…...

【计算机网络】一二章

一 二 非常棒的例子 相同的传播时延&#xff0c;带宽越大&#xff0c;该链路上所能容纳的比特数越多 相同的传播时延&#xff0c;带宽越大&#xff0c;该链路上所能容纳的比特数越多 往返时间&#xff08;Round-Trip Time&#xff0c;RTT&#xff09;s是指从发送端发送数据分组…...

003-掌控命令行-CLI11-C++开源库108杰

首选的现代C风格命令行参数解析器! &#xff08;本课程包含两段教学视频。&#xff09; 以文件对象监控程序为实例&#xff0c;五分钟实现从命令行读入多个监控目标路径&#xff1b;区分两大时机&#xff0c;学习 CLI11 构建与解析参数两大场景下的异常处理&#xff1b;区分三…...

如何针对大Excel做文件读取?

针对大Excel文件&#xff08;如超过百万行&#xff09;的读取&#xff0c;传统的一次性加载到内存的方式会导致 内存溢出&#xff08;OOM&#xff09;&#xff0c;需采用 流式读取&#xff08;Streaming&#xff09; 或 分块读取&#xff08;Chunk&#xff09; 的策略。以下是具…...