此镜像是为 NoneBot 应用构建的基础镜像,但适用于所有 Python 应用。
包含依赖:
/opt/poetry,缓存目录:/cache)环境变量:
/.cache。/.cache/poetry。0。poetry-runner。$XDG_CACHE_HOME/$AUTO_VENV_NAME。0,当 AUTO_VENV 为 0 且 /app/poetry.lock 不存在时强制置为 0。/app/requirements.txt。镜像启动流程:
/approot:root 身份执行初始化脚本 setup,寻找优先级:/setup -> /app/setup,若未寻找到则跳过。AUTO_VENV 是否为 1,若为 1 且 /app/poetry.lock 不存在则自动创建 venv 到 $APP_CACHE_HOME/venv 并激活。AUTO_PIP_INSTALL 是否为 1,若为 1:
/app/poetry.lock 存在,则执行 poetry install。$REQUIREMENTS_TXT 存在且 AUTO_VENV_NAME 为 1,则执行 pip intall -r $REQUIREMENTS_TXT。$PUID:$PGID 身份执行启动脚本 start,寻找优先级:/start -> /app/start,若未寻找到则报错,无法启动镜像。选择一个你喜欢的目录,例如 ~/nonebot-app 作为工作目录。
将 NoneBot 应用项目克隆至 ./app,即 ~/nonebot-app/app,创建一个启动脚本 ./start,例如:
#!/bin/bash
poetry install
poetry run nb run
或不使用 poetry 的启动脚本:
#!/bin/bash
set -v
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install nonebot wheel
pip install -r requirements.txt
python3 run.py
然后创建 ./docker-compose.yaml,例如:
version: '3'
services:
nonebot:
image: mhmzx/poetry-runner:3.9-bullseye
volumes:
- /etc/localtime:/etc/localtime:ro
- ./.cache:/home/poetry-runner/.cache
- ./app:/app
- ./start:/start
restart: unless-stopped
environment:
TZ: Asia/Shanghai
LANG: zh_CN.UTF8
环境要求:
以 Python 3.10、CUDA 11.4 举例。
检查 Python 版本合集 中,目标 Python 版本支持哪些 Debian 系统版本,此处 Python 3.10 支持 buster 及以上,于是:
./gradlew buildPoetry310BusterImage # 构建仅 poetry 的 Debian 10 镜像
./gradlew buildPlaywright310BusterImage # 构建带 poetry 和 playwright 的 Debian 10 镜像
./gradlew buildPlaywright310BullseyeImage # 构建带 poetry 和 playwright 的 Debian 11 镜像
./gradlew buildPlaywright310BookwormImage # 构建带 poetry 和 playwright 的 Debian 12 镜像
# ...以此类推
检查 CUDA 版本合集 中,目标 CUDA 版本支持哪些 Debian 系统版本,此处 CUDA 11.4 仅支持 buster,于是:
./gradlew buildCuda114Poetry310BusterImage # 构建仅 poetry 的镜像
./gradlew buildCuda114Playwright310BusterImage # 构建带 poetry 和 playwright 的镜像
Content type
Image
Digest
sha256:b2d19ae14…
Size
460.2 MB
Last updated
over 1 year ago
docker pull mhmzx/poetry-runner:3.9.21-bookworm