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/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应用容器化 - 三只松鼠 - 博客园

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP-FPM 与 Nginx 的通信机制总结

PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言&#xff08; PHP,Python 等&#xff09;的代码文件需要通过对应的解析器才能被服务器识别&#xff0c;而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器&#xff0c;再加上对…

Android——监听事件总结

各种监听事件 1.按钮 Button&#xff08;1&#xff09;点击监听btn_1.setOnClickListener(new View.OnClickListener() { &#xff08;2&#xff09;长按监听btn_1.setOnLongClickListener(new View.OnLongClickListener() { 2.单选框 RadioGroupradio_gp.setOnCheckedChangeLi…

ChatGPT 大智近妖,从宇宙人生到手搓光刻机,从哄女朋友到写年终总结我们聊得非常开心,反而让人越来越忧心...

都说 ChatGPT 要干掉程序员&#xff0c;清理搜索引擎&#xff0c;取代Stack Overflow&#xff0c;还能消灭人类&#xff0c;这些有些言过其实了。ChatGPT 的定位是一个人工智能助理&#xff0c;它说&#xff0c;它的主要目的是通过回答用户的问题&#xff0c;为用户提供帮助。在…

如何在Windows Defender中安排扫描

Windows Defender automatically performs background scans during your PC’s idle moments, but doesn’t include an easy way to schedule a full scan. There is a way to do it, though. Windows Defender在PC空闲时自动执行后台扫描&#xff0c;但是没有包括安排完整扫…

复习深入笔记02:魔法方法/cookie,session,token/异常

魔法方法 对象生成 1.先调用__new__方法&#xff0c;生成空对象。控制对象生成。 2.当执行“对象类名&#xff08;namelqz&#xff09;”&#xff0c;触发类的__init__()

比特熊故事汇独家 | .NET 感恩专场

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;15分钟)大家好&#xff01;我是爱吃、爱玩、更爱学习技术&#xff0c;IT界新晋小红人&#xff0c;开发者的好朋友——比特熊&#xff01;比特熊&#xff1a;本期故事汇是.NET专场&#xff0c;今天一次性邀请到DOTNET领…

Ubuntu Core 给物联网提供更多安全支持

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; Canonical 是 Ubuntu 的一个桌面环境&#xff0c;该公司目前在云服务业务赚到了钱。因为 Ubuntu Core 为嵌入式设备带来了 Ubuntu 18.04 长期支持(LTS)代码库。Ubuntu Core 的镜像大小为 260MB&…

semantic ui要装什么才能使用

作者&#xff1a;呆呆笨笨链接&#xff1a;https://www.zhihu.com/question/32233356/answer/196799506来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。本答案将以两种方式讲解如何从零开始使用 Semantic-UI&#xff0c;…

用户帐户控制设置_创建快捷方式以避免用户帐户控制弹出式快捷方式

用户帐户控制设置There are numerous applications which, when launched, result in a UAC (User Account Control) warning being displayed. There are reasons why this security measure is a good idea, but it can also be extremely irritating. ElevatedShortcut lets…

Java Observer Pattern(观察者模式)

当对象间存在一对多关系时&#xff0c;则使用观察者模式&#xff08;Observer Pattern&#xff09;。比如&#xff0c;当一个对象被修改时&#xff0c;则会自动通知它的依赖对象。观察者模式属于行为型模式。 关键代码&#xff1a;在抽象类里有一个 ArrayList 存放观察者们。 优…

rest_framework01:前后端分离\规范\简单例子(查询某本书)

web 开发模式 RESTful规范 1 数据的安全保障 url链接一般都采用https协议进行传输 注&#xff1a;采用https协议&#xff0c;可以提高数据交互过程中的安全性 2 接口特征表现 用api关键字标识接口url&#xff1a; https://api.baidu.comhttps://www.baidu.com/api注&#xff…

.NET Core如何通过SSL访问MongoDB?

【.NET Core】| 总结/Edison Zhou大家好&#xff0c;我是Edison。最近有一个ASP.NET Core通过SSL证书访问MongoDB的需求&#xff0c;但是在网上发现资料很少&#xff0c;于是调查了一番&#xff0c;做了如下的笔记&#xff0c;希望对你有用。背景在实际场景中&#xff0c;开发环…

SQA

一、长大一条龙SQA计划 SQA计划需要包含软件工程质量保证、质量控制、数据收集和统计报告这四方面内容&#xff0c;计划以时间为线索&#xff0c;小组内成员为对象&#xff0c;以下为我组的工作计划&#xff1a; 时间 任务 需完成的情况 2017年10月 用户登录注册后台实现 …

在pom.xml中配置nexus上传地址

2019独角兽企业重金招聘Python工程师标准>>> <distributionManagement> <repository> <id>thirdparty</id> <url>http://&#xff5b;nexusIP地址&#xff5d;:8081/nexus/content/repositories/thi…

网页背景平铺_在大约十秒钟内为网页创建无缝平铺背景

网页背景平铺Creating a background image for your webpage (or desktop background) isn’t challenging at all. In fact, even a newbie Photoshop user can bash one out in about ten seconds. Here’s the simplest of simple methods with surprising, great results. …

9月11日学习内容整理:正则表达式,re模块

一、正则表达式&#xff1a;正则是很大的一个知识点&#xff0c;不会仅仅是下面这些东西 1、概念&#xff1a;正则表达式就是一种对字符串匹配的规则&#xff0c;注意是只对字符串&#xff0c;正则表达式和python没啥关系&#xff0c; 2、表达式&#xff1a; &#xff08;1&…

rest_framework02:修改数据/校验钩子/read_only和write_only

修改数据 1.传入数据&#xff0c;选中data&#xff0c;以及修改data book_ser BookSerializer(instancebook, datarequest.data) 2.校验&#xff0c;通过则保存。 if book_ser.is_valid(): # 返回True 表示验证通过book_ser.save() # 不是book.save() rest_framework…

MongoDB的安装与使用

MongoDB是一款NoSql数据库。NoSql数据库叫非关系型数据库&#xff0c;NoSql的全名Not only sql。是为了解决高并发、高可用、高可扩展&#xff0c;以及大数据存储等一系列问题而产生的数据库解决方案。NoSql&#xff0c;它不能替代关系型数据库&#xff0c;只能作为关系型数据库…

linux 基准测试_如何对Linux系统进行基准测试:3个开源基准测试工具

linux 基准测试Linux’s command-line utilities can do anything, including perform benchmarks – but using a dedicated benchmarking program is a simpler and more foolproof process. These utilities allow you to perform reproducible tests across different syst…

.NET 7 新增的 IParsable 接口介绍

.NET 7 是一个新版本的 .NET&#xff0c;它新增了一个名为 IParsable 的接口。这个接口可以帮助开发人员更容易地在代码中解析字符串。IParsable 接口包含两个方法&#xff1a;Parse 和 TryParse。Parse 方法用于将一个字符串解析为指定类型的值。如果解析失败&#xff0c;则会…