图片查重从设计到实现(4)图片向量化存储-Milvus 单机版部署 Milvus 单机版部署在 Docker 环境下安装、应用和配置 Milvus 向量数据库可以按照以下步骤进行涵盖从安装到基础应用的完整流程1. 部署前准备服务器建议测试环境配置 2 核 CPU、8GB 内存处理 100 万组向量数据推荐 4 核 CPU、16GB 内存及 50GB 存储500 万组向量数据则需 8 核 CPU、32GB 内存及 200GB 存储 。软件层面服务器需安装 Docker1.1 Milvus 单机版镜像# 拉取最新版 Milvus 单机版镜像dockerpull milvusdb/milvus:latest# 或指定具体版本推荐版本更稳定dockerpull milvusdb/milvus:v2.4.51.2 MinIO 镜像对象存储docker pull minio/minio:RELEASE.2023-03-20T20-16-18Z参考图片存储MinIO 应用介绍及 Docker 环境下的安装部署1.3拉取 etcd 镜像元数据存储# Milvus 推荐的 etcd 版本dockerpull quay.io/coreos/etcd:v3.5.5Milvus安装准备etcd介绍、应用场景及Docker安装配置2. 启动 Milvus 单机服务2.1配置文件 milvus-config文件挂载的目录下进入milvus-config在线拉去配置文件wgethttps://raw.githubusercontent.com/milvus-io/milvus/v2.4.5/configs/milvus.yaml2.2 etcd的配置2.3 mino的配置3. 启动服务dockerrun-d\--namemilvus245\# 容器名称方便后续管理-p19530:19530\# 端口映射宿主机19530 - 容器19530客户端连接端口-p9091:9091\# 端口映射宿主机9091 - 容器9091监控/健康检查端口--privileged\# 授予容器特权模式避免部分文件系统权限问题-v/data/milvus/milvus-config/milvus.yaml:/milvus/configs/milvus.yaml\# 挂载自定义配置文件-v/data/milvus/milvus-data:/milvus/data\# 挂载数据目录持久化向量数据-v/data/milvus/milvus-var:/var/lib/milvus\# 挂载var目录内部状态文件-v/data/milvus/milvus-logs:/milvus/logs\# 挂载日志目录持久化日志milvusdb/milvus:v2.4.5\# 使用的镜像Milvus 2.4.5版本milvus run standalone# 容器启动命令以单机模式运行Milvus关键参数说明–name milvus245为容器指定一个唯一名称milvus245后续可通过该名称操作容器如 docker stop milvus245避免使用自动生成的随机名称。端口映射-p19530Milvus 客户端 SDK 连接的端口如 Python 的 pymilvus、Java SDK 等。9091Milvus 监控和健康检查端口可通过 http://localhost:9091/healthz 检查服务状态。–privileged授予容器特权模式解决部分环境下因文件系统权限不足导致的启动失败如宿主机目录权限严格时非必需但建议添加以避免权限问题。数据持久化-v 挂载通过 volume 挂载将容器内的关键目录映射到宿主机确保容器删除后数据不丢失配置文件/data/milvus/milvus-config/milvus.yaml宿主机→ /milvus/configs/milvus.yaml容器用于加载自定义配置。数据目录/milvus/data 存储向量数据和索引文件映射到宿主机 /data/milvus/milvus-data。日志目录/milvus/logs 存储运行日志映射到宿主机 /data/milvus/milvus-logs方便问题排查。启动命令milvus run standalone明确指定 Milvus 以单机模式standalone运行这是 v2.4.x 版本的标准启动方式确保 tini 初始化进程能正确启动 Milvus 主服务。4. 检查服务状态# 检查健康状态curlhttp://localhost:9091/healthz# 查看版本信息curlhttp://localhost:9091/v1/version5、基础操作示例使用 Python 客户端连接并操作 Milvus# 安装客户端# pip install pymilvusfrompymilvusimport(connections,utility,FieldSchema,CollectionSchema,DataType,Collection,)importrandom# 1. 连接到 Milvusconnections.connect(aliasdefault,hostlocalhost,# 若在远程服务器替换为实际IPport19530)# 2. 定义集合名称collection_namedemo_vectors# 3. 若集合已存在则删除ifutility.has_collection(collection_name):utility.drop_collection(collection_name)# 4. 定义集合结构fields[FieldSchema(nameid,dtypeDataType.INT64,is_primaryTrue,auto_idFalse),FieldSchema(nameembedding,dtypeDataType.FLOAT_VECTOR,dim384),# 384维向量FieldSchema(namecategory,dtypeDataType.VARCHAR,max_length50)# 分类信息]schemaCollectionSchema(fieldsfields,description演示用向量集合)# 5. 创建集合collectionCollection(namecollection_name,schemaschema)# 6. 创建索引index_params{index_type:IVF_FLAT,metric_type:COSINE,# 使用余弦相似度params:{nlist:128}}collection.create_index(field_nameembedding,index_paramsindex_params)# 7. 插入示例数据num_entities1000data[[iforiinrange(num_entities)],# id[[random.random()for_inrange(384)]for_inrange(num_entities)],# 向量[fcategory_{random.randint(1,10)}for_inrange(num_entities)]# 分类]insert_resultcollection.insert(data)print(f成功插入{len(insert_result.primary_keys)}条数据)# 8. 加载集合到内存collection.load()# 9. 执行向量搜索query_vector[[random.random()for_inrange(384)]]# 生成查询向量search_params{metric_type:COSINE,params:{nprobe:10}}resultscollection.search(dataquery_vector,anns_fieldembedding,paramsearch_params,limit5,# 返回前5个最相似结果output_fields[category])# 10. 输出搜索结果print(\n搜索结果按相似度排序)forhitinresults[0]:print(fID:{hit.id}, 分类:{hit.entity.get(category)}, 相似度:{1-hit.distance:.4f})# 11. 释放集合collection.release()# 12. 断开连接connections.disconnect(default)快捷dockerrun-d--nameetcd-p2379:2379-p2380:2380-eALLOW_NONE_AUTHENTICATIONyes-eALLOW_NONE_AUTHENTICATIONyes-eETCD_ADVERTISE_CLIENT_URLShttp://0.0.0.0:2379-eETCD_LISTEN_CLIENT_URLShttp://0.0.0.0:2379-eETCD_INITIAL_ADVERTISE_PEER_URLShttp://0.0.0.0:2380-eETCD_LISTEN_PEER_URLShttp://0.0.0.0:2380-eETCD_INITIAL_CLUSTERdefaulthttp://0.0.0.0:2380-v/data/etcd:/bitnami/etcd quay.io/coreos/etcd:v3.5.5dockerrun-d--nameminio-milvus-p9000:9000-p9001:9001-v/data/minio/data:/data-v/data/minio/config:/root/.minio-eMINIO_ROOT_USERminioadmin-eMINIO_ROOT_PASSWORDminioadmin-eMINIO_SERVER_URLhttp://192.168.x.xx:9000minio/minio server /data --console-address:9001dockerrun-d--namemilvus245-p19530:19530-p9091:9091 --privileged-v /data/milvus/milvus-config/milvus.yaml:/milvus/configs/milvus.yaml-v/data/milvus/milvus-data:/milvus/data-v/data/milvus/milvus-var:/var/lib/milvus-v/data/milvus/milvus-logs:/milvus/logs milvusdb/milvus:v2.4.5 milvus run standalone总结通过以上步骤即可完成 Milvus 单机版在 Docker 环境下的部署、配置及基础应用。这种部署方式适合中小规模向量数据的管理与检索场景如实验环境测试、小型 AI 应用开发等。