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 小时前
别再被误导!try...catch性能大揭秘
后端
苍何4 小时前
30分钟用 Agent 搓出一家跨境网店,疯了
后端
ssshooter4 小时前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
追逐时光者5 小时前
一个基于 .NET Core + Vue3 构建的开源全栈平台 Admin 系统
后端·.net
程序员飞哥5 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
GetcharZp7 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端
Victor3567 小时前
MongoDB(69)如何进行增量备份?
后端
Victor3568 小时前
MongoDB(70)如何使用副本集进行备份?
后端
千寻girling8 小时前
面试官 : “ 说一下 Python 中的常用的 字符串和数组 的 方法有哪些 ? ”
人工智能·后端·python
ywf12159 小时前
Spring Boot接收参数的19种方式
java·spring boot·后端