Docker复习
目录
- 1. Docker的理解
- 1.1 Docker三要素
- 2 安装Docker
- 2.1 安装命令
- 2.2 配置阿里云加速器
- 3 Docker命令
- 3.1 启动类命令
- 3.2 镜像类命令
- 4 实战
- 4.1 启动容器,自动创建实例
- 4.2 查看Docker内启动的容器
- 4.3 退出容器
- 4.4 其他
- 4.5 导入导出文件
- 4.6 commit
- 5 Dockerfile
- 5.1 理解Dockerfile
- 5.2 制作镜像
- 5.2 虚悬镜像
- 6 Compose
- 6.1 下载Compose
- 6.2 docker-compose.yaml文件示例
- 6.3 使用compose
- 基础概念补充
- 1 挂载 Volume
- 2 网络 network
- 2.1. Docker容器之间如何通信的?
- 2.2 想看看Docker各个容器的网络信息
- 2.3 如何分配给容器Ip?
- 2.4 bridge模式
- 2.5 自定义网络名
- 2.6 host 网络类型
- 3 网关
1. Docker的理解
为什么要使用Docker?
-
在开发项目的过程中,开发人员一套环境(软件代码,JDK版本,Redis版本,数据库版本等环境),测试人员一套环境,运维人员一套环境。
-
开发人员自己可以运行程序,仅将源代码打包发给测试人员,测试人员需要按照要求配置出同样的运行环境,非常容易出现某处配置错误无法启动项目的情况。如使用了集群,不仅配置起来繁琐,工程量也大,维护更难。所以希望可以改善这种情况。
-
于是出现Docker,开发人员将 开发环境+源代码,全部打包发送,测试人员在Docker上简单部署(其实就是将文件上传到Docker),就可以启动项目了,不需要像之前那样,还得按照要求搭建运行环境。
什么是Docker?
- 对比VMware,我们需要一个本地服务器(自己的电脑),安装VM,在VM上安装centOS(一个或者多个),在centOS上安装软件。需要清楚的是:centOS本质上是一个Linux操作系统的镜像,也就是打包了Linxu一整套操作系统,所以比较大。因此安装几个centOS电脑资源就不够用了。而且每次创建centOS都得花费个3-5min,是比较慢的(我自己有时还得看教程安装)
- Docker引擎本质上就是将Linux操作系统的核心打包,并不是打包一整套操作系统。所以做到了轻量化,之前一台服务器安装一个VM,在VM上部署10台centOS,现在一台服务器安装一个Docker,可以部署100台容器。所以看到Docker对比VM就能理解了。只不过我们把VMware的centOS叫做虚拟机,也就是Docker的容器。
- 创建不同的虚拟机实现隔离。也就是创建不同的容器实现隔离
1.1 Docker三要素
-
镜像
将程序源代码+生产环境打包,制作成一个镜像文件(如跨境电商管理系统的镜像文件) -
容器实例
根据镜像文件创建运行实例,一个容器运行一种服务
-
仓库
存放镜像的地方,需要把镜像发布到仓库,再到仓库拉取下来。
- Docker公司提供的库:Docker Hub
- 阿里提供的仓库:阿里云
- 公司自己建立的库
2 安装Docker
2.1 安装命令
yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
docker version
docker run hello-world
2.2 配置阿里云加速器
1. mkdir -p /ect/docker
2. cd /ect/docker/
3. tee /ect/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://aa25jngu.mirror.aliyun.com"]
> }
> EOF
4. systemctl daemon-reload
5. systemctl restart docker
6. docker run hello-world
3 Docker命令
3.1 启动类命令
stystemctl start docker 启动
stystemctl stop docker 关闭
stystemctl status docker 查看状态
3.2 镜像类命令
查看镜像
1. docker images
- repository 仓库:存放下载的镜像
- Tag 标签:(例如mysql 5.6 版本,Tag就是5.6)不设置版本号,默认是latest,表示最新版本
- Image Id 唯一标识
根据镜像名称去查询仓库中的镜像查询redis镜像(未指定版本号)
2. docker search redis将查询结果限制展示5条
docker search --limit 5 redis
下载镜像查询redis镜像(未指定版本号,默认下载最新版)
3. docker pull redis查询redis镜像(指定版本号)
docker pull redis:6.0.8
查看docker资源使用情况
4. docker system df
查看操作系统的资源使用情况
删除镜像(指定名字)
5. docker rmi hello-world删除镜像(指定镜像的唯一标识)
docker rmi 对应的Image Id删除镜像(强制删除)
docker rmi -f hello-world 删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG删除全部
docker rmi -f $(docker images -qa)
4 实战
4.1 启动容器,自动创建实例
在Docker容器中启动ubuntu
启动容器中ubuntu实例
docker run -it ubuntu /bin/bash-i :指交互式访问
-t :指tty,即系统
it需要一起使用,即告诉系统,启动后不要立刻走,而是停下来等待我进一步操作。并且是以bash的交互方式
/bin/bash:以bash的方式
此时就可以操作ubuntu内部信息,比如查看ubuntu的文件啥的
4.2 查看Docker内启动的容器
container id:容器实例Id
表示使用ubuntu镜像创建了 Id=226a56fb739e 的容器实例,因为未指定名称,此时就随机分配了一个
现在再利用ubuntu镜像创建一个容器实例,并且 指定名称
使用--name指定名称
(bash 或者 /bin/bash 都可以)
docker run -it --name=My_Ubuntu02 ubuntu bash
此时就根据ubuntu镜像创建了两个容器实例
此时若提问:必须指定交互方式吗,如果不写呢?如这样:docker run -it ubuntu
因为Docker机制的问题,这样启动有时候会导致容器启动后紧接着直接关闭,添加上交互方式就是让容器启动后并停留住。
这种方式叫做前台交互式启动
还有一种后台交互式启动:docker run -d ubuntu
总结一下,
前台交互式启动:docker run -it ubuntu bash
后台交互式启动:docker run -d ubuntu
4.3 退出容器
- exit
run 进去容器,exit退出,容器停止
- ctrl+p+q
run进去容器,ctrl+p+q退出,容器不停止
退出后如何再进去呢?
- 第一种方式:
docker exec -it 容器实例ID
(推荐)
- 第二种方式:
docker attach -it 容器实例ID
区别:
exec会在容器中打开新的终端,并且启动新的进程,用exit退出,不会导致容器停止
attach直接进入容器终端,不启动新的进程,用exit退出,会导致容器停止
4.4 其他
- 启动已经停止的容器
docker start 容器ID或者容器名
- 重启容器
docker restart 容器ID或者容器名
- 停止容器
docker stop 容器ID或者容器名
- 强制停止容器
docker kill 容器ID或者容器名
- 删除已停止的容器
docker rm 容器ID
4.5 导入导出文件
将容器实例中的文件导出在本地
docker cp 容器实例Id:/路径/a.txt /主机路径
将容器实例打包成压缩包A.tar
docker export 容器实例Id > A.tar
4.6 commit
例如:我们使用ubuntu镜像创建了一个名为MyUbuntu01的实例,这个实例只包含了linxu核心的命令,我们现在实际业务需要修改内部的某个文件,想使用vim命令。MyUbuntu01内部没有
所以我们需要给其添加功能
如何做呢?先进入容器实例,依次执行命令
apt-get update
apt-get -y install vim
那我如果使用ubuntu镜像再创建一个名为MyUbuntu02的实例,也需要vim命令,岂不是还要添加一次功能。
这个时候,我们可以根据实例MyUbuntu01反向生成一个新的镜像,修改名称为new_ubuntu,同时也可指定版本用于区分(例如new_ubuntu:1.2)。这样根据new_ubuntu:1.2 创建的实例就都具有我们添加的vim功能了
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创作的目标镜像名:[TAG]
docker commit -m="vim cmd add ok" -a="zzyy" fahf33rfaaa new_ubuntu:1.2
5 Dockerfile
5.1 理解Dockerfile
我们已经学会使用镜像去创建容器实例,现在了解一下如何创建镜像
每个镜像背后都是由各自的Dockerfile制作的
因此学习一下DockerFile的语法规则
- from
在每个Dockerfile的第一行,表示当前镜像是基于哪个镜像进行变动的,也可以指定自己
- maintainer
镜像的作者,表明此镜像是谁做的
- run
这个run命令和docker run -it xxxx中的docker run不一样
docker run:这个run是在创建并启动实例
dockerfile内部的run:是在docker build时运行(创建镜像)
- expose
暴露端口 Docker容器端口:镜像实例暴露端口
比如为什么Tomcat可以用8080端口访问,就是因为其镜像暴露的端口设置成了8080
- workdir
修改进入容器后的落脚点(实例展示默认的落脚点)
如何修改
EVA MY_PATH /user/local
WORKDIR $MY_PATH
这样进去运行为镜像实例,就会切换到/user/local路径下,而不是默认落脚点
- env
设置环境变量
- copy
copy 路径A 路径B
A路径是本机资源路径,B路径是镜像中的路径,意思是将本地资源复制到镜像中指定的路径
copy --from=镜像名:TAG 路径A 路径B
例如COPY --from=oms-middleware-gosu-alpine-amd64:latest /usr/local/bin/gosu /bin/
A路径是镜像中路径,B路径也是镜像路径,意思是将名为XX的镜像A路径下的资源复制到 生成镜像B路径下
- add
表示将路径A的资源复制到路径B,并且自动解压tar压缩包
- volume
容器数据卷
- cmd
- Dockerfile内不写cmd指令,然后我们运行镜像实例时这样写的 docker run -it ubuntu /bin/bash
- Dockerfile内会这么写
CMD ["/bin/bash","run"]
,然后我们运行镜像实例时这样写的 docker run -it ubuntu ,实际上执行的命令是 docker run -it ubuntu /bin/bash
Dockerfile内写多个CMD命令CMD ["/bin/bash","run"]
CMD ["demo.sh","run"]
,然后我们运行镜像实例时这样写的 docker run -it ubuntu ,实际上执行的命令是 docker run -it ubuntu demo.sh (可以看到最后一个cmd命令会覆盖前面的cmd命令)
Dockerfile内写多个CMD命令CMD ["/bin/bash","run"]
,然后我们运行镜像实例时这样写的 docker run -it ubuntu demo.sh,实际上执行的命令是 docker run -it ubuntu demo.sh (可以看到最后一个dockerfile文件内的cmd直接失效)
- entrypoint
类似于CMD命令,不会被覆盖
Dockerfile文件,镜像 nginx:test
FROM nginxENTRYPOINT {"nginx","-c"} # 定参CMD {"/etc/nginx/nginx.conf"} # 变参
# Docker命令
docker run nginx:test
# 实际上执行命令docker run nginx:test nginx -c /etc/nginx/nginx.conf
# Docker命令
docker run nginx:test /etc/nginx/AAAA.conf
# 实际上执行命令docker run nginx:test nginx -c /etc/nginx/AAAA.conf
5.2 制作镜像
5.2 虚悬镜像
在构建镜像或者删除镜像时产生错误,导致创建了一个仓库名和TAG都为< none >的镜像,这种会有潜在的安全风险,建议删除
查询所有的虚悬镜像
docker image ls -f dangling=true
删除所有的虚悬镜像
docker image purne
6 Compose
6.1 下载Compose
搞一个新文件存放
curl -L "https://github.com/docker/compose/releases/download/v2.11.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composedocker-compose --version
前面利用镜像创建镜像实例的时候,需要执行 docker run -d 镜像名
考虑一个场景:在一个大型项目中,我们需要先启动mysql服务,再启动redis集群(有30个redis),最后再启动注册中心(consul),最最后再启动项目代码。
会有什么问题呢?
- 需要手动且按序 启动很多个容器(数量多+难记住顺序)
- 假如consul服务挂掉,重新启动consul的容器后,会变更新的网络地址,无法保证容器之间的通信
使用Compose工具,将如何启动的相关信息全部写在一个文件,我们仅执行这个文件,Docker会自动执行该文件内部的信息。此乃自动化部署。
所以Compose被称为:自动化统一编排工具,我们创建的文件名为docker-compose.yaml。可以看,其实就是一个yaml文件。yaml有自己的语法规则,学习springboot就知道了
6.2 docker-compose.yaml文件示例
看一个docker-compose.yaml文件示例
versdion:"3.6"servers: #表示有几个服务(有MyUbuntu和MyZookeeper服务)MyUbuntu: # 自定义,命名不冲突就行iamg: ubuntu:3.2 # 模版镜像的名字container_name: mu01 # 生成镜像的名字ports:- "6001:6001" # 端口号volumes:- /app/MyUbuntu:/data # 挂载network:- atguigu_net # 设置网路depends_on: # 表明需要先启动redis,mysql,再启动本服务- redis- mysqlMyZookeeper:# 自定义,命名不冲突就行......
network:atguigu_net # 设置网络
这个文件与我们执行此命令是一样的
docker run -d -p 6001:6001 -v /app/MyUbuntu:/data --network atguigu_net --name mu01 ubuntu:3.2
6.3 使用compose
- 编写docker-compose.yaml(重点)
- 执行docker-compose up -d
基础概念补充
1 挂载 Volume
挂载是什么?
主机上有A文件,容器有B文件,此时容器无法访问主机的A文件,仅仅可访问自己的B文件
将主机的A文件挂载到容器上,容器就可以访问主机的A文件,也可以访问自己的B文件
为什么不直接将主机A文件放在容器中?
例如容器大小是10Mb,文件A是1Gb,无法直接将文件A存放到容器内。
此时使用一个链接,将主机的文件A 链接在容器上,当容器需要访问文件A时,就顺着链子获取A。这就是挂载
使用挂载还有什么好处?
- 可以访问到主机的A文件,也就代表可以操作主机上A文件,可以保证数据持久化,若是只保存在容器,容器一重启就没了
- 数据共享:多个容器可以共享同一个挂载目录,实现数据共享
怎么挂载呢?
- 创建名为web的容器,并将主机的/src/web目录挂载到容器的/opt/web目录下
docker run -d --name web -v /src/webapp:/opt/webapp
2 网络 network
2.1. Docker容器之间如何通信的?
容器A:ip–127.0.0.1
容器B:ip–127.0.0.4
(注:在A,B同一网关下)
容器A通过ip连接 :ping 127.0.0.4 √,连接成功
2.2 想看看Docker各个容器的网络信息
选择一个镜像实例,查看具体网络情况
查看网关 Getway 和 地址 IPAddress
再看看另外一个镜像实例的网络情况
可以看到每个容器中镜像实例都有一个IP和网关,这个IP是怎么来的。其实不然,是Docker内部分配的
2.3 如何分配给容器Ip?
这就必须先了解Docker的网络模式
此图表示,网络模式有三种bridge(主要使用的),host ,null
这个name是什么意思?
选择一种网络模式后,必须自定义一个名字
我们定义方案A为dirver类型,以后谁想使用driver,直接勾选方案A。很方便管理
2.4 bridge模式
若容器A选择桥接模式后,docker会创建一个虚拟网桥docker0,docker0会给容器随机发一个Ip和网关
我怎么知道有虚拟网桥的?
输入ip addr
查看主机上的通信情况
docker0我明白了这个东西的存在,那下面两条红框是什么?
当然不是容器直接一根线就链接到虚拟网桥,而是有更多的细节在里面
当创建一个容器并且设置网络模式为bridge(创建时默认为bridge)时,虚拟网桥会创建一个网卡给容器A,自己留一个与之对应的接口。容器B,容器C也是同样的。
当我们在主机上输入 ip addr
时,veth 就是我们的接口标识。
现在我们切换到容器视角看看网络信息
总结一下
查看所有是桥接模式的容器docker network inspect bridge
2.5 自定义网络名
回到最开始的问题,docker容器之间如何通信?
前面说了根据Ip进行连接,那是不是容器A必须得知道容器B的Ip,第一次我告诉容器A了,10分钟后容器B挂掉了,我重启了容器B,这个时候容器B的IP就变成了新的,AB无法通信,除非A知道B最新的IP地址。
那这样岂不是特别麻烦,有没有什么办法解决呢?
既然容器IP是变动的,容器名不会变动,我们直接通过名字进行通信。
以前:容器A需要知道容器B的IPping 127.0.0.3
现在:容器A只需要知道容器B名字ping tomcat(容器B名字)
怎么做到呢?
- 创建自定义网络
- 新建容器并指定使用该网络
docker run -d -p 8081:8081 --network diy_name --name t1 tomcat bash
docker run -d -p 8081:8081 --network diy_name --name t1 ubuntu bash
- ping一下
docker exec -it t1 bash
进入容器t1
ping t2
连接容器t2
2.6 host 网络类型
容器共享主机的IP,不再分配容器单独的Ip。
3 网关
网关是什么?
比如我们在浏览器输入www.baidu.com,域名解析后会得到百度的IP地址。电脑的网卡会将IP发送给路由器的网关,网关先转发到本地网络查是否有此IP地址,若没有再转发到互联网去查此IP地址。
所以网关就是负责转发。
相关文章:

