跳转至

基于 Docker 部署单机版 Milvus 和 Redis 教程

本教程介绍如何在 Windows 11 和 M1 芯片的 macOS 系统上使用 Docker 同时部署和运行单机版 Milvus(向量数据库)和 Redis(键值存储数据库)。教程分为两部分,分别针对不同操作系统提供详细步骤。

前置条件

  • 硬件要求
    • 至少 8GB 内存(建议 16GB 或更高)。
    • 至少 20GB 可用磁盘空间(Milvus 和 Redis 数据存储)。
  • 软件要求
    • 已安装 Docker Desktop(Windows 11 或 macOS)。
    • 确保 Docker Compose 已包含在 Docker Desktop 中(通常默认安装)。
  • 网络要求
    • 稳定的互联网连接,用于拉取 Docker 镜像。
  • 软件版本
    • Milvus:2.4.4(最新稳定版)。
    • Redis:7.2(最新稳定版)。
  • 端口要求
    • Milvus:19530(gRPC)、9091(RESTful API)。
    • Redis:6379(默认端口)。
    • 确保以上端口未被占用。

一、Windows 11 系统部署 Milvus 和 Redis

1. 安装 Docker Desktop

  1. 下载 Docker Desktop

  2. 安装 Docker Desktop

    • 双击下载的安装文件,按照提示完成安装。
    • 启用 WSL 2(Windows Subsystem for Linux 2)支持:

      • 打开 PowerShell(以管理员身份),运行:

        wsl --install
        
      • 安装完成后,重启计算机。
  3. 验证 Docker 安装

    • 打开 PowerShell 或命令提示符,运行:

      docker --version
      docker compose version
      
    • 确保输出版本信息,例如 Docker version 27.x.xDocker Compose version v2.x.x

2. 配置 Docker Compose 文件

  1. 创建项目目录

    • 在本地磁盘(例如 C盘)创建一个文件夹,用于存放 Milvus 和 Redis 的配置文件和数据:

      mkdir C:\milvus_redis
      cd C:\milvus_redis
      
  2. 创建 Docker Compose 文件

    • 在 C:\milvus_redis 目录下创建文件

      docker-compose.yml
      

      内容如下:

      version: '3.5'
      
      # Windows/x86_64 Version
      # Redis Password set to: 1234
      
      services:
        etcd:
          container_name: milvus-etcd
          image: quay.io/coreos/etcd:v3.5.5
          environment:
            - ETCD_AUTO_COMPACTION_MODE=revision
            - ETCD_AUTO_COMPACTION_RETENTION=1000
            - ETCD_QUOTA_BACKEND_BYTES=4294967296
            - ETCD_ENABLE_V2=true
          volumes:
            - ./volumes/etcd:/etcd/data
          command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd/data
      
        minio:
          container_name: milvus-minio
          image: minio/minio:RELEASE.2023-03-20T20-16-18Z
          environment:
            MINIO_ACCESS_KEY: minioadmin
            MINIO_SECRET_KEY: minioadmin
          volumes:
            - ./volumes/minio:/minio/data
          command: minio server /minio/data
          healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
            interval: 30s
            timeout: 20s
            retries: 3
      
        standalone:
          container_name: milvus-standalone
          # 使用多架构镜像,Docker on Windows 会自动拉取 x86_64 版本
          image: milvusdb/milvus:v2.4.4
          command: ["milvus", "run", "standalone"]
          environment:
            - ETCD_ENDPOINTS=etcd:2379
            - MINIO_ADDRESS=minio:9000
          volumes:
            - ./volumes/milvus:/var/lib/milvus
          ports:
            - "19530:19530"
            - "9091:9091"
          depends_on:
            - "etcd"
            - "minio"
      
        redis:
          container_name: milvus-redis
          image: redis:latest
          restart: always
          ports:
            - "6379:6379"
          volumes:
            - ./volumes/redis:/data
          # 设置 Redis 密码为 1234
          command: redis-server --requirepass 1234
      
      networks:
        default:
          name: milvus-network
      
    • 说明

      • Milvus 服务

        • image: 使用 Milvus 官方镜像 milvusdb/milvus:v2.4.10
        • ports: 映射 gRPC(19530)和 RESTful API(9091)端口。
        • volumes: 数据持久化存储到本地 ./volumes/milvus 目录。
        • environment: 配置日志级别和 Etcd 参数。
        • command: 启动 Milvus 单机模式。
      • Redis 服务

        • image: 使用 Redis 官方镜像 redis:7.2
        • ports: 映射默认端口 6379
        • volumes: 数据持久化存储到本地 ./volumes/redis 目录。
        • command: 启用 AOF(Append Only File)持久化模式。
      • volumes: 定义持久化存储卷。

