以下是使用 Docker Compose v2.27 安装 Milvus v2.5.8 的详细步骤,包含必要的配置和验证过程:
📦 一、环境准备
- 系统要求:
-
- Linux 系统(推荐 Ubuntu 20.04+)
- Docker Engine v20.10+
- Docker Compose v2.27+
- 最低资源:4核 CPU / 8GB RAM / 50GB 存储
- 验证版本:
docker --version # Docker >=20.10
docker compose version # Docker Compose >=2.27
📝 二、创建配置文件
- 创建项目目录:
mkdir milvus-standalone && cd milvus-standalone
- 创建
docker-compose.yml
文件:
version: '3.8'
services:
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.9
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- etcd_data:/etcd
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
minio:
container_name: milvus-minio
image: minio/minio:RELEASE.2023-09-04T19-57-37Z
environment:
- MINIO_ACCESS_KEY=minioadmin
- MINIO_SECRET_KEY=minioadmin
volumes:
- minio_data:/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.5.8
command: ["milvus", "run", "standalone"]
environment:
- ETCD_ENDPOINTS=etcd:2379
- MINIO_ADDRESS=minio:9000
- MINIO_ACCESS_KEY=minioadmin
- MINIO_SECRET_KEY=minioadmin
volumes:
- milvus_data:/var/lib/milvus
ports:
- "19530:19530" # Milvus 服务端口
- "9091:9091" # 指标监控端口
depends_on:
- "etcd"
- "minio"
volumes:
etcd_data:
minio_data:
milvus_data:
⚙️ 三、启动 Milvus 服务
- 使用 Docker Compose 启动:
docker compose up -d
- 检查服务状态:
docker compose ps
预期输出:
NAME COMMAND SERVICE STATUS PORTS
milvus-etcd "etcd -advertise-cl…" etcd running 2379-2380/tcp
milvus-minio "/usr/bin/docker-ent…" minio running (healthy) 0.0.0.0:9000-9001->9000-9001/tcp
milvus-standalone "/tini -- milvus run…" standalone running 0.0.0.0:9091->9091/tcp, 0.0.0.0:19530->19530/tcp
🔍 四、验证安装
- 检查日志:
docker compose logs standalone
关键成功信息:
[INFO] [sessionutil/session.go:676] ["register service"] ["service name"=Proxy] ...
[INFO] [components/standalone.go:638] ["Milvus started successfully!"]
- 使用 Attu 管理界面(可选):
docker run -d -p 8000:3000 \
-e MILVUS_URL=localhost:19530 \
zilliz/attu:v2.5.8
访问 http://localhost:8000
- Python SDK 测试:
from pymilvus import connections, Collection, FieldSchema, DataType, CollectionSchema
# 连接 Milvus
connections.connect(host="localhost", port="19530")
# 创建测试集合
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, "test_collection")
collection = Collection("test_collection", schema)
# 插入测试数据
data = [
[i for i in range(100)],
[[random.random() for _ in range(128)] for _ in range(100)]
]
collection.insert(data)
# 查询验证
collection.load()
results = collection.search(
data=[data[1][0]],
anns_field="vector",
param={"metric_type": "L2", "params": {"nprobe": 10}},
limit=5
)
print(results[0].ids) # 应返回 [0, ...]
⚠️ 五、关键配置说明
- 端口映射:
-
19530
:Milvus 服务端口(必需)9091
:Prometheus 指标端口(监控用)9000
:MinIO 对象存储端口2379
:etcd 服务端口
- 数据持久化:
-
- 所有数据保存在 Docker 卷中:
docker volume inspect milvus-standalone_etcd_data
docker volume inspect milvus-standalone_minio_data
docker volume inspect milvus-standalone_milvus_data
-
- 自定义存储路径(修改
docker-compose.yml
):
- 自定义存储路径(修改
volumes:
etcd_data:
driver: local
driver_opts:
o: bind
type: none
device: /path/to/etcd_data
- 资源限制(生产环境必加):
standalone:
deploy:
resources:
limits:
cpus: '4.0'
memory: 8G
mem_limit: 8g
cpus: 4.0
🔄 六、日常运维命令
操作 |
命令 |
启动服务 |
|
停止服务 |
|
查看日志 |
|
升级版本 |
修改 image 为 |
备份数据 |
备份 Docker 卷对应目录 |
清理缓存 |
|
🚨 七、故障排查
- 服务启动失败:
-
- 检查端口冲突:
netstat -tuln | grep -E '19530|9091'
- 查看详细日志:
docker compose logs --tail 100 standalone
- 检查端口冲突:
- 存储空间不足:
docker system df # 查看 Docker 磁盘使用
docker volume prune # 清理未使用卷
- 连接问题:
-
- 验证网络连通性:
docker compose exec standalone curl -v etcd:2379/health
docker compose exec standalone curl -v minio:9000
通过以上步骤,您已完成 Milvus v2.5.8 的 Docker Compose 部署。建议生产环境增加 Prometheus+Grafana 监控,配置详见 Milvus 监控文档。