在 Docker 中运行 CodeProject.AI Server
Docker 是一项技术,允许您将应用程序、库、驱动程序、运行时、文件以及应用程序可能需要的任何其他东西打包到一个可部署的镜像中,该镜像可以在任何可以运行 Docker 的地方运行。几乎无处不在。其好处在于,您无需担心安装驱动程序或包,也无需担心版本冲突:运行所需的一切都包含在容器中,即用即取。
要在 Docker 中运行 CodeProject.AI Server,您需要 下载并安装 Docker Desktop。这将安装运行时和桌面管理器。
CodeProject.AI Server 镜像
- codeproject/ai-server 适用于 x64 系统的基本仅 CPU 服务器
- codeproject/ai-server:gpu 支持 GPU(NVIDIA CUDA)的版本,适用于 x64 系统。此镜像也可以在非 GPU 系统上运行。
- codeproject/ai-server:arm64 专为 Arm64 芯片组(如 Raspberry Pi 或 Apple Silicon 设备)构建的镜像。
- codeproject/ai-server:rpi64 专为 Raspberry Pi Arm64 设备设计的版本。此版本包含一个适合低资源系统的对象检测模块。
运行 Docker 容器
有两种主要方法可以启动 Docker 容器:命令行或使用 Docker Desktop。
在容器中运行 Docker 镜像时,您还有另外两个选择:
- 将设置和可下载的模块直接保存在 Docker 容器中。每次重启容器时,这些设置都会保留。如果您更新 Docker 镜像和容器,您的更改将会丢失。
- 将设置和可下载的模块保存在 Docker 容器外的文件夹中。这允许您更新 Docker 镜像和容器,并保留您保存的所有模块和设置。
简单的 Docker 启动(设置保存在容器内)
在这种情况下,我们只需要映射使用的端口并选择正确的镜像。
如果您在 Arm 上运行 Windows,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
。
如果您运行的是 Linux on Arm,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
高级 Docker 启动(设置保存在容器外)
为了允许设置持久化到容器外部,并允许下载和安装模块,我们需要将 Docker 镜像中的两个文件夹映射到宿主机文件系统。这确保了在您升级 Docker 镜像时,您已保存的设置和模块仍然保留。
这两个文件夹是:
- 设置文件夹(Docker 镜像中的 /etc/codeproject/ai)
- 模块下载文件夹(Docker 镜像中的 /app/modules)
请注意,我们根据最佳实践在不同的操作系统中使用不同的文件夹。Linux 使用 /etc
和 /opt
文件夹,Windows 使用 ProgramData
,macOS 使用 Library\Application Support
。
docker run --name CodeProject.AI -d -p 32168:32168 ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\data,target=/etc/codeproject/ai ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\modules,target=/app/modules ^
codeproject/ai-server
如果您在 Arm 上运行 Windows,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
。
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source=/etc/codeproject/ai,target=/etc/codeproject/ai \
--mount type=bind,source=/opt/codeproject/ai,target=/app/modules \
codeproject/ai-server
如果您运行的是 Linux on Arm,请使用 codeproject/ai-server:arm64
而不是 codeproject/ai-server
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source=/etc/codeproject/ai,target=/etc/codeproject/ai \
--mount type=bind,source=/opt/codeproject/ai,target=/app/modules \
--privileged -v /dev/bus/usb:/dev/bus/usb
codeproject/ai-server:rpi64
对于拥有 Coral.AI Edge TPU 等 USB 设备的用户,包含 --privileged -v /dev/bus/usb:/dev/bus/usb 标志将提供对 Coral 硬件的访问。
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/data',target=/etc/codeproject/ai \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/modules',target=/app/modules \
codeproject/ai-server
macOS 中的文件共享
默认情况下,macOS 只允许挂载到 /tmp、/Users/Volumes/private 和 /var/folders。为了将绑定挂载到 /Library/Application Support 文件夹,您需要进入 Docker 设置并添加此文件夹。
docker run --name CodeProject.AI -d -p 32168:32168 \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/data',target=/etc/codeproject/ai \
--mount type=bind,source='/Library/Application Support/CodeProject/AI/docker/modules',target=/app/modules \
codeproject/ai-server:arm64
macOS 中的文件共享
默认情况下,macOS 只允许挂载到 /tmp、/Users/Volumes/private 和 /var/folders。为了将绑定挂载到 /Library/Application Support 文件夹,您需要进入 Docker 设置并添加此文件夹。
使用支持 GPU 的镜像
Docker GPU 版本特定于计算能力 >= 6.0 的 NVIDIA CUDA 启用显卡。为了确保 Docker 镜像能够访问 GPU 硬件,您需要使用 --gpus all
标志,并下载 codeproject/ai-server:gpu 镜像。
请注意,目前没有 Arm64 GPU 启用版本。
Docker GPU 版本仅在 Windows 和 Ubuntu 下运行。macOS 不再支持 NVIDIA 硬件。
开始使用 Docker Desktop
要使用 Docker Desktop 启动镜像,您首先需要从 Docker Hub 拉取一个镜像。在命令终端中运行 docker pull codeproject/ai-server
来获取最新版本的 CodeProject.AI Docker 镜像,或者使用 上面列出的其中一个镜像名称。您可以通过 Docker Desktop 使用该镜像启动容器。
在“镜像”选项卡中,选择要运行的镜像,单击“运行”按钮,然后单击“可选设置”。
设置以下属性
- 端口:32168(如果您使用的是期望端口 5000 的旧版本,则为 5000)
- 卷(如果您希望设置持久化到容器外部)
- 宿主机卷 C:\ProgramData\CodeProject\AI\docker\data 映射到容器路径 /etc/codeproject/ai
- 宿主机卷 C:\ProgramData\CodeProject\AI\docker\modules 映射到容器路径 /app/modules
- 端口:32168(如果您使用的是期望端口 5000 的旧版本,则为 5000)
- 卷(如果您希望设置持久化到容器外部)
- 宿主机卷 /etc/codeproject/ai 映射到容器路径 /etc/codeproject/ai
- 宿主机卷 /opt/codeproject/ai 映射到容器路径 /app/modules
- 端口:32168(如果您使用的是期望端口 5500 的旧版本,则为 5500)
- 卷(如果您希望设置持久化到容器外部)
- 宿主机卷 /Library/Application Support/CodeProject/AI/docker/data 映射到容器路径 /etc/codeproject/ai
- 宿主机卷 /Library/Application Support/CodeProject/AI/docker/modules 映射到容器路径 /app/modules
您还可以提供一个可选名称。请确保名称中不包含空格。Docker Desktop 对此很挑剔。
单击“运行”,您就完成了。
更改服务器设置
要更改在 Docker 容器中运行的 CodeProject.AI Server 实例的设置,您主要有两个选择:
常见示例:为 ObjectDetectionYolo 模块指定自定义对象检测文件的文件夹
对象检测(YOLO)模块提供了指定包含自定义模型的文件夹的功能。要在 Docker 中访问此功能,只需将 Docker 实例内的文件夹映射到宿主操作系统上的一个文件夹。
例如,假设我们的自定义模型位于 C:\my-custom-models
文件夹中。要将其映射到 Docker 实例中的 custom-models 文件夹,您将像这样启动镜像:
docker run --name CodeProject.AI -d -p 32168:32168 ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\data,target=/etc/codeproject/ai ^
--mount type=bind,source=C:\ProgramData\CodeProject\AI\docker\modules,target=/app/modules ^
--mount type=bind,source=C:\my-custom-models,target=/app/modules/ObjectDetectionYolo/custom-models,readonly ^
codeproject/ai-server
访问 CodeProject.AI 服务器仪表板。
打开浏览器并导航到 https://:32168 以打开 CodeProject.AI 仪表板。这将为您提供服务器操作的详细信息。
探索服务器中运行的模块
我们提供了一个用 HTML 和 JavaScript 编写的示例应用程序,可执行各种 AI 操作。在浏览器中打开 https://:32168/vision.html。仪表板底部也有一个指向此的链接。
向 Docker 容器添加新模块
从版本 1.6.8 开始,现在可以将模块添加到宿主服务器并在 Docker 容器内运行。CodeProject.AI Server 的 2.0 版本进一步扩展了这一点,允许通过仪表板在运行时下载和安装模块。
在我们上面关于启动 Docker 镜像的讨论中,我们包含了将 Docker 镜像中的 /app/modules 文件夹映射到宿主文件系统中的一个文件夹(例如 C:\ProgramData\CodeProject\AI\docker\modules)。这样做可以使 CodeProject.AI Server 有机会下载、安装和存储将跨 Docker 容器重启保留的模块。
这还为您提供了向现有 Docker 容器添加新模块的方法。
-
按照上面的说明启动您的 Docker 容器。Docker 容器中下载的模块存储在 /app/modules 中。在 Windows 中,您可能已将此文件夹映射到 C:\ProgramData\CodeProject\AI\docker\modules。在 Linux 中,您可能已将其映射到 /opt/codeproject/ai,在 macOS 中,它将映射到 /Library/Application Support/CodeProject/AI/docker/modules。
-
将新模块的文件夹复制到宿主上的映射的 /app/modules 文件夹(例如,Windows 中的 C:\ProgramData\CodeProject\AI\docker\modules)。
-
确保模块的 modulesettings.json 设置文件将
RuntimeLocation
设置为“Local”。 -
确保您的模块有一个 install.sh 脚本,位于模块的文件夹中。任何对 'setupPython' 或 'installPythonPackages' 的调用都应将安装位置指定为“Local”。
-
打开一个终端连接到您的 Docker 容器。Docker Desktop 提供了一个方便的 GUI 来执行此操作。导航到 /app/modules/[您的模块文件夹] 并执行:
这将从 Docker 容器内部运行新模块的设置脚本,确保该模块正确设置为容器的操作系统。
下次启动 Docker 容器时,此模块将被发现并与其他模块一起启动。