37 lines
1.2 KiB
Docker
37 lines
1.2 KiB
Docker
# 本地重排服务镜像。
|
|
#
|
|
# 模型不在构建期打包 —— 体积大(约 290MB)且会频繁升级,改为容器启动时按需下载,
|
|
# 已有则复用。这样换模型只需改环境变量后重启,不用重新 build。
|
|
FROM python:3.11-slim
|
|
|
|
# pip 源做成构建参数:国内机器可用清华源显著提速
|
|
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
|
ARG PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
PIP_NO_CACHE_DIR=1 \
|
|
PIP_DISABLE_PIP_VERSION_CHECK=1
|
|
|
|
WORKDIR /app
|
|
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir \
|
|
-i "${PIP_INDEX_URL}" \
|
|
--trusted-host "${PIP_TRUSTED_HOST}" \
|
|
-r requirements.txt
|
|
|
|
COPY app.py download_model.py entrypoint.sh ./
|
|
RUN chmod +x entrypoint.sh
|
|
|
|
# 模型目录。挂卷到这里,重启容器时模型不会丢。
|
|
ENV MODEL_DIR=/models
|
|
RUN mkdir -p /models
|
|
|
|
EXPOSE 8000
|
|
|
|
# slim 镜像里没有 curl,直接用 python 做健康检查
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=600s --retries=3 \
|
|
CMD python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8000/health',timeout=4).status==200 else 1)"
|
|
|
|
CMD ["./entrypoint.sh"] |