Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出
一、目的
a.快速把原有fastapi代碼部署到docker,讓docker在server運(yùn)行。
b.不涉及docker深入設(shè)置。
c.使用python第三方lib少或簡單。
二、步驟
ps:請(qǐng)?zhí)崆鞍惭bdocker
1.新建Dockerfile,放入到項(xiàng)目根目錄
a.Dockerfile沒有后綴.
b.準(zhǔn)備好requirements.txt 文件。(在虛擬環(huán)境
pip freeze > requirements.txt)
c.有些lib是比較特別和在pycharm導(dǎo)入的不一樣需要手動(dòng)修改,如opencv。
d.CaseTemplateMatch.py是fastapi實(shí)現(xiàn)功能文件
Dockerfile:
# 使用python環(huán)境運(yùn)行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/simpleRUN 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 timeapp = FastAPI()@app.get("/copyFile/{fileName}") async def copyFile(fileName: str):"""用于下載運(yùn)行需要的工具,user用不到。文件預(yù)先放在server:param fileName::return:"""downloadFile = './tool/' + fileNamemy_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.構(gòu)建docker鏡像
docker build -t imamgeName .?使用命令查找image是否存在
docker images3.運(yùn)行容器
docker run -d -p 8085:80 --name pytname pyti2運(yùn)行命令查看容器狀態(tài)
docker ps -a4.瀏覽器訪問fastapi
四、掛載共享windows文件夾
1.運(yùn)行命令
a.windows路徑直接絕對(duì)路徑,docker內(nèi)路徑也需要絕對(duì)路徑。
b.可以不需要參數(shù) -it,不顯示交互信息
docker run -v C:\testFile:/app/img -d -p 8087:80 --name pyshare4 pyti2PS:有時(shí)莫名其妙不能掛載。考慮增加參數(shù)--restart always --privileged=true
2.進(jìn)入docker查看
docker exec -it pyshare4 /bin/bashps:有時(shí)遇到進(jìn)入后卡住的問題
參考:docker run -it 和 docker exec -it_wdadas的博客-CSDN博客
五、遇到問題與總結(jié)
a.當(dāng)需要安裝python lib比較特別時(shí),就需要很耗時(shí)查找,就不快速了。
b.可擴(kuò)展性不高。
六、導(dǎo)入導(dǎo)出鏡像
鏡像image:save--load
docker save id(name)> /opt/docker/savesso.tardocker load < /opt/docker/savesso.tar容器:export --import
要一一對(duì)應(yīng),否則報(bào)錯(cuò):
docker: Error response from daemon: No command specified.
參考:Docker 導(dǎo)入導(dǎo)出鏡像_bear_依舊。的博客-CSDN博客
參考:Docker實(shí)踐:python應(yīng)用容器化 - 三只松鼠 - 博客園
總結(jié)
以上是生活随笔為你收集整理的Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复习深入笔记01:对象/可变与不可变类型
- 下一篇: python 调用文件上传图片简单例子