文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

Docker

了解如何通过 Docker 部署 Haystack 管道,从基本的 Docker 容器到使用 Hayhooks 的复杂应用程序。

在 Docker 中运行 Haystack

Haystack 最基本的部署形式是通过 Docker 容器。熟悉运行和定制 Haystack Docker 镜像很有用,因为它们构成了更高级部署的基础。

Haystack 版本通过 deepset/haystack Docker 镜像官方发布。Haystack 镜像根据它们包含的特定组件和 Haystack 版本有不同的变体。

📘

目前,Haystack 唯一可用的变体是base,它包含通过本地安装 Haystack 所能获得的一切:pip install haystack-ai.

您可以使用 Docker 标签拉取特定的 Haystack 变体:例如,要拉取包含 Haystack2.12.1 的镜像,您可以运行命令

docker pull deepset/haystack:base-v2.12.1

尽管base 变体旨在定制,但它也可以用于在无需设置 Python 环境及其依赖项的情况下快速在本地运行 Haystack 脚本。例如,这是通过运行 Docker 容器打印 Haystack 版本的方式

docker run -it --rm deepset/haystack:base-v2.12.1 python -c"from haystack.version import __version__; print(__version__)"

定制 Haystack Docker 镜像

您的应用程序很可能比简单的脚本要复杂,并且您需要在 Docker 镜像中安装 Haystack 以及其他依赖项。

例如,您可能希望使用 Chroma 作为您的文档存储,通过 Docker 容器运行一个简单的索引管道。该base 镜像只包含 Haystack 的基本安装,但您还需要额外安装 Chroma 集成(chroma-haystack)包。最佳方法是创建一个包含额外依赖项的自定义 Docker 镜像。

假设您当前文件夹中有一个main.py 脚本,Dockerfile 将如下所示

FROM deepset/haystack:base-v2.12.1

RUN pip install chroma-haystack

COPY ./main.py /usr/src/myapp/main.py

ENTRYPOINT ["python", "/usr/src/myapp/main.py"]

然后,您可以使用以下命令创建自定义 Haystack 镜像

docker build . -t my-haystack-image

使用 Docker Compose 构建复杂应用程序

在 Docker 中运行的 Haystack 应用程序可以走得很远:通过互联网连接,容器可以访问提供向量数据库、推理端点和可观察性功能的外部服务。

尽管如此,您可能仍希望在本地为 Haystack 容器编排其他服务,例如降低成本或提高性能。当您的应用程序运行时依赖于多个 Docker 容器时,Docker Compose 是一个将所有内容整合在一起的强大工具。

例如,假设您的应用程序包装了两个管道:一个用于将文档索引到 Qdrant 实例,另一个用于稍后查询这些文档。这种设置将需要两个 Docker 容器:一个用于通过 Hayhooks 将管道作为 REST API 运行,第二个用于运行 Qdrant 实例。

为了构建 Hayhooks 镜像,我们可以轻松地定制 Hayhooks 的最新版本之一的基础镜像,添加 QdrantDocumentStore 所需的依赖项。Dockerfile 将如下所示

FROM deepset/hayhooks:v0.6.0

RUN pip install qdrant-haystack sentence-transformers

CMD ["hayhooks", "run", "--host", "0.0.0.0"]

我们不需要定制 Qdrant,所以他们的官方 Docker 镜像将完美运行。然后,docker-compose.yml 文件将如下所示

services:
  qdrant:
    image: qdrant/qdrant:latest
    restart: always
    container_name: qdrant
    ports:
      - 6333:6333
      - 6334:6334
    expose:
      - 6333
      - 6334
      - 6335
    configs:
      - source: qdrant_config
        target: /qdrant/config/production.yaml
    volumes:
      - ./qdrant_data:/qdrant_data

  hayhooks:
    build: . # Build from local Dockerfile
    container_name: hayhooks
    ports:
      - "1416:1416"
    volumes:
      - ./pipelines:/pipelines
    environment:
      - HAYHOOKS_PIPELINES_DIR=/pipelines
      - LOG=DEBUG
    depends_on:
      - qdrant

configs:
  qdrant_config:
    content: |
      log_level: INFO

有关 Docker Compose 部署的功能示例,请查看 GitHub 上的 “Qdrant 索引” 演示。