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了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot: 可执行jar的特殊逻辑

这一篇我们来看看Java代码怎么操作zip文件(jar文件),然后SpringBoot的特殊处理,文章分为2部分 Zip API解释,看看我们工具箱里有哪些工具能用SpringBoot的特殊处理,看看SpringBoot Jar和普通Jar的不同 1. Zip API解释 1. ZipFil…

【小白专用】C# Task 类异步操作-浅谈

注解 Task类表示不返回值并且通常以异步方式执行的单个操作。 Task 对象是在 .NET Framework 4 中首次引入的 基于任务的异步模式 的中心组件之一。 由于对象执行的工作 Task 通常在线程池线程上异步执行,而不是在主应用程序线程上同步执行,因此可以使用…

Adobe Illustrator 矢量图设计软件下载安装,Illustrator 轻松创建各种矢量图形

Adobe Illustrator,它不仅仅是一个简单的图形编辑工具,更是一个拥有丰富功能和强大性能的设计利器。 在这款软件中,用户可以通过各种精心设计的工具,轻松创建和编辑基于矢量路径的图形文件。这些矢量图形不仅具有高度的可编辑性&a…

检测五个数是否一样的算法

目录 算法算法的输出与打印效果输出输入1输入2 打印打印1打印2 算法的流程图总结 算法 int main() {int arr[5] { 0 };int i 0;int ia 0;for (i 0; i < 5; i) { scanf("%d", &arr[i]); }for (i 1; i < 5; i) {if (arr[0] ! arr[i]) {ia 1;break;} }…

SpringBoot高手之路-springboot原理篇

配置文件优先级 SpringBoot原理篇-多环境配置

Elasticsearch 认证模拟题 - 13

一、题目 集群中有索引 task3&#xff0c;用 oa、OA、Oa、oA 查询结构是 4 条&#xff0c;使用 dingding 的查询结果是 1 条。通过 reindex 索引 task3 为 task3_new&#xff0c;能够使 task3_new 满足以下查询条件。 使用 oa、OA、Oa、oA、0A、dingding 查询都能够返回 6 条…

R语言 | 使用最简单方法添加显著性ggpubr包

本期教程原文&#xff1a;使用最简单方法添加显著性ggsignif包 本期教程 获得本期教程代码和数据&#xff0c;在后台回复关键词&#xff1a;20240605 小杜的生信笔记&#xff0c;自2021年11月开始做的知识分享&#xff0c;主要内容是R语言绘图教程、转录组上游分析、转录组下游…

立创·天空星开发板-GD32F407VE-GPIO

本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子&#xff0c;记录学习笔记。 立创天空星开发板-GD32F407VE-GPIO 基础概念三极管MOS管 GPIO输出模式输出线与GPIO输入模式GPIO点灯 基础概念 GPIO&#xff0c;全称为“通用输入/输出”&#xff08;General Purpose …

Wireshark自定义Lua插件

背景&#xff1a; 常见的抓包工具有tcpdump和wireshark&#xff0c;二者可基于网卡进行抓包&#xff1a;tcpdump用于Linux环境抓包&#xff0c;而wireshark用于windows环境。抓包后需借助包分析工具对数据进行解析&#xff0c;将不可读的二进制数转换为可读的数据结构。 wires…

SpringBoot+Vue实现前后端分离基本的环境搭建

目录 一、Vue项目的搭建 &#xff08;1&#xff09;基于vite创建vue项目 &#xff08;2&#xff09;引入elementplus &#xff08;3&#xff09;启动后端服务&#xff0c;并测试 二、SpringBoot项目的搭建 &#xff08;1&#xff09;通过idea创建SpringBoot项目 &#x…

ipables防火墙

一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层&#xff0c;针对 TCP/IP 数据包实施过滤和限制&#xff0c;属于典 型的包过滤防火墙&#xff08;或称为网络层防火墙&#xff09;。Linux 系统的防火墙体系基于内核编码实现&#xff0c; 具有非常稳定的性能和高效率&…

AI高考大战,揭秘五大热门模型谁能问鼎数学之巅?

在高考前&#xff0c;我就有想法了&#xff0c;这一次让AI来做做高考题。就用国内的大模型&#xff0c;看哪家的大模型解题最厉害。 第一天考完&#xff0c;就拿到了2024高考数学2卷的电子版&#xff0c;这也是重庆市采用的高考试卷 这次选了5个AI工具&#xff0c;分别是天工&a…

FlexJavaFramwork

FlexJavaFramwork架构

【python】python商业客户流失数据模型训练分析可视化(源码+数据集+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

skywalking学习

文章目录 前言一、skywalking单体安装部署1. 下载skywalking2. 部署oap和oap-ui服务3. 测试skywalking监控springboot应用 二、搭建swck(skywalking集群)1.安装k8s2.下载swck3.设置pod自动注入java agent 三、skywalking监控python四、skywalking监控cpp总结参考 前言 本文主要…

生气时,你的“心”会发生什么变化?孟德尔随机化分析猛如虎,结果都是套路...

“不生气不生气&#xff0c;气出病来无人替”&#xff0c;不少人遇事常这样宽慰自己。事实上&#xff0c;“气死”真不是危言耸听。越来越多的研究证明了情绪稳定对健康的重要性&#xff0c;那么&#xff0c;当情绪频繁波动时&#xff0c;我们的心血管究竟会发生什么变化&#…

SpringBoot 的多配置文件

文章目录 SpringBoot 的多配置文件spring.profiles.active 配置Profile 和 ActiveProfiles 注解 SpringBoot 的多配置文件 spring.profiles.active 配置 默认情况下&#xff0c;当你启动 SpringBoot 项目时&#xff0c;会在日志中看到如下一条 INFO 信息&#xff1a; No act…

产气荚膜梭菌定植与婴儿食物过敏之间的关联

谷禾健康 牛奶蛋白过敏&#xff08;CMPA&#xff09;是婴儿最常见的食物过敏类型之一。粪便病原菌培养显示产气荚膜梭菌阳性率超过30%&#xff0c;明显高于其他细菌。因此推测产气荚膜梭菌定植可能是婴儿牛奶蛋白过敏的发病因素之一。 一项真实世界的研究&#xff0c;杨敏团队从…

C++全栈聊天项目(21) 滚动聊天布局设计

滚动聊天布局设计 我们的聊天布局如下图 最外层的是一个chatview&#xff08;黑色&#xff09;&#xff0c; chatview内部在添加一个MainLayout&#xff08;蓝色&#xff09;&#xff0c;MainLayout内部添加一个scrollarea(红色)&#xff0c;scrollarea内部包含一个widget&…