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

039-生产环境部署 本文摘要:本章详细介绍了Pydantic应用在生产环境中的部署方案,重点关注容器化部署和配置管理。通过Dockerfile示例展示了多阶段构建过程、安全配置和健康检查机制,同时提供了Gunicorn的详细配置类,包含性能调优、日志记录和安全限制等生产级参数。docker-compose.yml文件则展示了服务编排,包括数据库连接、环境变量配置、健康检查以及日志和文件存储的持久化方案。整套部署方案兼顾了性能、安全性和可维护性,为Pydantic应用的生产部署提供了完整参考。 阅读详情

一、背景与运行环境说明

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

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

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

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

步骤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:通过浏览器访问验证宿主机的对外暴露的端点

Python项目部署到Docker的完整过程 项目结构 平时在PyCharm里面运行该工程,只要直接运行server.py文件即可 现在希望将该工程,部署到docker里面,使用容器启动: 步骤如下: 1、创建一个上传到Linux系统文件夹(文件名任意) docker_EF_NFCS是要上传到Linux系统,生成Docker镜像的文件夹 docker_EF_NFCS文件夹下面有两个东西 Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 阅读详情

相关推荐

Python项目部署实战:从本地开发到服务器上线的完整指南

在软件工程实践中,环境一致性、可移植性和自动化是保障应用稳定运行的核心原则。依赖管理通过requirements.txt或poetry.lock等工具实现版本控制,而虚拟环境技术则提供了项目间的隔离层,避免依赖冲突。这些基础技术共同支撑了现代部署流程的标准化,其价值在于显著提升开发与运维效率,减少“在我机器上能跑”的典型问题。在Web服务、数据分析脚本和自动化工具等应用场景中,部署方案的选择直接影响生产环境的可靠性。本文聚焦Python项目的容器化部署与进程守护方案,深入探讨Docker镜像构建、Syste

weixin_30565327的博客 589

docker 构建python Dockerfile

必须是# syntax解析器指令,该指令指示 Docker 构建器在解析 Dockerfile 时使用什么语法,并允许启用 BuildKit 的旧 Docker 版本在开始构建之前升级解析器。BuildKit 在构建之前会自动检查语法的更新,确保您使用的是最新版本。RUN是映像构建步骤,RUN命令后将容器的状态提交到容器映像。CMD是启动构建映像时默认情况下容器执行的命令。将当前目录下的文件拷贝到/app下,如.COPY . . 的含义为将当前目录下的所有文件拷贝到/app下。基于WORKDIR执行命令。.

ch_atu的博客 2212

【docker】python:3.11-slim的镜像制作

由于你的机器是 16 核,apt和pip可能会启动 16 个线程并行下载和安装。这会瞬间耗尽 2G 内存。建议:在Dockerfile的# 限制 apt 的并发连接数如果这次成功了,最后会显示。请告诉我它卡在哪一行(比如),我能帮你判断是网络没通还是阿里云在排队。

突围 763

利用python构建Dockerfile 文件

使用 Python 脚本来创建 Dockerfile 可以带来多方面的好处,尤其是当你需要自动化构建过程、管理复杂的构建步骤或者需要根据不同的环境条件生成不同的 Docker 镜像时。这意味着你可以为不同的目标平台或配置生成定制化的镜像。在 Python 脚本中,你可以设置不同的环境变量或配置,以生成适用于不同环境(如开发、测试、生产)的 Docker 镜像。通过将生成 Dockerfile 的 Python 脚本放在版本控制系统中,你可以跟踪构建逻辑的变更历史,并在团队中共享。

专心扫地 1416

【Docker镜像】Python项目之使用Dockerfile构建镜像(一)

【Docker镜像】Python项目之使用Dockerfile构建镜像(一)

jks212454的博客 687

基于Arduino 的 FM 调频收音机

这是一个基于 Arduino 的开源的收音机项目,它具备一台标准收音机的全部功能,从控制部分到外壳都可以自己 DIY。在项目中,我们将介绍让 FM 收音机调谐器的 RDA5807 模块与 I2C 协议进行通信的方法,整个过程只需要两根线就可以与 IC 通信,接线非常简单。3D 打印的外壳也非常简洁。总之,是个非常简单和实用的项目,来试试吧!

ByteBox的博客 1642