3. 启动 Milvus 和 Redis

  1. 拉取镜像并启动容器

    • 在 C:\milvus_redis 目录下,打开 PowerShell,运行:

      docker compose up -d
      
    • -d 表示后台运行容器。
  2. 验证容器状态

    • 检查容器是否正常运行:

      docker ps
      
    • 确认 milvus_standaloneredis 容器均处于 Up 状态。

4. 验证 Milvus 服务

  1. 安装 Milvus Python SDK

    • 确保已安装 Python 3.8 或以上版本。
    • 在 PowerShell 中安装:

      pip install pymilvus
      
  2. 测试 Milvus 连接

    • 创建 Python 脚本(例如 test_milvus.py ),内容如下:

      from pymilvus import connections, utility
      
      # 连接到 Milvus
      connections.connect(host="localhost", port="19530")
      
      # 检查版本
      print(f"Milvus version: {utility.get_server_version()}")
      
    • 运行脚本:

      python test_milvus.py
      
    • 输出类似 Milvus version: 2.4.10 表示 Milvus 部署成功。

5. 验证 Redis 服务

  1. 安装 Redis Python 客户端

    • 在 PowerShell 中安装:

      pip install redis
      
  2. 测试 Redis 连接

    • 创建 Python 脚本(例如 test_redis.py ),内容如下:

      import redis
      
      # 连接到 Redis
      client = redis.Redis(host="localhost", port=6379, decode_responses=True)
      
      # 测试读写
      client.set("test_key", "Hello, Redis!")
      value = client.get("test_key")
      print(f"Redis value: {value}")
      
    • 运行脚本:

      python test_redis.py
      
    • 输出类似 Redis value: Hello, Redis! 表示 Redis 部署成功。

6. 停止和清理

  • 停止服务

    docker compose down
    

二、M1 芯片 macOS 系统部署 Milvus 和 Redis

M1 芯片(ARM64 架构)运行 Docker 时需确保镜像兼容性。Milvus 和 Redis 官方镜像均支持 ARM64,因此可以直接使用,但需正确配置 Docker Desktop。

1. 安装 Docker Desktop

  1. 下载 Docker Desktop

    • 访问 Docker 官方网站,下载适用于 macOS(Apple Silicon)的 Docker Desktop 安装包。
  2. 安装 Docker Desktop

    • 双击下载的 .dmg 文件,按照提示拖动安装。
    • 安装完成后,启动 Docker Desktop,并确保其在菜单栏运行。
  3. 验证 Docker 安装

    • 打开终端,运行:

      docker --version
      docker compose version
      
    • 确保输出版本信息,例如 Docker version 27.x.xDocker Compose version v2.x.x
  4. 启用 Rosetta(可选)

    • 如果遇到兼容性问题,可在 Docker Desktop 设置中启用 Rosetta 模拟:
      • 打开 Docker Desktop -> Settings -> Features in Development -> 勾选 “Use Rosetta for x86/AMD64 emulation on Apple Silicon”。

