docker部署使用本地文件的fastapi项目

项目背景:项目使用python开发,需要使用ubutun系统部署后端api接口,对外使用8901端口。

1:项目结构:

2:项目需要使用的pyhton版本为3.9,dockerfile内容如下:

# 
FROM python:3.9# 
WORKDIR /code# 
COPY ./requirements.txt /code/requirements.txt# 
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt# 
COPY ./app /code/app# 
CMD ["python", "main.py"]

2.1:文件开头是docker需要运行的环境,python 3.9。

第二行声明工作目录。

第三行将当前文件夹中的安装依赖文件复制到工作目录下。

第四行Run 是要在构造docker镜像的时候需要安装的环境依赖,因为本次项目是要部署一个大模型,所以需要安装的依赖非常多。

最后一行 CMD,声明使用的pyhton 运行main.py文件,这里直接使用运行的命令需要main.py里面的支持。

3:main.py最后一行如下:

if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=80)

这里需要注意:port端口需要使用80对外,因为我们在构造docker环境的时候会使用80这个端口指向,这个端口一定要与docker run 时的端口一致。

 

4:因为我部署的是AI项目,所以需要使用一个比较大的模型文件,模型文件放在本地路径中如下:/mnt/nvme1n1p2/llmModels/ChatGLM4-9b-1M/,这个路径在做docker构造镜像的时候需要做一个映射,将本地文件映射到docker环境中去。

 5:以上准备工作做完,现在使用docker构造镜像:

docker build -t fastapi .

 构建一个名为fastapi 的docker镜像,因为dockerfile需要使用pip安装很多依赖,所以要了一些时间。构建如果出现问题,需要按照提示去排查。构建完成后使用:docker images

检查一下看看镜像是否构建完成:


REPOSITORY                                      TAG                                           IMAGE ID       CREATED          SIZE
fasttapi                                         latest                                        a6e3c2fa12c0   33 minutes ago   6.52GB

 在列表中看到已经成功建立了docker镜像。

6:构建完成后运行镜像,因为项目中需要使用本地的一个模型文件,所以需要再运行的时候做一个映射:

docker run -d -it -v /mnt/nvme1n1p2/llmModels/ChatGLM4-9b-1M:/mnt/nvme1n1p2/llmModels/ChatGLM4-9b-1M --name fastapi -p 8901:80 fastapi

6.1:在这个命令中,使用-v指定一个文件映射:/mnt/nvme1n1p2/llmModels/ChatGLM4-9b-1M:/mnt/nvme1n1p2/llmModels/ChatGLM4-9b-1M   映射中的冒号前面一段是本地的实际文件夹路径,后面一段是docker环境中的路径(docker环境中的路径原本是不存在的,只是在run命令指定的时候才有)。

6.2:使用 -p 指定端口映射,使用本机的8901端口映射docker环境中的80端口,这个端口刚好与api项目中运行起来的端口: uvicorn.run(app, host="0.0.0.0", port=80)  一致。

之后只用

docker ps -a

检查一下镜像是否已经跑来:


CONTAINER ID   IMAGE                                  COMMAND                  CREATED          STATUS                     PORTS                                           NAMES
842c29ff7396   fastapi                                "python main.py"         39 minutes ago   Up 39 minutes              0.0.0.0:8901->80/tcp, :::8901->80/tcp           fastapi

看状态:status 已经是Up状态,说明项目已经OK,如果这里的状态不是up ,那就是说明镜像没有跑来,可以使用:

docker logs fastapi

看看日志,是因为什么问题,逐一排查。docker logs fastapi ==>fastapi是镜像的名字。

7:镜像跑起来之后可以使用postman测试一下。

题外话:

有些时候我们在conda环境中跑的环境,有些依赖需要写在requirements.txt中,可以在conda中使用:conda list > env.txt

将当前环境中的所有 依赖导出到env文件中,然后将env文件中的所有依赖写到requirements.txt中就OK了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自制植物大战僵尸:HTML5与JavaScript实现的简单游戏

引言 在本文中,我们将一起探索如何使用HTML5和JavaScript来创建一个简单的植物大战僵尸游戏。这不仅是一项有趣的编程挑战,也是学习游戏开发基础的绝佳机会。 什么是植物大战僵尸? 植物大战僵尸是一款流行的策略塔防游戏,玩家需…

如何提高网站排名?

提高网站排名是一个复杂的过程,涉及到多个方面的优化,包括但不限于内容质量、网站结构、用户体验、外部链接建设等,GSR这个系统,它是一种快速提升关键词排名的方案,不过它有个前提,就是你的站点在目标关键词…

超详解——深入详解Python基础语法——小白篇

目录 1 .语句和变量 变量赋值示例: 打印变量的值: 2. 语句折行 反斜杠折行示例: 使用括号自动折行: 3. 缩进规范 缩进示例: 4. 多重赋值(链式赋值) 多重赋值的应用: 5 .多…

FonesGo Location Changer 用Mac修改iPhone定位的工具

搜索Mac软件之家下载FonesGo Location Changer 用Mac修改iPhone定位的工具 FonesGo Location Changer 7.0.0 可以自定义修改iPhone和Android手机的GPS定位。FonesGo Location Changer 是玩 Pokemon Go 时的最佳搭档。您可以以自定义速度模拟 GPS 运动,例如步行、骑…