将python项目用docker 部署到服务器上的全过程

docker安装文档: https://docs.docker.com/docker-for-mac/#check-versions http://www.runoob.com/docker/macos-docker-install.html

Pin_BOY的博客 4619

LVGL项目内存告急?试试把中文字库放到SD卡里(基于LvglFontTool V0.5)

本文详细介绍了在LVGL嵌入式项目中如何通过将中文字库存储到SD卡来优化内存使用。针对Flash资源有限的MCU,如STM32F103,提供了基于LvglFontTool V0.5的外部字库生成与动态加载方案,适用于多字号、多语言及OTA场景,显著减少固件体积并提升显示灵活性。

weixin_33726318的博客 456

YOLOv8 测试 5-2:Linux 中 Dockerfile 部署 YOLOv8 项目一键运行,Python 封装 API 接口测试

本文在测试 5 基础上进行升级,采用 Dockerfile 的方式来构建 Conda 镜像,部署 YOLOv8 项目一键运行。整理了 Dockerfile 制作 YOLOv8 镜像过程中的常见问题。

积累,沉淀,温故而知新 3209

保姆级教程:在紫光同创Titan2 FPGA上实现PCIe DMA,实测带宽接近理论极限

本文详细介绍了在紫光同创Titan2 FPGA上实现PCIe DMA性能调优的全过程,通过参数优化和架构设计,实测带宽达到6.91GB/s,接近理论极限。涵盖开发环境搭建、PCIe IP核定制、DMA引擎设计、驱动开发及性能调优等关键步骤,为FPGA开发者提供实用指南。

weixin_30954817的博客 335

如何在n8n中高效调用playwright-mcp实现浏览器自动化(附避坑指南)

本文详细介绍了在n8n中高效集成playwright-mcp实现浏览器自动化的全流程指南,包括环境准备、工作流设计与优化、高级技巧与性能调优以及调试与问题排查。通过克服实际部署中的各种挑战,帮助用户打造稳定高效的自动化解决方案,特别适合需要浏览器自动化的工作流场景。

weixin_30379531的博客 387

python完整项目打包Docker入坑记录

<header class="article-header"> <h1 class="article-title" itemprop="name"> python完整项目打包Docker入坑记录 </h1> <a href="/2019/08/22/python完整项目打包Docker入坑记录/" class="archive-article-date"> <time datetime="2019-08-22T...

qq_15821487的博客 807

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

Python容器化实战:Dockerfile与compose踩坑记录

容器化已成为Python开发者在多环境部署时绕不开的基础技能。容器不同于虚拟机,它共享宿主机内核,仅打包应用运行所需的依赖与配置,实现秒级启动和跨环境一致。对Python项目而言,依赖系统库的扩展(如科学计算库)常常导致“本地能跑,云端报错”,Docker镜像恰好从操作系统层固化环境,从根本上解决环境地狱问题。实际应用中,无论是团队协作、CI/CD流水线还是服务器多服务部署,容器化都能显著降低运维成本。本文基于真实项目,以Flask应用整合MySQL与Redis为线索,完整演示了Dockerfile的优化写

weixin_30846347的博客 264

一个响应ping包延迟偏大的问题

前段时间客户反馈一个使用pc上的命令行ping无线设备(WiFi4)时,设备平均响应时间(测试时长2小时,1秒Ping一次)相比其它机型偏慢的问题,并上传上具体的时间的Log.从log中看到,大多数包的响应还是比较快的,只是个别响应时间较长,且响应时间长的包时间几乎都是一样的100多ms.如下是部分响应时间截图. 整个2小时的测试时间里,总是时不时的出这么上102,104ms的响应时间,这直接导致了平均响应时间被拉大.于是本地测试,也发现了类似的延迟.本地测试时,现象略有...

流风回雪的博客 1万+

统信UOS丨开机无法进入系统 无法打开控制台访问权限,root账号被锁定(cannot open access to console, the root account is locked)

步骤四:分别打开文件发现Roota下的fstab就是我们要找的文件,打开查看Roota的属性发现其为挂载的磁盘nvme0n1p3。步骤三:按Win+E打开文件管理器在分区中查找/etc/fstab文件,发现Roota和Rootb下都有该文件。步骤二:按键盘Ctrl+Alt+F4,进入终端控制台,如下图所示输入startx回车,进入桌面。步骤一:找到UOS系统安装的U盘,选择U盘启动进入安装界面,如下图所示。步骤七:关机,拔出U盘,启动电脑,OK,问题解决。

Reyn_观极 1万+

记录一次makefile + dockerfile + dockerfile-compose + shell 部署项目

项目主要是算法功能,所依赖的环境比较麻烦

weixin_47906106的博客 736

地平线旭日X3开发板--使用Opencv显示CSI摄像头例程

但是从libsrcampy获取的摄像头图像格式是NV12,无法直接在opencv上显示或者处理,调试过程发现旭日派无法直接用opencv的VideoCapture()调用CSI摄像头,需要使用opencv来做开发的小伙伴可以做个参考,效果如下图所示。需要使用libsrcampy库来获取CSI摄像头图像,为了能够使用opencv的API来处理图像,需要增加NV12转化成bgr像素格式的函数。opencv显示图像.png。

bingdund的博客 541

(记录运维踩坑过程):打包python项目放到docker自搭建的django框架容器过程

docker搭建djang框架过程 参考文章(非常感谢大佬记录的文章):https://blog.youkuaiyun.com/u013282737/article/details/85233408 实验环境:vmware 中的 centos 7.2 软件版本:Docker Engine 18.09.5 和 python 3.6 序:介绍python项目包背景 运行的时候直接在pycharm终端里面执...

weixin_35101765的博客 1096

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

docker如何部署python项目_使用docker 部署python 项目

使用python 开发了一个restfu api程序,使用docker镜像部署。主要有如下步骤,简单记录以供以后参考。1. 创建DockerFile文件创建一个DockerFile文件,文件名为Dockerfile,没有后缀名内容如下:FROM centos/python-36-centos7  #设置什么镜像进行安装,示例docker基于python3.6和centos7,所有这里使用的是cen...

weixin_39995439的博客 1039

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Dockerfile部署web应用

Dockerfile部署web应用 在记录一次web测试这一篇博文中,我把此次测试所产出的文件都放在了自己的服务器上,并提供了下载接口,正好最近在学习docker,今天我把这个web应用用docker跑起来。 编写Dockerfile FROM python # 拉取python基础镜像 COPY . /ser...

weixin_34278190的博客 807

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Docker部署python项目

公司有个python项目需要部署,之前没有部署过python项目,记录一下。

知有的博客 447

Docker部署Python前后端项目:从Dockerfile到docker-compose实战

容器化技术已成为现代应用部署的基础设施,Docker通过镜像打包应用与其运行环境,确保开发、测试、生产环境高度一致。在Python前后端项目中,借助docker compose可以统一编排后端接口、前端页面、数据库与缓存等多容器服务,解决依赖冲突、环境错位等常见问题。Nginx作为前端静态资源托管与反向代理入口,MySQL与Redis通过数据卷实现持久化存储。本文从Docker部署Python前后端项目的全流程出发,结合FastAPI与Vue实战,讲解Dockerfile编写、compose配置、网络通信及

weixin_32932149的博客 239

docker build run 卡住_基于docker+gunicorn部署sanic项目踩过的坑

前言:最近有个项目需要上线,是python中sanic网络异步框架写的,并且要求使用docker+nginx来部署项目实现负载均衡,于是乎百度了sanic项目部署,基本上都是基于docker+gunicorn部署sanic项目这篇文章,里面讲的也稍稍微有些简略,不过对于小白特别不友好,按步骤操作肯定是不行的,因为文章中只举了很小很小的一个例子,感觉更像demo。而小白可能只是临时接受部署任务,按部...

weixin_42104778的博客 471

Python环境搭建、python项目以docker镜像方式部署到Linux

Python环境搭建、python项目以docker镜像方式部署到Linux 本文的项目是用Python写的,记录了生成docker镜像,然后整个项目在Linux跑起来的过程: 原文链接:https://msd.misuland.com/pd/3065794831805579512 1、windows中Python环境搭建以及pycharm的安装和配置,...

weixin_30662539的博客 527
上一篇: 在phpstudy环境下配置搭建XDEBUG配合PHPSTORM的调试环境
下一篇: Claude Code安装(Win环境)与配置国内大模型手记
AlickLiubc
博客等级 码龄5年 53粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值