从会用 Docker 到会造 Docker:从零到企业级部署
第六章Dockerfile从会用 Docker 到会造 Dockerdocker基础到这里你已经掌握Image 镜像 ↓ Container 容器 ↓ Volume 数据 ↓ Network 网络但是现在你还是主要在用别人做好的镜像docker pull nginx docker pull mysql docker pull redis真正开发工作中公司自己的项目怎么办比如你的项目商城系统 ├── Java代码 ├── 配置文件 ├── 依赖 └── 启动脚本怎么变成company-shop:v1然后服务器docker run company-shop:v1直接运行答案Dockerfile。1. Dockerfile 是什么一句话Dockerfile 是制作 Docker 镜像的说明书。比如做蛋糕普通人买蛋糕Docker自己写配方 ↓ 制作蛋糕Dockerfile就是配方。例如DockerfileFROM ubuntu RUN apt update RUN apt install nginx COPY index.html /var/www/html/ CMD [nginx,-g,daemon off;]意思从 Ubuntu 开始 安装 nginx 复制网页 启动 nginx然后生成镜像my-web:v12. Dockerfile 工作流程完整流程代码 | | ↓ Dockerfile | | ↓ docker build | | ↓ Image 镜像 | | ↓ docker run | | ↓ Container3. 创建第一个 Dockerfile准备目录my-nginx/ ├── Dockerfile └── index.htmlindex.htmlh1Hello Docker/h1DockerfileFROM nginx COPY index.html /usr/share/nginx/html/解释FROM基础镜像。格式FROM 镜像名例如FROM nginx意思基于 nginx 制作。类似站在别人肩膀上开发COPY复制文件。格式COPY 本地文件 容器路径例如COPY index.html /usr/share/nginx/html/结果容器里面/usr/share/nginx/html/index.html4. 构建镜像进入目录cd my-nginx执行docker build -t my-nginx:v1 .解释build创建镜像。-ttag。例如-t my-nginx:v1名字my-nginx 版本 v1.当前目录。Docker 会寻找./Dockerfile构建过程你会看到Step 1/2 FROM nginx Step 2/2 COPY index.html成功Successfully built abc123查看docker images出现my-nginx v15. 运行自己制作的镜像启动docker run \ -d \ -p 8080:80 \ my-nginx:v1访问localhost:8080看到Hello Docker成功。你第一次造出了自己的镜像。6. Dockerfile 常用指令大全Dockerfile 最重要的几个FROM RUN COPY ADD WORKDIR ENV EXPOSE CMD ENTRYPOINT下面逐个讲。7. FROM基础镜像。必须第一行。例如PythonFROM python:3.12JavaFROM openjdk:17NodeFROM node:20选择基础镜像开发ubuntu debian生产alpine slim例如推荐FROM python:3.12-slim不要FROM ubuntu然后自己安装 Python。浪费空间。8. RUN执行 Linux 命令。例如RUN apt update安装RUN apt install -y nginx例如FROM ubuntu RUN apt update RUN apt install -y curl构建时执行。不是运行容器时执行。9. RUN 合并优化错误RUN apt update RUN apt install nginx RUN apt clean会产生很多层。优化RUN apt update \ apt install -y nginx \ apt clean减少镜像大小。10. COPY复制文件。例如项目app/ ├── Dockerfile └── app.pyDockerfileCOPY app.py /app/结果容器/app/app.py11. WORKDIR设置工作目录。例如WORKDIR /app之后COPY app.py .等于COPY app.py /app/推荐不要RUN cd /app因为下一层失效。使用WORKDIR /app12. ENV设置环境变量。例如ENV PORT8080容器里面echo $PORT输出8080常见数据库MYSQL_ROOT_PASSWORD程序JAVA_OPTS13. EXPOSE声明端口。例如EXPOSE 8080注意它不会真正打开端口。真正需要-p例如docker run -p 8080:8080 app14. CMD非常重要指定容器启动后执行什么。例如CMD [python,app.py]容器启动自动python app.py例如Python项目DockerfileFROM python:3.12 WORKDIR /app COPY app.py . CMD [python,app.py]运行docker run my-python自动python app.py15. ENTRYPOINT和 CMD 很像。区别CMD容易被覆盖。ENTRYPOINT固定执行。例如ENTRYPOINT [python] CMD [app.py]运行docker run image执行python app.py运行docker run image test.py执行python test.py16. CMD 和 ENTRYPOINT 区别记忆ENTRYPOINT 主程序 CMD 默认参数例如ENTRYPOINT python CMD app.py组合python app.py17. 一个真实 Python 项目 Dockerfile项目my-api ├── app.py ├── requirements.txt └── Dockerfilerequirementsflask requestsDockerfileFROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY app.py . EXPOSE 5000 CMD [python,app.py]构建docker build -t my-api:v1 .运行docker run \ -d \ -p 5000:5000 \ my-api:v118. 镜像分层和缓存高手必须懂DockerfileFROM python COPY requirements.txt . RUN pip install -r requirements.txt COPY code .为什么这样写因为Docker缓存。第一次安装依赖 复制代码第二次改代码Docker发现requirements没变。所以不用重新安装。速度快。错误写法COPY . . RUN pip install -r requirements.txt每次代码变化重新安装依赖。慢。19. 多阶段构建高级生产非常常见。例如Java项目第一阶段编译JDK 源码 jar第二阶段运行JRE jar结构阶段1 maven ↓ 生成 jar 阶段2 jdk小镜像 ↓ 运行jar优势镜像巨大减少。20. 企业 Dockerfile 标准思路通常1. 选择小基础镜像 2. 固定版本 3. 设置WORKDIR 4. 先复制依赖 5. 安装依赖 6. 再复制代码 7. 设置启动命令 8. 不使用root用户21. 常见错误错误1Dockerfile名字错误dockerfile应该Dockerfile大小写敏感。错误2COPY路径错误例如COPY app.py /app但是文件不在当前目录。错误3容器启动马上退出原因CMD执行完结束。例如错误CMD [echo,hello]输出hello然后容器退出。本章核心命令功能命令构建镜像docker build查看镜像docker images查看构建历史docker history删除镜像docker rmi运行镜像docker run第七章Docker Compose多容器项目管理神器到现在你已经会✅ 拉镜像✅ 创建容器✅ 数据持久化✅ 容器网络✅ 制作自己的镜像但是你会发现一个问题真实项目不是一个容器。例如一个电商网站用户 | ↓ Nginx容器 | ↓ Java后端容器 | ----------------- | | ↓ ↓ MySQL容器 Redis容器如果不用 Compose你可能需要docker run nginx ... docker run java ... docker run mysql ... docker run redis ...几十个参数。非常痛苦。Docker Compose 解决用一个配置文件管理整个应用。1. Docker Compose 是什么一句话Docker Compose 是用 YAML 文件描述多个 Docker 容器然后一键启动、停止、管理整个系统。以前docker run ... docker run ... docker run ...现在docker compose up全部启动。2. Compose 的核心文件名字docker-compose.yml例如services: nginx: mysql: redis:它描述有哪些服务使用什么镜像端口网络数据卷环境变量3. 第一个 Compose 示例创建目录my-project/ └── docker-compose.yml内容services: nginx: image: nginx ports: - 8080:80解释services服务列表services:下面每个就是一个容器。nginx服务名字nginx:你自己定义。image使用哪个镜像image: nginx等价docker run nginxports端口ports: - 8080:80等价-p 8080:804. 启动 Compose进入目录cd my-project执行docker compose upDocker自动创建网络拉镜像创建容器启动服务后台启动docker compose up -d查看docker compose ps类似NAME my-project-nginx-1 STATUS running停止docker compose down5. Compose 自动创建网络以前我们需要docker network create app-netCompose自动创建。例如services: mysql: image: mysql backend: image: my-app自动network: my-project_default两个容器自动加入。6. Compose 实战MySQL Redis完整例子services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 123456 ports: - 3306:3306 redis: image: redis ports: - 6379:6379启动docker compose up -d现在两个服务一起运行。7. 数据卷 Volume Compose生产数据库必须保存数据。修改services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 123456 volumes: - mysql_data:/var/lib/mysql volumes: mysql_data:重点下面volumes: mysql_data:表示创建 Docker Volume。等价docker volume create mysql_data8. 环境变量管理不要直接写密码MYSQL_ROOT_PASSWORD: 123456生产使用.env例如项目project/ ├── docker-compose.yml └── .env.env:MYSQL_PASSWORD123456compose:environment: MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}启动时自动读取。9. 完整项目案例现在模拟真实网站结构shop/ ├── docker-compose.yml ├── backend/ │ └── Dockerfile └── nginx/ └── nginx.conf包含Nginx后端MySQLRedisdocker-compose.ymlservices: nginx: image: nginx ports: - 80:80 depends_on: - backend backend: build: ./backend depends_on: - mysql - redis mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 123456 volumes: - mysql_data:/var/lib/mysql redis: image: redis volumes: mysql_data:启动docker compose up -d一次启动nginx | backend | mysql redis10. depends_on 是什么例如backend: depends_on: - mysql意思启动 backend 前先启动 mysql。但是注意它不代表mysql 已经完全准备好。例如MySQL启动需要10秒。backend可能马上连接失败。生产需要healthcheck。11. healthcheck生产技巧例如MySQLmysql: image: mysql:8.0 healthcheck: test: [ CMD, mysqladmin, ping ] interval: 10s意思Docker 检查MySQL 是否真的可用。12. build 自己的镜像Compose 不只是 image。可以backend: build: context: ./backend意思读取backend/Dockerfile自动构建。等价docker build13. image 和 build 区别image使用别人已有镜像image: mysql类似docker pull mysqlbuild自己制作build: ./app类似docker build .14. 查看日志所有服务docker compose logs实时docker compose logs -f指定docker compose logs nginx15. 重启服务全部docker compose restart指定docker compose restart backend16. 进入 Compose 容器例如进入 backenddocker compose exec backend bash类似docker exec -it backend bash17. 更新代码后的流程开发修改代码。重新构建docker compose build重新启动docker compose up -d18. Compose 文件版本思维以前version: 3现在新版 Docker Compose通常可以省略。推荐services:直接开始。19. 企业真实部署流程开发代码 | Dockerfile | 镜像 | docker-compose.yml服务器git clone 项目 cd 项目 docker compose up -d整个系统上线。20. Compose 常用命令总结功能命令启动docker compose up后台启动docker compose up -d停止删除docker compose down查看状态docker compose ps查看日志docker compose logs进入容器docker compose exec重新构建docker compose build重启docker compose restart第八章Docker 部署真实项目从开发到上线前面你已经掌握 Docker 的核心技术镜像 Image ↓ 容器 Container ↓ 数据 Volume ↓ 网络 Network ↓ Dockerfile ↓ Compose现在进入真正工作场景一个项目如何从代码变成线上运行的网站我们模拟一个真实互联网项目。1. 一个真实网站的结构假设我们开发一个商城技术栈前端Vue后端Spring Boot数据库MySQL缓存Redis入口Nginx最终结构用户浏览器 | | ↓ Nginx容器 (80/443端口) | ---------------------- | | ↓ ↓ Vue静态文件 Spring Boot | ------------------ | ↓ MySQL | ↓ Redis2. 服务器准备一般公司服务器Linux例如Ubuntu 22.04安装DockerDocker Compose检查docker version查看docker compose version3. 项目目录设计企业常见例如shop-system/ ├── docker-compose.yml ├── nginx/ │ └── nginx.conf ├── backend/ │ ├── Dockerfile │ └── app.jar ├── frontend/ │ ├── Dockerfile │ └── dist/ └── mysql/ └── init.sql4. 部署后端 Spring Boot假设已经打包app.jar目录backend/ ├── Dockerfile └── app.jarDockerfileFROM eclipse-temurin:17-jdk WORKDIR /app COPY app.jar . EXPOSE 8080 CMD [java,-jar,app.jar]解释FROMJava环境FROM eclipse-temurin:17-jdk提供JDK17。COPY复制COPY app.jar .进入/app/app.jarCMD启动CMD [java,-jar,app.jar]构建docker build -t shop-backend:v1 .测试docker run \ -p 8080:8080 \ shop-backend:v1访问localhost:80805. 部署 Vue 前端Vue 项目开发npm run build生成dist/里面index.html assets/DockerfileFROM nginx COPY dist/ /usr/share/nginx/html/ EXPOSE 80构建docker build \ -t shop-frontend:v1 .运行docker run \ -d \ -p 80:80 \ shop-frontend:v1访问http://服务器IP看到网页。6. 为什么需要 Nginx很多新人疑惑Vue 可以直接运行为什么还需要 Nginx因为 Vue 打包后本质HTML CSS JS 图片只是静态文件。Nginx 擅长提供静态文件反向代理HTTPS负载均衡7. Nginx 反向代理后端用户访问/api/user希望转给Spring Boot:8080配置nginx.confserver { listen 80; location / { root /usr/share/nginx/html; index index.html; } location /api/ { proxy_pass http://backend:8080; } }重点proxy_pass代理。8. 使用 Compose 管理整个系统最终docker-compose.ymlservices: nginx: image: nginx ports: - 80:80 volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf depends_on: - backend backend: build: ./backend environment: DB_HOST: mysql REDIS_HOST: redis depends_on: - mysql - redis mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 123456 volumes: - mysql_data:/var/lib/mysql redis: image: redis volumes: mysql_data:启动docker compose up -d结果CONTAINER nginx backend mysql redis全部启动。9. 数据库连接为什么写 mysql注意Spring 配置以前spring.datasource.url jdbc:mysql://127.0.0.1:3306/shopDocker错误。应该jdbc:mysql://mysql:3306/shop原因Docker 网络 DNS。backend 查询 mysql ↓ Docker DNS ↓ MySQL容器10. 环境变量管理生产不要写死密码。错误MYSQL_ROOT_PASSWORD:123456推荐.env文件MYSQL_PASSWORDxxxxxx MYSQL_DATABASEshopcomposeenvironment: MYSQL_ROOT_PASSWORD:${MYSQL_PASSWORD}11. 自动重启服务器重启怎么办添加restart: always例如backend: restart: always效果服务器重启Docker自动启动服务。12. 查看线上日志网站打不开第一件事看日志。Nginxdocker compose logs nginx后端docker compose logs backend实时docker compose logs -f backend13. 进入线上容器排查例如后端docker compose exec backend bash检查ls环境env网络ping mysql14. 更新版本怎么做比如代码修改。流程1. 拉代码git pull2. 重新构建docker compose build3. 重启docker compose up -d完成升级。15. 零停机部署进阶大公司不会直接停止旧版本 启动新版本因为会中断。使用蓝绿部署Nginx | ---------------- | | v1容器 v2容器 旧版本 新版本测试 v2成功切换流量。16. Docker 日志管理默认日志存在/var/lib/docker/containers/长期运行会爆。配置限制大小{ log-driver:json-file, log-opts:{ max-size:10m, max-file:3 } }生产必须做。17. Docker 安全基础不要直接 root。Dockerfile错误USER root推荐创建用户RUN useradd app USER app不要随便暴露端口。例如数据库3306不应该开放公网。18. Docker 生产检查清单上线前镜像✅ 固定版本不要latest数据✅ Volume数据库必须持久化。网络✅ 自定义 network密码✅ 环境变量日志✅ 限制大小重启✅ restart安全✅ 非 root19. 一个真实服务器上线流程公司常见开发电脑 ↓ 提交 Git ↓ CI/CD 自动构建 ↓ Docker build ↓ 推送镜像仓库 ↓ 服务器 pull 镜像 ↓ docker compose up -d ↓ 上线

