Dockerfile-部署python项目踩坑流程记录

部署运行你感兴趣的模型镜像

一、背景与运行环境说明

       最近,项目中有需要通过制作Dockerfile来将项目放入docker容器中进行部署的需求,由于之前也没有相关的项目经验,因此也是踩了不少坑,特此做一下制作Dockerfile与部署项目的全流程记录。

        本地python项目开发环境:win11系统。

        部署Docker所在的宿主机运行环境:虚拟机Linux的CentOS7系统。

二、具体操作步骤与遇到的问题记录描述

步骤1:准备好项目源代码文件、Dockerfile、requirements.txt文件

相关文件目录资源的相对位置如下图所示:

最终,需要打入容器的核心文件内容如下图所示:

步骤2:调整准备好Dockerfile文件中的内容
FROM python:3.11-slim

# 更新包列表并安装vim等相关命令补充容器内部功能
RUN apt-get update && apt-get install -y vim

# 设置工作目录
WORKDIR /Mlti_Agents_Investment

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 复制依赖文件
COPY requirements.txt .

# 配置pip源
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目文件
COPY ./src/ /Mlti_Agents_Investment/src/
COPY ./shared/ /Mlti_Agents_Investment/shared/
COPY ./gtjaresearch/ /Mlti_Agents_Investment/gtjaresearch/
COPY ./agents/ /Mlti_Agents_Investment/agents/
COPY ./.env /Mlti_Agents_Investment/.env
COPY ./__init__.py	/Mlti_Agents_Investment/__init__.py
COPY ./main_api.py	/Mlti_Agents_Investment/main_api.py

# 创建数据目录
RUN mkdir -p data/models data/cache

# 设置环境变量
ENV PYTHONPATH=/Mlti_Agents_Investment
ENV OLLAMA_HOST=http://host.docker.internal:11434

# 暴露端口
EXPOSE 8000

# 设置启动脚本
CMD python /Mlti_Agents_Investment/main_api.py

说明:此处特别需要注意的是对基础镜像的下载,命令如下:

docker pull python:3.11-slim

由于一些网络隔离的原因,下载这个基础镜像会是一个相对缓慢甚至无法进行的过程;因此需要做一些提前的关于网络环境的前置准备工作,包括但不限于:科学上网,国内镜像源,国内加速引擎的设置等等。确保在本地环境,可以有这个基础镜像,以便于后续的容器部署工作。

步骤3:准备python项目所需要的requirements.txt文件

说明:在各自项目的开发的虚拟环境中,得到专属服务于项目本身的python依赖包信息,尽量做到精准,无需冗余的依赖包

步骤4:将准备好的Dockerfile文件,项目文件,requirements.txt文件上传到虚拟机的指定目录下

上传完成后的效果如下图所示:

步骤5:在上传目标所在的文件目录下,执行针对Dockerfile的打包命令
docker build -f ./Dockerfile --network="host" -t app:1.1 .

说明:此处需要特别注意的是--network="host",这个选项表示用本地网络模式构建镜像。

如果缺少这个选项的话,在执行pip install命令时候会遇到超时报错等失败的情况,如下图所示:

或者:

Bridge模式限制‌:默认bridge网络下,容器需通过宿主机IP和映射端口访问,且宿主机需开启IP转发(net.ipv4.ip_forward=1) 在默认的"bridge"这个模式下,需要开启以下配置:

临时方案:

sudo sysctl -w net.ipv4.ip_forward=1

此修改会立即生效,但系统重启后失效

永久方案:

修改/etc/sysctl.conf文件,确保包含以下配置:

net.ipv4.ip_forward=1

使配置生效:

sudo sysctl -p

验证IP转发状态:

sysctl net.ipv4.ip_forward

若返回值为1,则表示已开启。

正常运行的情况图如下:

成功打包后,可以看到如下效果:

步骤6:通过build成功后的自制镜像,新建运行容器并做后台运行
docker run -di --network="host" -p 8000:8000 app:1.1

说明:此处需要特别注意的是--network="host",这个选项表示用本地网络模式构建镜像。

 -p 8000:8000,这个选项访问宿主机的8000端口可以访问到容器内运行于8000端口的python应用服务,此外,还需要注意宿主机环境的防火墙需要对8000端口做对外开放访问

或者:

已经设置了"bridge"模式下的IP转发的配置后,则此处的--network="host",不再需要额多外进行配置了。

步骤7:查看容器的运行状态与日志
docker ps

docker logs nostalgic_torvalds

步骤8:通过浏览器访问验证宿主机的对外暴露的端点

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值