本文延续前两篇,演示如何把一个已经在本地运行良好的 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 的风格。
lzc-sdk-version: "0.1"
name: Milvus
package: in.zhaoj.milvus
version: 2.5.8
author: milvus
application:
# 子域名:应用上线后将访问 https://milvus.<机器名>.heiyu.space
subdomain: milvus
background_task: false # 是否允许后台运行
multi_instance: false # 是否允许多实例
gpu_accel: false # 是否请求 GPU
routes: # 七层(HTTP)路由
- /=http://attu.in.zhaoj.milvus.lzcapp:3000/
ingress: # 四层(TCP)转发
- protocol: tcp
port: 19530
service: standalone
- protocol: tcp
port: 9091
service: standalone
services: # 以下基本等同于 docker‑compose 中的 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:
- standalone2.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,方便对照理解:
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. 镜像加速实践
一条命令即可完成镜像复制并输出新的仓库地址:
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 集成等,我们将在后续文章继续分享。

