flask服务如何打包成docker镜像并运行

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。

Hello,伙伴们,最近遇到恶一个离谱的事情:我的file-server项目在我的mac上运行很正常,在我的windows电脑上就出现各种错误,尝试了好几次,甚至改了flask的版本,更新了flask版本,最后都无济于事。真让人头大啊。

思考再三,还是用docker吧,把服务打包成docker,然后docker运行,总不会出问题吧。

说干就干,先分析我需要打包进容器的都有哪些内容:

发现需要的就是这些文件和文件夹:

文件/文件夹 描述
requirements.txt 需要的pip依赖文件
app.py python的主要程序代码
templates/ 静态资源文件夹

OK,说干就干。肯定是需要Dokcerfile文件的:

bash 复制代码
 FROM python:3.9
 ​
 # 设置 pip 镜像源为阿里云镜像
 ENV PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/
 ​
 # 设置镜像源不验证 SSL
 ENV PIP_TRUSTED_HOST=mirrors.aliyun.com
 ​
 RUN mkdir /app
 WORKDIR /app
 ​
 COPY requirements.txt .
 RUN pip install -r requirements.txt
 ​
 # 复制整个应用程序到 app 目录中
 COPY app.py /app/
 COPY templates/ /app/templates/
 ​
 # 设置 Flask 环境变量
 ENV FLASK_APP=app.py
 ​
 EXPOSE 9000
 ​
 # 启动 Flask 应用
 CMD ["python", "app.py", "--host=0.0.0.0"]

注意:这里建议配置pip的镜像加速,不然下载pip包的时候会很慢。

剩下的过程就是靠我们自己打包指令了,可以参考我的README.md文件。

Dockerfile

shigen 一直用的是mac,所以没有发现问题。最后移植到了windows平台,发现运行项目,flask都有问题。于是新增了Dockerfile,直接在docker容器中运行服务。以下是相关命令:

bash 复制代码
 docker build -t file-server:1.0.0 .
 docker run -d -p 9000:9000 --name file-server -v $(pwd)/file:/app/upload file-server:1.0.0

docker初次构建的时间可能会很长,因为python官方的docker镜像大约在1GB左右。大部分的时间都在拉取镜像,建议配置docker的镜像加速。

可以先提前单独下载好需要用到的基础镜像:

复制代码
 docker pull python:3.9

其实也捎带繁琐,shigen有空的时候也会把这些写成一个脚本,直接执行生成容器跑起来呢。


最后,还是想推广一下shigen的开源项目:

🧑‍💻file-server介绍

一款开源的局域网文件传输共享工具,如果使用的是移动设备,直接扫描终端中的二维码或者浏览器页面上的二维码即可上传文件。 上传完毕之后的文件将会以列表的形式展示文件的具体信息:如文件名、大小、权限、修改时间等信息,单击【下载】按钮即可下载文件到设备中。

具体的使用可参考 shigen 的文章:开源一个局域网文件共享工具

迄今为止,它已经更新到了v1.0.1啦,期待伙伴们的支持和参与。


以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

平台 账号 链接
CSDN shigen01 shigen的CSDN主页
知乎 gen-2019 shigen的知乎主页
掘金 shigen01 shigen的掘金主页
腾讯云开发者社区 shigen shigen的腾讯云开发者社区主页
微信公众平台 shigen 公众号名:shigen

与shigen一起,每天不一样!

相关推荐
考虑考虑2 小时前
JDK26中的List.ofLazy()
java·后端·java ee
小蒜学长2 小时前
基于SpringBoot的公寓报修管理系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·公寓报修管理系统·多角色协同
云浪2 小时前
Go源码分析:搞懂 Go 是如何实现堆的
后端·go·源码阅读
调试人生的显微镜6 小时前
iOS开发入门:Interface Builder、基础控件及UITextField详解
后端·ios
泡海椒6 小时前
巡检照片与工单附件:jquick-pdf 图片嵌入的业务实战
后端
蜗牛互联网6 小时前
Python消费Responses SSE事件:增量文本、超时与取消
java·开发语言·人工智能·后端·python
AI持续学习6 小时前
文档权限变更如何回归测试?账号、空间、文件和分享链接用例清单
后端
谢亮_vipxieliang6 小时前
Go Worker Pool 设计——从原理到生产级实现
开发语言·后端·golang
IT_陈寒7 小时前
为什么你应该学习JavaScript?
前端·人工智能·后端
lightning_bug7 小时前
Windows系统Docker+SpringBoot+H5+Mysql+Redis打包部署流程
后端·架构