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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值