Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出

一、目的

a.快速把原有fastapi代码部署到docker,让docker在server运行。

b.不涉及docker深入设置。

c.使用python第三方lib少或简单。

二、步骤

ps:请提前安装docker

1.新建Dockerfile,放入到项目根目录

a.Dockerfile没有后缀.

b.准备好requirements.txt 文件。(在虚拟环境

pip freeze > requirements.txt

c.有些lib是比较特别和在pycharm导入的不一样需要手动修改,如opencv。

d.CaseTemplateMatch.py是fastapi实现功能文件

Dockerfile:

# 使用python环境运行fastapi py文件
FROM python:3.9

# Set the working directory to /app
#ENV PATH /usr/local/bin:$PATH
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip3 install  -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

RUN pip3 install opencv-python-headless -i https://pypi.tuna.tsinghua.edu.cn/simple

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World


# Run app.py when the container launches
CMD ["python", "/app/CaseTemplateMatch.py"]

CaseTemplateMatch.py(部分)

import cv2
import numpy as np
from fastapi import FastAPI, File, UploadFile, Form
import uvicorn as uvicorn
import os
from starlette.responses import FileResponse
from pathlib import Path
import time

app = FastAPI()


@app.get("/copyFile/{fileName}")
async def copyFile(fileName: str):
    """
    用于下载运行需要的工具,user用不到。文件预先放在server
    :param fileName:
    :return:
    """
    downloadFile = './tool/' + fileName
    my_file = Path(downloadFile)
    if my_file.is_file():
        printtimelog("dowload file"+fileName)
        return FileResponse(downloadFile, filename=fileName)

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

2.构建docker镜像

docker build -t imamgeName .

 使用命令查找image是否存在

docker images

3.运行容器

docker run -d -p 8085:80 --name pytname  pyti2

运行命令查看容器状态

docker ps -a

4.浏览器访问fastapi

四、挂载共享windows文件夹

1.运行命令

a.windows路径直接绝对路径,docker内路径也需要绝对路径。

b.可以不需要参数 -it,不显示交互信息

docker run -v C:\testFile:/app/img -d -p 8087:80 --name pyshare4 pyti2

PS:有时莫名其妙不能挂载。考虑增加参数--restart always --privileged=true

2.进入docker查看

docker exec -it pyshare4 /bin/bash

ps:有时遇到进入后卡住的问题

参考:docker run -it 和 docker exec -it_wdadas的博客-CSDN博客

五、遇到问题与总结

a.当需要安装python lib比较特别时,就需要很耗时查找,就不快速了。

b.可扩展性不高。

六、导入导出镜像

镜像image:save--load

docker save  id(name)> /opt/docker/savesso.tar

docker load < /opt/docker/savesso.tar

容器:export --import

要一一对应,否则报错:

docker: Error response from daemon: No command specified.

参考:Docker 导入导出镜像_bear_依旧。的博客-CSDN博客

参考:Docker实践:python应用容器化 - 三只松鼠 - 博客园

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值