一、目的

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/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):"""用于下载运行需要的工具,user用不到。文件预先放在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.构建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.tardocker load < /opt/docker/savesso.tar

容器:export --import

要一一对应,否则报错:

docker: Error response from daemon: No command specified.

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

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

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

  1. 【Microsoft Azure 的1024种玩法】六十八.基于Azure云平台使用Azure Virtual machines快速搭建Docker容器

    [简介] Docker 是一个开放源代码软件,主要应用于开发应用.交付应用.运行应用,Docker 可以将应用程序及其依赖项打包到可以在任何 Linux.Windows 或 macOS 计算机上运行的 ...

  2. 如何在VirtualBox下挂载共享文件夹

    如何在VirtualBox下挂载共享文件夹 在这里先向问过我 "VirtualBox下挂载共享文件夹"怎么安装的童靴哈,说一声,抱歉!这个我滴锅咯. 可能,大概差不多,是由于大家觉 ...

  3. Docker容器挂载

    docker的理念:将应用和环境打包成一个镜像!通过镜像启动容器运行 问题:在容器中存储的程序数据是需要持久化的,不能容器删了数据也随之删除.比如,安装一个MySQL容器,在其中存储了大量数据,结果把 ...

  4. Docker 容器挂载摄像头并显示图像

    Docker本身的工作模式是命令行的,但有时候我们需要在Docker容器里运行一些图形化东西如:调用摄像头,输出图像等等,这个时候我们就不得不研究一下如何在Docker中进行 "可视化&qu ...

  5. 动力节点Docker学习教程,一文带你快速了解docker容器

    什么是Docker? 下面是Docker容器的Logo,大家可以从这个logo也能道出容器的大致概念了. 其实Docker的概念来自于集装箱,集装箱解决的问题就是把所有不规整的货物都用标准化大小的箱子 ...

  6. centos7 samba 离线安装_CentOS 7安装配置Samba服务器(挂载共享文件夹)

    CentOS 7安装配置Samba服务器 CentOS 7下Samba服务器安装配置过程笔记. 假设我们有这样一个场景 共享名 路径 权限 SHAREDOC /smb/docs 所有人员包括来宾均可以 ...

  7. virtualbox手动挂载共享文件夹

    设置共享文件夹 在mnt目录下新建文件夹myshare,并输入挂载命令. # share是刚刚设置的文件夹名称 sudo mount -t vboxsf share /mnt/myshare 卸载已挂 ...

  8. Linux虚拟机挂载共享文件夹

    1.设置 在Linux 中设置共享文件夹. 2.挂载 mount -t vboxsf  主机上的共享文件夹  Linux下挂在的位置 例如: 设置文件夹 share mkdir /mnt/share ...

  9. linux7自动挂载怎么做,CentOS7 Virtual Box 开机自动挂载共享文件夹

    解决方案 按题主的意思是, web是自建的共享条目, 可能对应主机的share_path_host目录, 目标是自动挂载到虚拟机的/web/wwwroot目录. 就我目前所知, 做不到. 但可以有所变 ...

最新文章

  1. 张海腾:语音识别实践教程
  2. 利用RGB-D数据进行人体检测 带dataset
  3. 用js获取当前地理位置的经纬度
  4. 在 Android Studio 2.2 中愉快地使用 C/C++
  5. Java数据库连接(JDBC)之一:JDBC详细连接过程
  6. 磁盘调度 FCFS、SSTF、SCAN 算法c++实现(大学生专用)
  7. android studio- java注释自己动手弄起来
  8. 边缘AI计算新时代,人工神经网络秒变脉冲神经网络
  9. Linux 6.5选包截图
  10. PHP获取随机字符串的两种方法
  11. 【codemirror】Json编辑器使用总结
  12. HTML基础学习(菜鸟教程和W3school参考手册)
  13. 树莓派pico--PIO入门
  14. 为个人博客添加文章评论功能
  15. magicbook java开发,买前必看,荣耀MagicBook和华为MateBook D(2018版)哪个更适合你?
  16. uniapp生成高清海报图canvas
  17. 实战技法 - 短线操盘 (10)
  18. 浙江财经大学第十四届程序设计竞赛命题感想
  19. 《Molecular Plant》新思路:比较转录组+比较基因组研究小麦高效氮利用分子机制
  20. linux centos 查看内存使用情况

热门文章

  1. linux部署的java应用,浏览器访问时,报域名解析错误
  2. 2013年7月27日杂记
  3. zendframework配置篇
  4. error LNK2001: unresolved external symbol public: __thiscall CNaDialog::CNaDialog(class CWnd *)
  5. 4.WCF事务【Transaction】
  6. Gentle.Net学习笔记四:修改代码,使用Oracle数据库
  7. iNeuOS工业互联网操作系统,矿山动态产量计量系统和铁路车辆识别系统应用场景案例...
  8. 如何在 ASP.Net Core 中使用 Lamar
  9. 过完年,又不想上班了?
  10. .NET必知的EventCounters性能指标监视器