Docker复习
目录 1. Docker的理解1.1 Docker三要素 2 安装Docker2.1 安装命令2.2 配置阿里云加速器 3 Docker命令3.1 启动类命令3.2 镜像类命令 4 实战4.1 启动容器,自动创建实例4.2 查看Docker内启动的容器4.3 退出容器4.4 其他4.5 导入导出文件4.6 commit 5 Dockerfile5.1 理…...
华为OD机考--食堂供餐--带答案
题目描述: 某公司员工食堂以盒饭方式供餐。为将员工取餐排队时间降低为0,食堂的供餐速度必须要足够快。现在需要根据以往员工取餐的统计信息,计算出一个刚好能达成排队时间为0的最低供餐速度。即,食堂在每个单位时间内必须至少做出…...

C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行
C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行 安装newlife包 Program的Main()函数源码 using ConsoleApp3; using NewLife.Log;var server new NewLife.Http.HttpServer {Port 8080,Log XTrace.Log,SessionLog XTrace.Log }; serv…...

初识TDMQ
目录 一:需求背景二:相关文档三:验证TDMQ广播消息 一:需求背景 目前公司需要将决策引擎处理的结果, 一部分数据交给下游分析/入黑/通知等功能。因此就需要决策引擎生产结果让多方下游去消费。 而我需要实现下游的一部…...

