4. docker镜像、Dockerfile
docker镜像、Dockerfile
- 一、docker镜像
- 1、镜像介绍
- 2、镜像核心技术
- 二、Dockerfile定制镜像
- 1、Dockerfile使用流程
- 1.1 编写Dockerfile
- 1.2、构建镜像
- 1.3 创建容器测试镜像定制操作
- 2、Dockerfile常用指令
- 三、部署springcloud微服务架构的商品秒杀项目
- 1、部署项目需要的基础服务
- 1.1 部署redis缓存
- 1.2 部署MySQL数据库
- 1.3 部署rabbitmq消息队列
- 2、部署微服务框架
- 2.1 部署erueka 注册中心
- 2.2 部署config-server 配置中心
- 2.3 部署zuul-server 网关
- 3、部署业务
- 3.1 部署会员服务
- 3.2 部署商品展示业务
- 3.3 部署秒杀业务
- 3.4 部署web前端
- 3.4 部署websocket, 实现http长连接
一、docker镜像
1、镜像介绍
-
分层的文件系统
优势:节省空间、速度快、重用 -
只读
创建容器时,会在镜像上面添加一个可写层
2、镜像核心技术
- COW copy on write 写时复制
- Union fs 联合文件系统
overlay2
device mapper
[root@martin-host ~]# docker info
Client: Docker Engine - CommunityVersion: 26.1.4Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.14.1Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.27.1Path: /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 1Running: 0Paused: 0Stopped: 1Images: 4Server Version: 26.1.4Storage Driver: overlay2
二、Dockerfile定制镜像
1、Dockerfile使用流程
1.1 编写Dockerfile
[root@martin-host testDockerfile]# ls
CentOS-Base.repo Dockerfile
[root@martin-host testDockerfile]# cat Dockerfile
FROM centos:7COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repoRUN yum install -y net-tools
1.2、构建镜像
[root@martin-host testDockerfile]# docker build -t centos:v1 ./
1.3 创建容器测试镜像定制操作
[root@martin-host testDockerfile]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos v1 3e88e2fdb6df 56 seconds ago 461MB
redis latest 7614ae9453d1 2 years ago 113MB
centos 7 eeb6ee3f44bd 2 years ago 204MB
nginx 1.18 c2c45d506085 3 years ago 133MB[root@martin-host testDockerfile]# docker run -tid --name=test1 centos:v1
949b757d2b35b4d115a88f69cc8f1d704b6e6fcd34a64d4ecbfc28422e7530aa[root@martin-host testDockerfile]# docker exec -ti test1 bash
[root@949b757d2b35 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1472inet 10.88.7.2 netmask 255.255.255.0 broadcast 10.88.7.255ether 02:42:0a:58:07:02 txqueuelen 0 (Ethernet)RX packets 8 bytes 656 (656.0 B)
2、Dockerfile常用指令
- FROM
指定基础镜像;
镜像不存在,构建镜像时自动下载镜像
建议尽量选择小容量的镜像 / debian/ ubuntu
FROM 镜像名称
- RUN
指定定制命令
RUN 命令 && 命令 && 命令
- CMD
定义容器创建时,自动执行的命令
注意事项:
1、前台启动服务的指令
2、创建容器时,不要自己指定命令,会覆盖CMD
3、一个Dockerfile中只能有一条CMD指令
CMD httpd -D FOREGROUND
CMD ["httpd", "-D", "FOREGROUND"] // 推荐
- ENTRYPOINT
定义容器创建时,自动执行的命令
不会被覆盖
ENTRYPOINT ["httpd", "-D", "FOREGROUND"]
- COPY
复制文件
注意:只能复制本地文件
COPY 源文件 目的文件
- ADD
复制文件
注意:
1、支持本地文件、URL、压缩包会自动解压
ADD 源文件 目的文件
ADD file01 /tmp/file01
ADD http://nginx.org/download/nginx-1.27.0.tar.gz /tmp
ADD jdk-8u91-linux-x64.tar.gz /tmp
- EXPOSE
说明容器服务端口
注意:
1、-P随机发布端口时,Dockerfile中必须有EXPOSE指令
EXPOSE 端口 端口
- VOLUME
定义持久化存储的目录
创建容器时不使用-v明确指定目录,会自动生成匿名卷
VOLUME 目录
- ENV
定义环境变量
ENV 变量名称 值
- WORKDIR
定义当前目录
WORKDIR 目录
- USER
指定容器运行的用户
USER 用户名
三、部署springcloud微服务架构的商品秒杀项目
1、部署项目需要的基础服务
1.1 部署redis缓存
[root@martin-host web]# docker run -tid --name=redis --hostname=redis --restart=always --net=host redis:3.2.10
33ff624e19c309793fdfa23dbd5c0a88490637cd5e0090bfee7dc98c63721732[root@martin-host web]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33ff624e19c3 redis:3.2.10 "docker-entrypoint.s…" 5 seconds ago Up 4 seconds redis[root@martin-host web]# netstat -tunlp | grep 6379
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 2570/redis-server *
tcp6 0 0 :::6379 :::* LISTEN 2570/redis-server *
1.2 部署MySQL数据库
[root@martin-host web]# docker run -tid --name=web_db --hostname=web_db --restart=always --net=host -e MYSQL_ROOT_PASSWORD=admin mysql:5.7
4ba7f19a4e15ef11facd18e329796dc391c0d0ce1a144fe7f67380fad65ab043
[root@martin-host web]#
[root@martin-host web]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ba7f19a4e15 mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds web_db
33ff624e19c3 redis:3.2.10 "docker-entrypoint.s…" About a minute ago Up About a minute redis[root@martin-host web]# docker cp shop_goods.sql web_db:/
Successfully copied 3.58kB to web_db:/
[root@martin-host web]# docker cp shop_member.sql web_db:/
Successfully copied 3.58kB to web_db:/
[root@martin-host web]# docker cp shop_seckill.sql web_db:/
Successfully copied 7.68kB to web_db:/
[root@martin-host web]#
[root@martin-host web]# docker exec -ti web_db bash
root@web_db:/#
root@web_db:/# mysql -uroot -padmin < /shop_goods.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
root@web_db:/# mysql -uroot -padmin < /shop_member.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
root@web_db:/# mysql -uroot -padmin < /shop_seckill.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
root@web_db:/#
root@web_db:/# mysql -uroot -padmin
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.35 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| shop_goods |
| shop_member |
| shop_seckill |
| sys |
+--------------------+
7 rows in set (0.00 sec)mysql>
mysql> grant all on *.* to 'root'@'%' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> exit
Bye
root@web_db:/# exit
exit
1.3 部署rabbitmq消息队列
[root@martin-host web]# docker run -tid --name=rabbitmq --hostname=rabbitmq --net=host rabbitmq:3-management
d9e860cf2773cbf4c6462483fb5dabea600b00295f44f55d088f5797de0c8efa
[root@martin-host web]#
[root@martin-host web]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9e860cf2773 rabbitmq:3-management "docker-entrypoint.s…" 3 seconds ago Up 2 seconds rabbitmq
4ba7f19a4e15 mysql:5.7 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes web_db
33ff624e19c3 redis:3.2.10 "docker-entrypoint.s…" 6 minutes ago Up 6 minutes redis[root@martin-host ~]# docker exec -ti rabbitmq bashroot@rabbitmq:/# rabbitmqctl add_user liushao admin
Adding user "liushao" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.root@rabbitmq:/# rabbitmqctl set_permissions liushao ".*" ".*" ".*"
Setting permissions for user "liushao" in vhost "/" ...
root@rabbitmq:/#
2、部署微服务框架
2.1 部署erueka 注册中心
负责注册所有服务的通信地址
[root@martin-host web]# cat eurekaDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY eureka-server-1.0-SNAPSHOT.jar /eureka-server.jarCMD ["java", "-jar", "/eureka-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t eureka-server:1.0 -f eurekaDockerfile ./ root@martin-host web]# docker run -tid --name=eureka-server --hostname=eureka-server --restart=always --net=host eureka-server:1.0
c682585f005c0be0ffae1dba1232410f92045c0763de5393d1efaedd79a0bdb3[root@martin-host web]# docker logs eureka-server
2024-07-19 02:40:53.881 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8761
2.2 部署config-server 配置中心
负责集中管理所有业务组件的配置文件、从远程的git服务器拉取配置文件
[root@martin-host web]# cat configDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY config-server-1.0-SNAPSHOT.jar /config-server.jarCMD ["java", "-jar", "/config-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t config-server:1.0 -f configDockerfile ./[root@martin-host web]# docker run -tid --name=config-server --hostname=config-server --net=host --restart=always config-server:1.0 [root@martin-host web]# docker logs config-server
2024-07-19 02:49:37.965 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 9100
2.3 部署zuul-server 网关
负责集中接收处理请求、反向代理 、负载均衡
[root@martin-host web]# cat zuulDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY zuul-server-1.0-SNAPSHOT.jar /zuul-server.jarCMD ["java", "-jar", "/zuul-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t zuul-server:1.0 -f zuulDockerfile ./[root@martin-host web]# docker run -tid --name=zuul-server --hostname=zuul-server --net=host --restart=always zuul-server:1.0 [root@martin-host web]# docker logs zuul-server
2024-07-19 02:56:57.602 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 9000
3、部署业务
3.1 部署会员服务
[root@martin-host web]# cat memberDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY member-server-1.0-SNAPSHOT.jar /member-server.jar CMD ["java", "-jar", "/member-server.jar"][root@martin-host web]# docker build -t member-server:1.0 -f memberDockerfile ./[root@martin-host web]# docker run -tid --name=member-server --hostname=localhost --net=host --restart=always member-server:1.0 2024-07-19 03:26:42.696 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8083
3.2 部署商品展示业务
[root@martin-host web]# cat goodDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY good-server-1.0-SNAPSHOT.jar /good-server.jarCMD ["java", "-jar", "/good-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t good-server:1.0 -f goodDockerfile ./[root@martin-host web]# docker run -tid --name=good-server --hostname=localhost --net=host --restart=always good-server:1.0 2024-07-19 03:29:49.555 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8084
3.3 部署秒杀业务
[root@martin-host web]# cat seckillDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY seckill-server-1.0-SNAPSHOT.jar /seckill-server.jarCMD ["java", "-jar", "/seckill-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t seckill-server:1.0 -f seckillDockerfile ./[root@martin-host web]# docker run -tid --name=seckill-server --hostname=localhost --net=host --restart=always seckill-server:1.0 2024-07-19 03:32:56.665 INFO 1 --- [ main] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#1c6804cd:0/SimpleConnection@4fdfa676 [delegate=amqp://guest@192.168.183.10:5672/, localPort= 34446]
2024-07-19 03:32:56.851 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8085 (http) with context path ''
2024-07-19 03:32:56.853 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8085
3.4 部署web前端
[root@martin-host web]# cat frontendDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY frontend-server-0.0.1-SNAPSHOT.jar /frontend-server.jarCMD ["java", "-jar", "/frontend-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t frontend-server:1.0 -f frontendDockerfile ./[root@martin-host web]# docker run -tid --name=frontend-server --hostname=localhost --net=host --restart=always frontend-server:1.0 2024-07-19 03:36:03.029 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
3.4 部署websocket, 实现http长连接
[root@martin-host web]# cat websocketDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY websocket-server-0.0.1-SNAPSHOT.jar /websocket-server.jarCMD ["java", "-jar", "/websocket-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t websocket-server:1.0 -f websocketDockerfile ./
[+] Building 0.5s (7/7) FINISHED docker:default=> [internal] load build definition from websocketDockerfile 0.0s=> => transferring dockerfile: 193B 0.0s=> [internal] load metadata for docker.io/adoptopenjdk/openjdk8:latest 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load build context 0.2s=> => transferring context: 21.84MB 0.2s=> CACHED [1/2] FROM docker.io/adoptopenjdk/openjdk8:latest 0.0s=> [2/2] COPY websocket-server-0.0.1-SNAPSHOT.jar /websocket-server.jar 0.2s=> exporting to image 0.1s=> => exporting layers 0.1s=> => writing image sha256:7d681a377f627c30765b92088008d4ac265f182be9ee93efa118400e5667482c 0.0s=> => naming to docker.io/library/websocket-server:1.0 0.0s
[root@martin-host web]#
[root@martin-host web]# docker run -tid --name=websocket-server --hostname=localhost --net=host --restart=always websocket-server:1.0
9fb88729fe38c44841a2691562deb47b428013150fcdc5974d8c06f43630e6792024-07-19 03:39:14.976 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8088 (http) with context path ''
相关文章:

4. docker镜像、Dockerfile
docker镜像、Dockerfile 一、docker镜像1、镜像介绍2、镜像核心技术 二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile1.2、构建镜像1.3 创建容器测试镜像定制操作 2、Dockerfile常用指令 三、部署springcloud微服务架构的商品秒杀项目1、部署项目需要的基础服务…...
智能水果保鲜度检测:基于YOLO和深度学习的完整实现
引言 水果新鲜程度直接影响其口感和营养价值。为了提高水果品质管理的效率和准确性,本文介绍了一种基于深度学习的水果新鲜程度检测系统。该系统包括用户界面,利用YOLO(You Only Look Once)v8/v7/v6/v5模型进行水果新鲜程度检测&…...
C#中implicit 关键字的使用:隐式转换操作符
在 C# 中,implicit 关键字用于定义隐式转换操作符。隐式转换操作符允许自动将一种数据类型转换为另一种类型,而无需显式地调用转换方法或进行类型转换。下面将详细介绍 implicit 关键字的定义和使用。 1. 隐式转换操作符 定义 隐式转换操作符可以定义在一个类或结构体中,…...
Laravel表单验证:自定义规则的艺术
Laravel表单验证:自定义规则的艺术 在Web应用开发中,表单验证是确保数据完整性和安全性的关键步骤。Laravel提供了一个强大且灵活的验证系统,允许开发者定义自定义验证规则,以满足特定的业务需求。本文将详细介绍如何在Laravel中…...

Linux中的环境变量
一、环境变量定义 一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,…...

关于集成网络变压器的RJ45网口
集成网络变压器的RJ45网口是一种将网络变压器与RJ45接口集成在一起的网络连接解决方案。这种集成设计具有多项优势,使其在现代网络设备中得到广泛应用。 优势与特点 1. **空间节省**:集成设计减少了组件数量和连接线缆长度,有助于节省设备内…...

JMX 反序列化漏洞
前言 前段时间看到普元 EOS Platform 爆了这个洞,Apache James,Kafka-UI 都爆了这几个洞,所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX(Java Management Extensions,即 Java 管理扩展࿰…...

【Qt】常用控件 Q widget的enabled属性,geometry属性
Qt是一个实现图形化程序的程序。为了便于我们开发,Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件 控件是构成⼀个图形化界⾯的基本要素. 示例一: 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…...

Unity3d开发google chrome的dinosaur游戏
游戏效果 游戏中: 游戏中止: 一、制作参考 如何制作游戏?【15分钟】教会你制作Unity小恐龙游戏!新手15分钟内马上学会!_ unity教学 _ 制作游戏 _ 游戏开发_哔哩哔哩_bilibili 二、图片资源 https://download.csdn.…...

【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)
空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据(均可查看之前的文章获悉详情)! 本次我们分享的是我国2013——2022年的省…...

【玩转C语言】第五讲--->数组-->一维和多维深度理解
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 引言: 大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识…...

Apache Flink 任务提交模式
Flink 任务提交模式 Flink可以基于多种模式部署:基于Standalone 部署模式,基于Yarn部署模式,基于Kubernetes部署模式以上不同集群部署模式下提交Flink任务会涉及申请资源,各角色交互过程,不同模式申请资源涉及到的角色…...

Ubuntu22.04安装OMNeT++
一、官网地址及安装指南 官网地址:OMNeT Discrete Event Simulator 官网安装指南(V6.0.3):https://doc.omnetpp.org/omnetpp/InstallGuide.pdf 官网下载地址:OMNeT Downloads 旧版本下载地址:OMNeT Old…...
Matlab课程设计——手指静脉识别项目
手指静脉识别项目 项目方案设计介绍 本项目实现手指图像的处理和匹配算法,需要处理的数据是本人不同手指的图像,首先经过图像处理,使得指静脉的纹理增强凸显处理,然后将所有的这些图像进行相互间的匹配,检验类内和类…...
centos软件安装
安装方式 一、二进制安装 --解压即用,只针对特殊平台 --jdk tomcat 二、RPM:按照一定规范安装软件,无法安装依赖的文件 --mysql 三、yum:远程安装基于RPM,把依赖的文件安装上去,需要联网 四、源码安装 jdk安…...
力扣 217. 存在重复元素,389. 找不同,705. 设计哈希集合,3. 无重复字符的最长子串,139. 单词拆分
217. 存在重复元素 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …...
嵌入式软件工作能力
1. 工作能力 技术能力强,并不代表工作能力 2. 流程把控 3. 项目管理 4. “找茬”能力 5. 文档输出能力...

景区导航导览系统:基于AR技术+VR技术的功能效益全面解析
在数字化时代背景下,游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手,不仅因为它能提供实时、精准的导航服务,更在于其融合AR(增强现实)、VR(虚拟现实)等前沿技术&…...

Mybatis-Plus代码生成器配置方法
Mybatis-Plus网址:https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8 第一步:引入依赖 <!-- 代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId>…...

三主机部署HP Anyware Manager服务
一、序言 在部署拓扑和方案方面,HP Anyware Manager 非常灵活,可以部署在单个主机中,也可以部署在多个主机中,具体取决于组织的网络环境和运营要求。 二、单主机部署 2.1 描述 此部署配置是当 Anyware Manager 和 MongoDB 以及…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...