AI智能摘要
GPT
获取文章摘要失败,请稍后再试。
URL
type
status
date
slug
summary
tags
category
icon
password
最近,博主训练了几个模型,想将模型部署到服务器上,并且暴露API供其他服务调用。这几个不是Transformer类型,仅仅是机器学习模型和自己构建的卷积模型。这次无法通过VLLM框架部署,只能通过docker打包python-web整个服务。
Docker在打包python-web服务时,会一起打包python依赖和代码镜像。如果直接将两者打包,那么,打包时间会很长,而且,只要代码一有变动,就要重新打包。这种一次性打包的方法费时费力。
针对这种方法,结合网上已有资料,博主进行两次打包:第一,打包基础环境镜像;第二,基于基础镜像打包代码。
基础环境打包
基础环境打包分为两个阶段:构建阶段和运行阶段。构建阶段用于编译和安装依赖,这里会用来安装gcc(C语言库编译工具)、default-libmysqlclient-dev(mysqlclient编译工具)和pkg-config(编译时查找库的配置工具)等。运行阶段用于安装运行时必须的库,不包含编译工具。
构建阶段
- FROM python:3.11-slim AS builder
- AS builder 构建阶段的标志
- RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
- 设置国内镜像
- WORKDIR /app
- 设置工作目录,后续所有的操作皆在此目录执行
- RUN apt-get update && apt-get install -y --no-install-recommends\ gcc\ pkg-config \ default-libmysqlclient-dev \ # build-essential \ && rm -rf /var/lib/apt/lists/*
- apt-get update 更新软件包列表
- apt-get install -y 自动确认安装
- --no-install-recommends 不安装推荐包
- rm -rf /var/lib/apt/lists/* 删除缓存文件
- COPY requirements_gsw.txt . 复制宿主机的 requirements_gsw.txt到容器的app目录
- RUN pip install --no-cache-dir --prefix=/install -r requirements_gsw.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- --no-cache-dir 不保存 pip 缓存,减小镜像体积
- --prefix=/install 安装到自定义位置,如果没有则会安装到默认位置/usr/local/lib/python3.11/site-packages/
- -i https://pypi.tuna.tsinghua.edu.cn/simple 安装python
- RUN find /install -type d -name "pycache" -exec rm -rf {} + 2>/dev/null || true \ && find /install -type f -name ".pyc" -delete \ && find /install -type f -name ".pyx" -delete \ && find /install -type f -name ".pxd" -delete \ && find /install -name ".dist-info" -type d -exec sh -c 'rm -rf "$1"/RECORD "$1"/INSTALLER' _ {} \; \ && find /install -name "*.so" -exec strip --strip-unneeded {} \; 2>/dev/null || true
- 这段代码的作用是清理安装后的文件,用于删除缓存、源文件、元数据和压缩共享库,用于减小镜像体积。
- find /install -type d -name "pycache" -exec rm -rf {} + 2>/dev/null || true \ 删除python缓存
- && find /install -type f -name ".pyc" -delete \ && find /install -type f -name ".pyx" -delete \ && find /install -type f -name ".pxd" -delete \ 删除Cython源文件
- find /install -name ".dist-info" -type d -exec sh -c 'rm -rf "$1"/RECORD "$1"/INSTALLER' _ {} \; 清理包源数据
- find /install -name "*.so" -exec strip --strip-unneeded {} \; 2>/dev/null || true 压缩共享库
运行阶段
- FROM python:3.11-slim
- 基础的python包
- RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
- 设置国内镜像
- WORKDIR /app
- 设置工作目录,后续所有的操作皆在此目录执行
- RUN apt-get update && apt-get install -y --no-install-recommends \ libmariadb3 \ && apt-get clean \ && rm -rf /tmp/* \ && rm -rf /var/tmp/* \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /usr/share/doc/* \ && rm -rf /usr/share/man/*
- --no-install-recommends 只安装依赖不安装推荐包
- libmariadb3 是 MariaDB 运行时库,与 MySQL 完全兼容,体积更小
- COPY --from=builder /install /usr/local
- 从构建阶段复制已安装的 Python 包
- EXPOSE 8000
- 申明容器监听 8000 端口
- 实际映射需要 docker run -p 8000:8000
最终执行命令
docker build —no-cache -f 上面的文件名.base -t 镜像名:latest .
基于基础镜像打包代码
构建阶段
- FROM 镜像名:latest
- WORKDIR /opt/mss # 工作目录
- RUN OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 python 启动python文件名.py collectstatic --noinput
- 收集静态文件
- COPY start.sh /opt/mss/start.sh
- 复制启动脚本并赋予执行权限
- start.sh # Linux 启动项目的文件
- RUN sed -i 's/\r$//' /opt/mss/start.sh && chmod +x /opt/mss/start.sh
- /opt/mss/start.sh 对应上边的工作目录
- CMD ["/opt/mss/start.sh"]
- 启动脚本
最终执行命令
docker build -f 上面的文件名.app -t 镜像名:latest .
启动镜像,创建容器
docker run -d —name 容器名 —restart unless-stopped -p 8000:8000 —env-file .env -v “本地文件名:/app/logs” -v “本地文件名:/app/media/models” 镜像名:latest
- -d 容器在后台运行
- -v 映射 本地映射到容器中
- —env-file 配置环境
- 从
.env文件中读取环境变量 - 注入到容器内部
- —restart unless-stopped Docker启动时,自动重启
以上便是docker打包python-web服务镜像的基本流程,欢迎您在底部评论区留言,一起交流~
- 作者:不爱吃香菜的萌新
- 链接:https://hexo.levsongsw.com//deeplearn/docker
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