相关新闻

YOLOv8 AI自瞄:5分钟打造智能瞄准助手的终极指南

YOLOv8 AI自瞄:5分钟打造智能瞄准助手的终极指南

YOLOv8 AI自瞄:5分钟打造智能瞄准助手的终极指南 【免费下载链接】yolov8_aimbot Aim-bot based on AI for all FPS games 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_aimbot YOLOv8 AI自瞄是一款基于深度学习的智能瞄准辅助工具,专为F…

2026/8/10 17:29:17 阅读更多 →
Qiskit量子编程终极指南:从零开始掌握量子计算核心技能

Qiskit量子编程终极指南:从零开始掌握量子计算核心技能

Qiskit量子编程终极指南:从零开始掌握量子计算核心技能 【免费下载链接】qiskit Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives. 项目地址: https://gitcode.com/gh_m…

2026/8/10 17:29:17 阅读更多 →
如何快速上手Ludo:跨平台libretro前端的完整安装与配置指南

如何快速上手Ludo:跨平台libretro前端的完整安装与配置指南

如何快速上手Ludo:跨平台libretro前端的完整安装与配置指南 【免费下载链接】ludo A libretro frontend written in golang 项目地址: https://gitcode.com/gh_mirrors/lu/ludo Ludo是一款用Go语言开发的libretro前端工具,支持在OSX、Linux、Linu…

