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 索引” 演示。
更新于 6 个月前
