云时代【6】—— 镜像 与 容器
云时代【6】—— 镜像 与 容器
- 四、Docker
- (三)镜像 与 容器
- 1. 镜像
- (1)定义
- (2)相关指令
- (3)实战演习
- 镜像容器基本操作
- 离线迁移镜像
- 镜像的压缩与共享
- 2. 容器
- (1)定义
- (2)容器的生命周期
- (3)基本指令
- 与容器交互
- 容器的资源使用
- 容器与宿主机
- 容器与镜像
- (4)实战演习
- A. 实际操作案例
- B. MySQL 与 Redis的容器化安装
- C. Java 程序的容器制作
- D. 容器资源更新
四、Docker
(三)镜像 与 容器
1. 镜像
(1)定义
镜像 的作用可以看成:纳戒 + 模板。 镜像”模板“很好理解,它指的是:镜像可以被快速复制(拉取);而镜像”纳戒“的本质是: **Union FS**
联合文件系统。
它可以将几层目录挂载到一起,形成一个虚拟文件系统。每一层文件系统我们叫做一层 layer
。联合文件系统可以对每一层文件系统设置三种权限:只读**(readonly)**
、读写**(readwrite)**
和写出**(whiteout-able)**
,但是** ****docker**
镜像中每一层文件系统都是只读的。 构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
理解了镜像”纳戒“的本质是联合文件系统之后,我们就能很好的理解镜像的优缺点了。
-
优点:
- 屏蔽了环境的差异
- 分层的存储:可以充分利用共享层(减少存储空间的占用)
- 快速分发(只添加缺失的层)
-
缺点:
- 镜像添加的依赖占用机器的空间
- 寻找文件只能一层一层找,会带来一定的性能损失
(2)相关指令
docker rmi [镜像]:[版本]
docker rmi 'IMAGE ID'# --no-prune 不移除该镜像的过程镜像
docker run -it --name mybusybox busybox:1.35.0 sh
docker rmi busybox:1.35.0 # error
docker rmi -f busybox:1.35.0 # 但是强制删除也没必要,可以先删除容器,再删除镜像
docker save -o xxx.tar [镜像]:[版本]# 下图大小没有发生变化主要原因是:打了同一个镜像!(IMAGE ID相同)
docker load -i xxx.tar
docker load -i xxx.tar -q
# -q 是安静模式(不显示进度条)
docker history [镜像]:[版本号]# --no-trunc 不做截断(显示全部信息)
# 该层镜像不被任何一层镜像使用
docker image prune# -a 删除全部不被容器使用的镜像
(3)实战演习
镜像容器基本操作
docker search busybox
docker pull busybox:1.36.0
docker images busybox# 查看镜像的下载位置
cd /data/var/lib/docker # 在 /etc/docker/daemon.json
cd overlay2
cat repositories.json# 查看镜像的详细信息
docker image inspect busybox:1.36.0
# 查看镜像的分层
docker history busybox:1.36.0# 给镜像打标签
docker tag busybox:1.36.0 lllzxx/fortest:v1.36.0
docker push lllzxx/fortest:v1.36.0 -a# 查看登录站点
cat /root/.docker/config.json# 拉取镜像
docker pull lllzxx/fortest:v1.36.0# 运行容器
docker run -it -d --name mybusybox -h myweb -e myenv=test lllzxx:v1.36.0 sh
ifconfig
exit# 查看所有容器
docker ps -a# 删除镜像
docker rmi lllzxx/fortest:v1.36.0
docker rm 'IAMGE ID' # 删除容器
离线迁移镜像
# A服务器
docker pull lllzxx/fortest:v1.36.0
cd /data/lllzxx
docker images
docker save -o mybusybox.tar lllzxx/fortest:v1.36.0# B服务器
docker version # 检查是否安装Docker,没有则安装
mkdir -p /data/lllzxx
cd /data/lllzxx
ll# A服务器
scp mybusybox.tar root@IP:/data/lllzxx # 需要输入密码# B服务器
ll
docker load -i mybusybox.tar
docker images
docker run -it lllzxx/fortest:v1.36.0 sh
ifconfig
ping www.baidu.com
exit
镜像的压缩与共享
docker images nginx
docker pull [镜像]:[版本号]
# 查看远端和本地的大小是否一样?
# 不一样。远端:①节省存储空间 ②减少网络带宽
# 如果远端的镜像是相同的,只是不同别名的话并不会真正上传,只会标示出不同镜像
2. 容器
(1)定义
容器是镜像的运行实体。镜像是静态的只读文件,而是容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。容器本质上是主机运行的一个进程,但是该进程被进行了各种各样的限制,无法看到主机的进程、环境变量、网络等信息。
注:不同角度理解会对容器做出不同定义,其他角度见”云时代【1】“。
(2)容器的生命周期
(3)基本指令
docker create --name mywebs1 -p 8080:80 nginx:1.23.4 # 创建容器(拧钥匙)
docker ps -a | grep mywebs1
docker start mywebs1 # 启动容器(踩油门)
docker ps -a | grep mywebs1
docker container inspect mywebs2docker container inspect -s mywebs2 # -s 显示总的文件大小
docker stop mywebs2 # 停止-踩刹车
# 使用 stop 超时也会杀死容器docker start mywebs2 # 开启-踩油门
docker ps -a | grep mywebs2docker logs -f -n 5 mywebs2docker restart mywebs2docker restart -s 9 mywebs2
docker kill mywebs2
docker wait mywebs3
docker run -d --name mywebs3 nginx:1.23.4
docker ps -a
docker stop mywebs3
docker container prune
docker ps -a
docker rm -f [容器名] # -f 强制删除运行中的容器# 重新 docker run 的话,名称和端口相同也不会冲突
docker logs mywebs2# -f 跟踪日志输出
# -since="2099-01-01"
# -n x 多少条数据
与容器交互
docker attach mywebs2# 使用 ctrl + c 之后会直接退出容器(熄火)docker attach --sig-proxy=false mywebs2
# --sig-proxy 使用 ctrl + c 之后不会退出容器
docker exec -it mywebs2 bash
docker exec -it -d mywebs2 nginx -V # 在后台运行容器docker exec -it -e mynginx=lllzxx mywebs2 bash # 设置容器的环境变量docker exec -it mywebs2 cat /etc/passwd
docker exec -it -u nginx mywebs2 nginx -v # 指定用户docker exec -it -w /etc mywebs2 bash # 指定工作目录
容器的资源使用
docker top mywebs2 docker top mywebs2 aux # aux 能够查看资源使用情况
docker pause mywebs3
docker unpause mywebs3
docker stats -a --no-stream --no-trunc mywebs2# -a 所有容器(停止的也打印)
# --format 打印模式,默认是表格,可以使用json
# --no-stream 不实时更新
# --no-trunc 不截断输出
docker stats --format json
docker rename [旧名字] [新名字]
free -m
docker stats mywebs2
docker update --memory 500m --memory-swap 500m mywebs2
docker stats mywebs2# 一般来说都是会在创建容器的时候就规划好的
容器与宿主机
docker port mywebs2 docker port mywebs2 80/tcp # 使用tcp协议的
docker cp mywebs2:/usr/share/nginx/html/index.html .
# .表示当前目录,即当前工作目录。
# ..表示父目录,即当前目录的上一级目录。docker cp ./index.html mywebs2:/usr/share/nginx/html/index.html/
mkdir -p /data/lllzxx/textexport # -p 是递归地创建目录
cd /data/lllzxx/textexport
ls -l
docker export -o myweb3.tar mywebs3
docker import -m '将文件转回为镜像' mywebs3.tar mywebs3:v1.0 # 与 save 和 load 相比会丢失信息
# A服务器
docker pull lllzxx/fortest:v1.36.0
cd /data/lllzxx
docker images
docker save -o mybusybox.tar lllzxx/fortest:v1.36.0# B服务器
docker version # 检查是否安装Docker,没有则安装
mkdir -p /data/lllzxx
cd /data/lllzxx
ll# A服务器
scp mybusybox.tar root@IP:/data/lllzxx # 需要输入密码# B服务器
ll
docker load -i mybusybox.tar
docker images
docker run -it lllzxx/fortest:v1.36.0 sh
ifconfig
ping www.baidu.com
exit
docker exec -it mywebs2 bash
echo "Hello World!" > /test.html
ls -ldocker diff mywebs2
容器与镜像
docker images
docker run -d --name mywebsforcommit nginx:1.23.4
docker ps | grep mywebsforcommit
docker images mywebsforcommit
docker commit mywebsforcommit mywebsforcommit:v1.0 # docker commit [容器] [镜像名]:[版本号]
docker images mywebsforcommit
docker exec -it mywebsforcommit bash
echo "Hello World!" > /testforcommit.txt
ls -l
exit
docker diff mywebsforcommit
docker commit mywebsforcommit mywebsforcommit:v2.0
docker run -it --rm mywebsforcommit:v2.0 bash
ls -l
cat testforcommit.txt
exit
docker commit -a 'lzxx' -m 'create by lzxx' -p mywebsforcommit mywebsforcommit:v3.0# -a 指定创建者
# -m 描述信息
# -p 创建镜像时停止
docker commit -a 'lzxx' -m 'create by lzxx' -c 'CMD ["tail","-f","/etc/hosts"]' -p mywebsforcommit mywebsforcommit:v4.0
docker images mywebsforcommit
docker run -d --rm --name mywebsforcommit2 mywebsforcommit:v4.0
docker ps --no-trunc | grep mywebsforcommit
(4)实战演习
A. 实际操作案例
docker images nginx
docker run -d --name mynginx01 -p 8101:80 nginx:1.22.0
docker ps
docker container inspet mynginx01
docker logs -f -n 10 mynginx01
docker rm mynginx01
docker stop mynginx01
docker ps -a | grep mynginx01
docker create --name mynginx02 -p 8102:80 nginx:1.22.0
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02docker kill mynginx02
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02docker stop mynginx02
docker ps -a | grep mynginx02
docker start mynginx02
docker ps -a | grep mynginx02docker ps -a | grep mynginx02
docker restart mynginx02
docker ps -a | grep mynginx02docker pause mynginx02
docker ps -a | grep mynginx02
docker unpause mynginx02
docker ps -a | grep mynginx02
# 批量过滤
# ps : Process Status,即进程状态。
docker ps -a
docker stop mywebs1 mywebs2
docker ps
docker ps -f name=mywebs1
docker ps -f status=exited
docker ps -f ancestor=nginx:1.23.4
docker ps -q# 批量操作
docker stop `docker ps -q`
docker ps -a
# A-1.attached模式--该模式是在前台运行,按 ctrl + c 就会退出容器,会简化开发的过程,但不能用于生产
docker run --name mynginx03 -p 8103:80 nginx:1.22.0
docker ps | mynginx03# A-2.detached模式--在后台运行
docker run -d --name myngine04 -p 8104:80 nginx:1.22.0
docker ps | mynginx04
exit # 断开连接
docker ps | mynginx04 # 依旧在运行
docker logs -f mynginx04# B.attach 会把 attached模式 转为 detached模式
docker attach mynginx04
ctrl + c
docker ps -a | mynginx04 # C.interactive模式
# C-1.创建一个可交互的容器
docker run -it --name mynginx05 -p 8105:80 nginx:1.22.0 bash
ls /
cat /etc/*release*
nginx -v
nginx # 正式启动nginx
ctrl + c # 没有影响
exit # shell退出,也意味着:容器退出
# C-2.与后台运行的容器交互
docker run -it -d --name mynginx06 -p 8106:80 nginx:1.22.0
docker exec -it mynginx06 bash
curl 127.0.0.1
exit # shell退出,但容器依然正常运行
# 容器内部没有vim编辑器
docker run -it -d --name mynginx07 -p 8107:80 nginx:1.22.0
docker exec -it mynginx07 bash
cd /usr/share/nginx/html
ls -l
cat index.html
vi index.html # refuse
exitmkdir -p /data/lllzxx/testcp
cd /data/lllzxx/testcp
ls -l
docker cp mynginx07:/usr/share/nginx/html/index.html .
vi index.html
docker cp ./index.html mynginx07:/usr/share/nginx/html/docker exec -it mynginx07 bash
cd /usr/share/nginx/html
cat index.html# 注意:cp 不支持容器与容器之间的拷贝
docker run -it --rm --name mynginx08 -p 8108:80 nginx:1.22.0 bash
nginx -v
exit
docker ps -a | grep mynginx08 # 查找不到docker run -d --rm --name mynginx08 -p 8108:80 nginx:1.22.0 # 一停止就删除
docker ps | grep mynginx08
docker stop mynginx08
docker ps -a | grep mynginx08 # 同样查找不到
# restart:
# no-不重启(默认);on-failure:3 指定重启次数;
# always-总是重启;unless-stopped-中途退出也重启
docker run -d --name mynginx09 -p 8109:80 --restart=always nginx:1.22.0
docker exec -it mynginx09 bash
nginx -s quit # 停止nginx服务
docker ps | mynginx09 # 发生重启docker stop mynginx09 # 无法再次拉起
docker run -it --rm -e MYTEST1=1 -e MYTEST2=2 nginx:1.22.0 bash
env | grep MYTEST
exit# 通过配置文件 设置环境变量
mkdir -p /data/lllzxx/mytestenv
cd /data/lllzxx/mytestenv
vi myenv.txt
docker run -it --rm --env-file=./myenv.txt nginx:1.22.0 bash
env | grep MYTEST
docker run --rm busybox ifconfig # 查看容器的
docker run --rm --net host busybox ifconfig # 使用宿主机的网络,查看宿主机的
# A服务器
docker run -d --name mynginx10 -p 8110:80 nginx:1.22.0
docker ps
docker exec -it mynginx10
cd /usr/share/nginx/html/
echo "Hello World" > index.html
cat index.html
exit
mkdir -p /data/lllzxx/testtar
cd /data/lllzxx/testtar
docker export -o mynginx10.tar mynginx10
ls -l# B服务器
mkdir -p /data/lllzxx/testtar
cd /data/lllzxx/testtar# A服务器
scp mynginx10.tar root@IP:/data/lllzxx/testtar # scp 在跨云的时候会有速度限制# B服务器
docker import mynginx10.tar mynginx10:v10.0
docker images mynginex10
docker run -d --name mynginx10 -p 8010:80 mynginx10:v10.0 # refuse:CMD丢失。
docker inspect mynginx10:v10.0 # 还有很多其他源数据丢失
docker run -d --name mynginx10 -p 8010:80 nginx -g "daemon off" mynginx10:v10.0
docker save
与 docker export
的区别可看下方文章:
docker save与docker export的区别_docker版本不同导致save-CSDN博客
docker run -d --name mynginx11 -p 8011:80 nginx:1.22.0
docker logs -f mynginx11# 流的重定向
docker logs mynginx11 > info.log 2>err.log # info.log 是标准信息流;err.log 是标准错误流# 直接看Docker后台的目录
cd /data/var/lib/docker/containers
ls
docker ps
cd xxxxxxx
ls
cat xxxxx-json.log
docker run -d --name mynginx12 -p 8012:80 nginx:1.22.0
docker stats mynginx12 # 整个容器总的资源占用
docker top mynginx12 aux # 容器中具体进程占用的资源
B. MySQL 与 Redis的容器化安装
docker run --name mysql -e MYSQL_ROOT_PASSWORD=lzxx@mysql -p 8201:3306 -d mysql:5.7
docker images
docker ps | grep mysql
docker exec -it mysql bash
mysql -u root -p # lzxx@mysql
exit # 退出 MySQL
exit # 退出 容器
docekr run --name redis -d -p 8300:6379 redis:7
docker ps | grep redis
docker exec -it redis bash
redis-cli
set sellcount 1
get sellcount
exit # 退出Redis
exit # 退出容器
C. Java 程序的容器制作
docker pull ubuntu:22.04
docker images | grep ubuntu
docker run -it --name myjava -p 8080:80 ubuntu:22.07 bash
# 使用中科大源拉取镜像,记得更新缓存
apt search jdk
apt-get install java-1.8.0-openjdk.x86_64 -y
java -version
exitmkdir -p /data/lllzxx/myapp
cd /data/lllzxx/myapp
# 上传 .jar 包 :scp mynginx10.tar root@IP:/data/lllzxx/testtar
ls -l
docker cp ./myapp.jar myjava:/docker exec -it myjava bash
ls /
java -jar myapp.jar
# 访问地址:IP:8080/hello/docker
exit # 现在是以前台方式运行,可以写 run 指令,也可以写 DockerFile
D. 容器资源更新
# A窗口
docker pull java:8
docker run -it --name myjava2 java:8 bash# B窗口
cd /data/lllzxx/myapp
ls -l
docker cp myapp.java myjava2:/# A窗口
ls -l
java -jar myapp.jar# C窗口
docker stats myjava2# D窗口
docker update -m 200m --memory-swap 200m myjava2 # 两者一样即只能使用物理内存而不能使用交换内存# A窗口
ctrl + c# D窗口
docker update -m 10m --memory-swap 10m myjava2# A窗口
java -jar myapp.jar # OOM-Kill 因为申请的内存太多了,无法给这么多资源
# A窗口
docker run -it --name myjava3 java:8 bash# B窗口
docker stats myjava3# A窗口
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`
dodd if=/dev/zero of=/dev/null &
done
#说明:
#cat /proc/cpuinfo |grep “physical id” | wc -l 可以获得 CPU 的个数,我们将其表示为 N
#seq 1 N 用来生成1到N之间的数字
#for i in seq 1 N; 就是循环执行命令,从1到N
#dd if=/dev/zero of=/dev/null 执行 dd 命令, 输出到/dev/null, 实际上只占用 CPU, 没有 IO 操作
#由于连续执行N个(N是 CPU 个数)的 dd 命令, 且使用率为 100%, 这时调度器会调度每个 dd 命令在不同的 CPU 上处理,最终就实现所有CPU占用率 100%# C窗口
docker update --cpu-quota 分子 --cpu-period 分母 myjava3
相关文章:

云时代【6】—— 镜像 与 容器
云时代【6】—— 镜像 与 容器 四、Docker(三)镜像 与 容器1. 镜像(1)定义(2)相关指令(3)实战演习镜像容器基本操作离线迁移镜像镜像的压缩与共享 2. 容器(1)…...

【QT+QGIS跨平台编译】之五十三:【QGIS_CORE跨平台编译】—【qgssqlstatementparser.cpp生成】
文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…...

JMeter性能测试基本过程及示例
jmeter 为性能测试提供了一下特色: jmeter 可以对测试静态资源(例如 js、html 等)以及动态资源(例如 php、jsp、ajax 等等)进行性能测试 jmeter 可以挖掘出系统最大能处理的并发用户数 jmeter 提供了一系列各种形式的…...

你知道什么是回调函数吗?
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...

mac苹果电脑c盘满了如何清理内存?2024最新操作教程分享
苹果电脑用户经常会遇到麻烦:内置存储器(即C盘)空间不断缩小,电脑运行缓慢。在这种情况下,苹果电脑c盘满了怎么清理?如何有效清理和优化存储空间,提高计算机性能?成了一个重要的问题。今天,我想给大家详细介…...

k8s-kubeapps图形化管理 21
结合harbor仓库 由于kubeapps不读取hosts解析,因此需要添加本地仓库域名解析(dns解析) 更改context为全局模式 添加repo仓库 复制ca证书 添加成功 图形化部署 更新部署应用版本 再次进行部署 上传nginx 每隔十分钟会自动进行刷新 在本地仓库…...
1_Springboot(一)入门
Springboot(一)——入门 本章重点: 1.什么是Springboot; 2.使用Springboot搭建web项目; 一、Springboot 1.Springboot产生的背景 Servlet->Struts2->Spring->SpringMVC,技术发展过程中,对使…...
Docker Machine简介
Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。 Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。 Docker Machine 管理的虚拟主机可以是机上的…...

GWO优化高斯回归预测(matlab代码)
GWO-高斯回归预测matlab代码 GWO(Grey Wolf Optimizer,灰狼优化算法)是一种群智能优化算法,由澳大利亚格里菲斯大学的Mirjalili等人于2014年提出。这种算法的设计灵感来源于灰狼群体的捕食行为,其核心思想在于模仿灰狼…...

LaTeX-设置图像与表格位置
文章目录 LaTeX-设置图像与表格位置1.图像位置定位1.1 基本定位1.2 figure环境实现图像的位置定位(常用)1.3 一个图形中包含多个图像1.4在图形周围换行文本 2.表格位置定位2.1基本定位2.1 table环境实现表格的位置定位(常用)2.3在…...

STM32 DMA入门指导
什么是DMA DMA,全称直接存储器访问(Direct Memory Access),是一种允许硬件子系统直接读写系统内存的技术,无需中央处理单元(CPU)的介入。下面是DMA的工作原理概述: 数据传输触发&am…...

mysql根据指定顺序返回数据--order by field
在查询数据的时候,在in查询的时候,想返回的数据根据 in里的数据顺序返回,可以直接在orderby中通过 FIELD(字段名称逗号分隔的值的顺序) 进行指定;示例没有加 order by field添加 order by field效果...
IEEE SGL与NVMe SGL的区别?
在HBA(Host Bus Adapter)驱动程序中,IEEE SGL(Institute of Electrical and Electronics Engineers Scatter-Gather List)和NVMe SGL(Non-Volatile Memory Express Scatter-Gather List)是两种不…...
struct内存对齐
5.1.3 struct内存对齐 结构体的对齐规则: (1)第一个成员在与结构体偏移量为0的地址处。 (2)其他成员变量要对齐到对齐数的整数倍的地址处 对齐数 编译器默认的对齐数与该成员大小的较小值。(vs中默认值为8) (3)结构体总大小为最大对齐数…...

探索Redis 6.0的新特性
Redis(Remote Dictionary Server)是一个开源的内存中数据结构存储系统,通常被用作缓存、消息队列和实时数据处理等场景。它的简单性、高性能以及丰富的数据结构支持使其成为了众多开发者和企业的首选。在Redis 6.0版本中,引入了一…...
关于CSS中定位的教程
在CSS中,定位是一种强大的工具,可以帮助我们控制元素在页面上的位置。通过使用定位属性,我们可以精确地放置元素在页面的任何位置,并且可以实现各种复杂的布局效果。在本教程中,我们将深入探讨CSS中的定位属性…...

抽象类、模板方法模式
抽象类概述 在Java中abstract是抽象的意思,如果一个类中的某个方法的具体实现不能确定,就可以申明成abstract修饰的抽象方法(不能写方法体了),这个类必须用abstract修饰,被称为抽象类。 抽象方法定义&…...
消息队列kafka
消息队列解决的问题 1. 解耦,通过消息队列实现应用之间解耦,模块儿之间解耦 2. 跨线程/进程通信,通过消息队列传递数据,实现不同线程/进程间通信 3. 提升系统稳定性,在高并发场景通过消息队列缓冲,可以实…...

复盘成长——2024.2月复盘
复盘的目的和范围 每月一次的精心复盘,不仅是对自身工作成就、学习进步与成长轨迹的深度梳理,更是一种对未来路径的细致规划。通过这一过程,我期望能够更加精准地把握生活的节奏和职场的航向,从中汲取经验、聚焦目标,…...

Kafka安全模式之身份认证
一、简介 Kafka作为一个分布式的发布-订阅消息系统,在日常项目中被频繁使用,通常情况下无论是生产者还是消费者只要订阅Topic后,即可进行消息的发送和接收。而kafka在0.9.0.0版本后添加了身份认证和权限控制两种安全服务,本文主要…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...