本文延续前两篇,演示如何把一个已经在本地运行良好的 Docker Compose 应用打包并上架到懒猫微服应用商店。以 Milvus 为例,逐步拆解 Manifest 配置、路由映射、数据卷绑定以及镜像加速等关键环节,帮助大家快速完成移植。
1. 目录结构与核心文件
在懒猫微服中,一个最小可用的应用包仅需两个文件:
文件 |
作用 |
lzc-build.yml |
描述打包流程及应用图标。简单应用只需指定 icon 即可。 |
lzc-manifest.yml |
定义应用元数据与服务编排,是移植的重点。 |
本文主要关注 lzc-manifest.yml
的编写。
2. lzc-manifest.yml
字段逐一解析
现在有了懒猫应用查看器很方便,我们以商店里的 Milvus 的示例 Manifest 为例,并附带注释说明。

这个 lzc-mainfest.yml 解析是重点。主要是 subdomain,ingress,services 这几个字段。总体上还是延续了 Docker compose 的风格。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| lzc-sdk-version: "0.1" name: Milvus package: in.zhaoj.milvus version: 2.5.8 author: milvus application: subdomain: milvus background_task: false multi_instance: false gpu_accel: false routes: - /=http://attu.in.zhaoj.milvus.lzcapp:3000/ ingress: - protocol: tcp port: 19530 service: standalone - protocol: tcp port: 9091 service: standalone services: etcd: image: registry.lazycat.cloud/longixaoyi/milvusdb/etcd:v3.5.18 environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 - ETCD_SNAPSHOT_COUNT=50000 command: > etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd binds: - /lzcapp/var/etcd:/etcd minio: image: registry.lazycat.cloud/longixaoyi/milvusdb/minio:RELEASE.2023-03-20T20-16-18Z environment: - MINIO_ACCESS_KEY=minioadmin - MINIO_SECRET_KEY=minioadmin command: minio server /minio_data binds: - /lzcapp/var/minio_data:/minio_data health_check: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] standalone: image: registry.lazycat.cloud/longixaoyi/milvusdb/milvus:v2.6.0-rc1 command: milvus run standalone environment: - ETCD_ENDPOINTS=etcd:2379 - MINIO_ADDRESS=minio:9000 depends_on: - etcd - minio binds: - /lzcapp/var/milvus:/var/lib/milvus attu: image: registry.lazycat.cloud/longixaoyi/zilliz/attu:latest environment: - MILVUS_URL=standalone:19530 depends_on: - standalone
|
2.1 subdomain
subdomain 是应用程序上线的域名,例如上述配置上线后即为 https://milvus.<节点名>.heiyu.space
。
2.2 routes
route 来做七层的 HTTP 转发,类似 Nginx 的反向代理。规则格式为 本地路径 = 目标 URL
。在示例中,根路径 /
被转发到前端服务 attu
的 3000 端口。
URL 规则:服务名.包名.lzcapp:端口。(包名随意起)
- /=http://attu.in.zhaoj.milvus.lzcapp:3000/
这里 attu 是服务名,端口是 3000,in.zhaoj.milvus 是包名。
2.3 ingress
用于四层直通转发,适用于非 HTTP 协议(数据库、SSH 等)。示例将 Milvus 的 gRPC (19530) 与 HTTP (9091) 端口暴露给外部。
2.4 bind
Manifest 中的绑定路径以 /lzcapp/var
为前缀。发布后会被映射到宿主机的 /data/app/var/<package>
,也算是为了简化程序移植和学习成本。和 Docker-compose 写绝对路径来说,这里的可移植性执行更好。
健康检查在这里不是必须的,因为打包的上架的时候服务会帮忙做这个事情。
3. 服务映射与 docker-compose.yml
对照
懒猫 Manifest 的 services
段几乎一一复刻了传统 Compose 配置,常用键均保持一致。以下列出了 Milvus 官方 docker-compose.yml
,方便对照理解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| version: "3.5"
services: etcd: container_name: milvus-etcd image: quay.io/coreos/etcd:v3.5.18 environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 - ETCD_SNAPSHOT_COUNT=50000 volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd healthcheck: test: ["CMD", "etcdctl", "endpoint", "health"] interval: 30s timeout: 20s retries: 3
minio: container_name: milvus-minio image: minio/minio:RELEASE.2023-03-20T20-16-18Z environment: MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin ports: - "9001:9001" - "9000:9000" volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data command: minio server /minio_data --console-address ":9001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3
standalone: container_name: milvus-standalone image: milvusdb/milvus:v2.6.0-rc1 command: ["milvus", "run", "standalone"] security_opt: - seccomp:unconfined environment: ETCD_ENDPOINTS: etcd:2379 MINIO_ADDRESS: minio:9000 MQ_TYPE: woodpecker volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"] interval: 30s start_period: 90s timeout: 20s retries: 3 ports: - "19530:19530" - "9091:9091" depends_on: - "etcd" - "minio"
networks: default: name: milvus
|
差异点主要体现在:
- 镜像源:建议通过
lzc-cli appstore copy-image <image>
把镜像同步到 registry.lazycat.cloud
,解决国内网络拉取问题。
- 端口声明:在 Manifest 中,外部访问端口通过
ingress
,不再使用 Compose 的 ports
。
- 健康检查:懒猫平台会统一探测容器存活,可按需省略
healthcheck
。
4. 镜像加速实践
一条命令即可完成镜像复制并输出新的仓库地址:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| lzc-cli appstore copy-image nginx (base) 13:15:36 Waiting ... ( copy nginx to lazycat offical registry) uploading 23e05839: [####################################################################################################] 100% 23e05839: [####################################################################################################] 100% 23e05839: [####################################################################################################] 100% 3da95a90: [####################################################################################################] 100% 48670a58: [####################################################################################################] 100% 6c8e51cf: [####################################################################################################] 100% 9bbbd7ee: [####################################################################################################] 100% ce713206: [####################################################################################################] 100% ee95256d: [####################################################################################################] 100%
uploaded: registry.lazycat.cloud/u04123229/library/nginx:d037205fbaf7d60a
|
将生成的地址替换到 Manifest 的 image
字段即可。
5. 小结
- Manifest 为核心:
lzc-manifest.yml
描述了全部运行时需求,移植时优先完善此文件。
- 路由分层:
routes
管理 HTTP,ingress
管理 TCP,二者配合即可覆盖绝大多数场景。
- 统一数据目录:使用
/lzcapp/var
避免硬编码路径,便于跨节点迁移。
- 镜像国内托管:通过
lzc-cli appstore copy-image
自动同步到 LazyCat Registry,稳定又快速。
至此,Milvus 的 Docker Compose 应用已成功移植到懒猫微服。更多进阶玩法,例如 OIDC、VNC 集成等,我们将在后续文章继续分享。