2. 配置 Docker Compose 文件

  1. 创建项目目录

    • 在终端中创建并进入目录:

      mkdir ~/milvus_redis
      cd ~/milvus_redis
      
  2. 创建 Docker Compose 文件

    • 创建文件

      docker-compose.yml
      
      version: '3.5'
      
      # M1/ARM64 Mac Version
      # Redis Password set to: 1234
      
      services:
        etcd:
          container_name: milvus-etcd
          image: quay.io/coreos/etcd:v3.5.5
          environment:
            - ETCD_AUTO_COMPACTION_MODE=revision
            - ETCD_AUTO_COMPACTION_RETENTION=1000
            - ETCD_QUOTA_BACKEND_BYTES=4294967296
            - ETCD_ENABLE_V2=true
          volumes:
            - ./volumes/etcd:/etcd/data
          command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd/data
      
        minio:
          container_name: milvus-minio
          image: minio/minio:RELEASE.2023-03-20T20-16-18Z
          environment:
            MINIO_ACCESS_KEY: minioadmin
            MINIO_SECRET_KEY: minioadmin
          volumes:
            - ./volumes/minio:/minio/data
          command: minio server /minio/data
          healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
            interval: 30s
            timeout: 20s
            retries: 3
      
        standalone:
          container_name: milvus-standalone
          # 使用多架构镜像,Docker on M1 会自动拉取 ARM64 版本
          image: milvusdb/milvus:v2.4.4
          command: ["milvus", "run", "standalone"]
          environment:
            - ETCD_ENDPOINTS=etcd:2379
            - MINIO_ADDRESS=minio:9000
          volumes:
            - ./volumes/milvus:/var/lib/milvus
          ports:
            - "19530:19530"
            - "9091:9091"
          depends_on:
            - "etcd"
            - "minio"
      
        redis:
          container_name: milvus-redis
          image: redis:latest # Redis 官方镜像同样支持多架构
          restart: always
          ports:
            - "6379:6379"
          volumes:
            - ./volumes/redis:/data
          # 设置 Redis 密码为 1234
          command: redis-server --requirepass 1234
      
      networks:
        default:
          name: milvus-network
      
    • 注意:Milvus 和 Redis 镜像均支持 ARM64,无需额外配置。

3. 启动 Milvus 和 Redis

  1. 拉取镜像并启动容器

    • 在 ~/milvus_redis 目录下,运行:

      docker compose up -d
      
  2. 验证容器状态

    • 检查容器是否运行:

      docker ps
      
    • 确认 milvus_standaloneredis 容器均处于 Up 状态。

4. 验证 Milvus 服务

  1. 安装 Milvus Python SDK

    • 确保已安装 Python 3.8 或以上版本。
    • 在终端中安装:

      pip install pymilvus
      
  2. 测试 Milvus 连接

    • 创建 Python 脚本(例如 test_milvus.py ),内容与 Windows 部分相同:

      from pymilvus import connections, utility
      
      # 连接到 Milvus
      connections.connect(host="localhost", port="19530")
      
      # 检查版本
      print(f"Milvus version: {utility.get_server_version()}")
      
    • 运行脚本:

      python test_milvus.py
      

5. 验证 Redis 服务

  1. 安装 Redis Python 客户端

    • 在终端中安装:

      pip install redis
      
  2. 测试 Redis 连接

    • 创建 Python 脚本(例如 test_redis.py ),内容与 Windows 部分相同:

      import redis
      
      # 连接到 Redis
      client = redis.Redis(host="localhost", port=6379, decode_responses=True)
      
      # 测试读写
      client.set("test_key", "Hello, Redis!")
      value = client.get("test_key")
      print(f"Redis value: {value}")
      
    • 运行脚本:

      python test_redis.py
      

6. 停止和清理

  • 停止服务

    docker compose down
    
  • 清理数据

    (可选):

    • 删除 milvus 和 redis 目录:

      rm -rf ~/milvus_redis/volumes/milvus
      rm -rf ~//milvus_redis/volumes/redis
      

常见问题与解决方法

  1. 端口冲突

    • 如果 1953090916379 端口被占用,修改 docker-compose.yml 中的端口映射(例如 19531:19530),并在客户端连接时使用新端口。
  2. 镜像拉取失败

    • 确保网络连接正常,或尝试手动拉取镜像:

      docker pull milvusdb/milvus:v2.4.10
      docker pull redis:7.2
      
  3. M1 芯片兼容性问题

    • 如果镜像运行失败,检查 Docker Desktop 是否启用了 Rosetta 模拟。
  4. 连接失败

    • 确保容器运行正常,检查防火墙(Windows)或网络设置(macOS)是否阻止了端口。
  5. Redis 数据未持久化

    • 确保 docker-compose.yml 中启用了 --appendonly yes,且 ./redis_data 目录有写权限。

参考资源