2026/8/10 17:28:17 阅读更多 →

最新新闻

高校证书管理系统渗透测试实战与安全加固

高校证书管理系统渗透测试实战与安全加固

1. 项目背景与目标 去年夏天,我受邀对某高校的证书管理系统进行安全评估。这个系统承载着全校师生各类证书的申请、审核和发放功能,包含大量敏感个人信息。校方在系统升级后希望进行全面的渗透测试,以发现潜在安全隐患。 2. 信息收集阶段 …

2026/8/10 18:08:38 阅读更多 →
Java后端已死?真的假的?

Java后端已死?真的假的?

有人说Java已死,AI时代写增删改查的程序员迟早被淘汰,也有人说Java仍是行业基石,岗位基数遥遥领先。现实从来不是非黑即白,2026年的Java后端就业市场,两极分化已经走到了极致。一边是上千份简历争抢一个基础岗&#xf…

2026/8/10 18:08:38 阅读更多 →
OpenCensus-Java与OC-Agent实战:构建企业级分布式追踪平台

OpenCensus-Java与OC-Agent实战:构建企业级分布式追踪平台

OpenCensus-Java与OC-Agent实战:构建企业级分布式追踪平台 【免费下载链接】opencensus-java A stats collection and distributed tracing framework 项目地址: https://gitcode.com/gh_mirrors/op/opencensus-java OpenCensus-Java是一款功能强大的分布式追…