UEditor 百度富文本编辑器使用 遇到问题
小小吐槽 碰到前后不分离项目,富文本使用的UEdtior UEditor 点击上传图片转base64 在ueditor.all.js文件中找到这个 callback()函数 这里使用根据图片的url转成base64 UEditore 粘贴图片转base64 UEditor回显图片(base64) 把ueditor.all…...
jaeger+elasticsearch(cassandra ) 单机部署以及(400)报错
Jaeger 快速体验 官网下载地址 https://www.jaegertracing.io/download/ GitHub 下载地址 https://github.com/jaegertracing/jaeger/releases 下载二进制文件压缩包后,运行解压后的 all-in-one 文件即可。 jaeger-all-in-one 采用内存存储数据,专为…...

VSCode配置之C++ SQLite3极简配置方案
背景 最近在学习《深入应用C11: 代码优化与工程级应用》,其中第13章说到SQLite库,查询网上诸多教程,发现比较容易出现bug且配置较为麻烦,故记录此次简化版方案,以供参考。 软件环境 SQLite 3.42.0 版本(仅…...
P5725 【深基4.习8】求三角形
题目描述 模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模,不超过 9 9 9。 输出格式 输出矩形和正方形 1.题目分析 循环判断就可以解决,总的来说,是个比较简单的…...

分布式消息中间件介绍
什么是分布式消息中间件? 对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件。 分布式系统 “A distributed system is one in which components located at networked computers communicate an…...

【Linux进程篇】冯诺依曼体系
【Linux进程篇】冯诺依曼体系 目录 【Linux进程篇】冯诺依曼体系冯诺依曼体系结构(1/3内容 )操作系统(Operator System)概念设计OS的目的定位如何理解“管理”总结系统调用和库函数的概念 作者:爱写代码的刚子 时间:2023.7.28 前言…...

陕西师范大学大学:融合传统与创新的学府之旅
前言 > 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 > 📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看 > Ὅ…...
HTML <progress> 标签
实例 正在进行的下载: <progress value"22" max"100"></progress> 浏览器支持 元素ChromeIEFirefoxSafariOpera<progress>8.010.016.06.011.0 定义和用法 <progress> 标签标示任务的进度(进程…...
常用测试工具汇总
目录 1.Web页面检查器 2.客户端-代理抓包 3.自动化测试工具 3.1接口自动化测试 3.2webUI自动化测试 3.3客户端UI自动化测试 4.手机模拟器测试工具 5.阿里云测试工具 1.Web页面检查器 F12查看html页面,查看页面大小和加载时间 2.客户端-代理抓包 Charles&a…...

【爬虫逆向案例】某道翻译js逆向—— sign解密
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 【爬虫逆向案例】某道翻译js逆向—— sign解密 1、前言2、步骤3、源码4、号外 1、前言 相信各位小伙伴在写…...

Verilog语法学习——LV9_使用子模块实现三输入数的大小比较
LV9_使用子模块实现三输入数的大小比较 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 在数字芯片设计中,通常把完成特定功能且相对独立的…...

YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()
7 | PyYAML源码之yaml.compose_all,yaml.load,yaml.load_all 1 yaml.compose_all()2 yaml.load()3 yaml.load_all() 1 yaml.compose_all() 源码: 作用:分析流中的所有YAML文档,并产生相应的表示树。解析: # -*- codi…...

(css)列表点击前后样式
(css)列表点击前后样式 效果: html <ul v-show"rightOne" class"one-content"><liv-for"(item,index) in exampleList":key"index"click"searchHandle(item,index)"class"liClass":class&qu…...

Redis服务优化
目录 一.Rde高可用 二.Rdies持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三.RDB持久化 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.1.4执行流程 3.1.5启动时加载 四.AOF持久化 4.1开启AOF 4.2执行流程 4.2.1命令追加(append) 4.2.2文件写…...
uniAPP 浙政钉 入门手册
uniAPP 如何运行钉钉小程序: 运行钉钉小程序 调试工具导入项目 及 相关平台使用: 专有钉钉 浙政钉 前端 对接流程 常见调试工具,遇到的问题: 采坑记录 下载小程序 IDE 环境配置文件 专有钉钉–环境配置文件...

flask处理文件上传
flask处理文件上传 在Flask框架中,你可以使用request.files对象来处理文件上传。以下是一个简单的文件上传的示例: from flask import Flask, request from werkzeug.utils import secure_filename import osapp Flask(__name__)# 定义文件上传的路径…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...