【设计模式】JAVA Design Patterns——State(状态模式)

🔍目的 允许对象在内部状态改变时改变它的行为。对象看起来好像修改了它的类。 🔍解释 真实世界例子 当在长毛象的自然栖息地观察长毛象时,似乎它会根据情况来改变自己的行为。它开始可能很平静但是随着时间推移当它检测到威胁时它会对周围的…

element-plus 的icon 图标的使用

element-plus的icon 已经独立出来了,需要单独安装 1. npm安装 icon包 npm install element-plus/icons-vue2.注册到全局组件中 同时注册到全局组件中,或者按需单独引入,这里只介绍全局引入。 import { createApp } from vue import { cre…

2024全国高考作文题解读(讯飞星火3.0版本)

新课标I卷 阅读下面的材料,根据要求写作。(60分) 随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少? 以上材料引发了你怎样的联想和思考?请写…

Python易错点总结

目录 多分支选择结构 嵌套选择 用match模式识别 match与if的对比 案例:闰年判断 三角形的判断 用whlie循环 高斯求和 死循环 用for循环 ​编辑continue​编辑 whlie与else结合 pass 序列 列表(有序) 元组(有序&…

LeetCode热题100—链表(二)

19.删除链表的倒数第N个节点 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 …

SpringBoot的Profiles是什么

在 Spring Boot 中,Profiles 提供了一种隔离配置的方法,允许你定义多套配置,并且在不同的环境下激活不同的配置。例如,一个常见的用例是为开发、测试和生产环境提供不同的配置。 Profiles 可以帮助你在应用的不同运行环境之间切换…

Docker中搭建likeadmin

一、使用Docker中的docker-compose搭建likeadmin 1.去网址:https://gitee.com/likeadmin/likeadmin_php中下载likeadmin 注册一个giee账号后 点那个克隆下载 按照序号在终端复制粘贴进去。 接着,输入ls 可以发现有一个这个: 里面有一个like…

摄影店展示服务预约小程序的作用是什么

摄影店包含婚照、毕业照、写真、儿童照、工作照等多个服务项目,虽然如今人们手机打开便可随时拍照摄影,但在专业程度和场景应用方面,却是需要前往专业门店服务获取。 除了进店,也有外部预约及活动、同行合作等场景,重…

Ezsql(buuctf加固题)

开启环境 SSH连接 第一个为页面地址WEB服务 or 11# 利用万能密码登录 密码可以随便输入或者不输入 这里就可以判断这个题目是让我们加固这个登录页面 防止sql注入 查看index.php 添加以下代码 $username addslashes($username); $password addslashes($password);…

2024年京东618红包领取跨店满300减50第二波活动时间什么时候开始到几号结束?

2024年京东618活动时间 整个618红包满减活动时间是从:2024年5月28日12:00开始一直持续到6月20日23:59 第一波红包领取活动时间是从:2024年5月28日12:00开始到6月6日23:59结束 第二波红包领取活动时间是从:2024年6月7日00:00开始到6月18日2…

【HarmonyOS】放大缩小手势实现

【HarmonyOS】放大缩小手势实现 一、鸿蒙中手势的类型: 对于放大缩小手势,在应用开发中使用较为常见,例如预览图片时,扫码时等。 在鸿蒙中对于常见的手势进行的封装,可以通过简单的API进行监听调用,以下是…

springboot webflux 返回字节流

在Spring Boot WebFlux中&#xff0c;可以使用Mono<byte[]>或Flux<byte[]>作为响应体来返回字节流。以下是一个简单的示例&#xff1a; 1. 首先&#xff0c;添加WebFlux依赖到pom.xml文件中&#xff1a; xml <dependency> <groupId>org.springframewo…

k8s测试题

k8s集群k8s集群node01192.168.246.11k8s集群node02192.168.246.12k8s集群master 192.168.246.10 k8s集群nginxkeepalive负载均衡nginxkeepalive01&#xff08;master&#xff09;192.168.246.13负载均衡nginxkeepalive02&#xff08;backup&#xff09;192.168.246.14VIP 192…

【因果推断python】24_倾向得分2

目录 倾向加权 倾向得分估计 倾向加权 好的&#xff0c;我们得到了倾向得分。怎么办&#xff1f;就像我说过的&#xff0c;我们需要做的就是以此为条件。例如&#xff0c;我们可以运行一个线性回归&#xff0c;它仅以倾向得分为条件&#xff0c;而不是所有的 X。现在&#xff…

Spark 之 HiveStrategies

HiveTableRelation 相关代码 HiveStrategies.scala 当 relation.tableMeta.stats.isEmpty 是&#xff0c; 即调用 hiveTableWithStats class DetermineTableStats(session: SparkSession) extends Rule[LogicalPlan] {private def hiveTableWithStats(relation: HiveTableRel…

《微机原理及接口技术》

编程题&#xff1a; 编制一个程序片断&#xff0c;把保存在变量dataA和dataB中较大的数据取出后存入maxC。假设变量存放的是32位有符号数。 OV AX, DATA ; 段初始化 MOV DS, AX MOV AX, STACK MOV SS, AX MOV DX, WORD PTR BUFA2 ; 按题意&#xff0c;将数送入 DX,AX, BX,…