2026/8/10 18:08:38 阅读更多 →
argon2-cffi安全最佳实践:避免90%开发者都会犯的密码哈希错误

argon2-cffi安全最佳实践:避免90%开发者都会犯的密码哈希错误

argon2-cffi安全最佳实践:避免90%开发者都会犯的密码哈希错误 【免费下载链接】argon2-cffi Secure Password Hashes for Python 项目地址: https://gitcode.com/gh_mirrors/ar/argon2-cffi 在当今数字化时代,密码安全至关重要。argon2-cffi作为P…

2026/8/10 18:08:38 阅读更多 →
没人再喊“前端已死”了,这可能才是最危险的信号

没人再喊“前端已死”了,这可能才是最危险的信号

最近,我发现技术圈突然安静了。 去年这个时候,社区里最不缺的就是这类标题: 前端已死。 后端已亡。 AI即将淘汰程序员。 每出来一个新的AI编程工具,前端就要“死”一次;模型生成接口的能力强一点,后端也要跟…

2026/8/10 18:08:38 阅读更多 →
如何为AListApart提交首个PR?开源协作流程全解析

如何为AListApart提交首个PR?开源协作流程全解析

如何为AListApart提交首个PR?开源协作流程全解析 【免费下载链接】AListApart The A List Apart front end repo 项目地址: https://gitcode.com/gh_mirrors/al/AListApart AListApart作为一个开放源代码项目,为开发者提供了一个友好的协作环境&a…

2026/8/10 18:07:38 阅读更多 →

日新闻

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南 【免费下载链接】graphql-css A blazing fast CSS-in-GQL™ library. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-css GraphQL-CSS是一个基于GraphQL的CSS-in-GQL™库&#xff0…

2026/8/10 0:00:02 阅读更多 →
告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南

告别语言障碍:KISS Translator 双语翻译插件终极指南 【免费下载链接】kiss-translator A simple, open source bilingual translation extension & Greasemonkey script (一个简约、开源的 双语对照翻译扩展 & 油猴脚本) 项目地址: https://gitcode.com/…

2026/8/10 0:00:02 阅读更多 →
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 你是否曾经因为游戏插件的复杂…

2026/8/10 0:00:02 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/10 1:05:29 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/10 1:05:29 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/10 1:05:29 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/10 1:05:29 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →