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一起,每天不一样!

相关推荐
muxue17841 分钟前
go:运行第一个go语言程序
开发语言·后端·golang
米饭好好吃.42 分钟前
【Go】Go wire 依赖注入
开发语言·后端·golang
闲猫42 分钟前
go 接口interface func (m Market) getName() string {
开发语言·后端·golang
Good Note42 分钟前
Golang的静态强类型、编译型、并发型
java·数据库·redis·后端·mysql·面试·golang
可爱de艺艺42 分钟前
Go入门之struct
开发语言·后端·golang
信徒_1 小时前
Go 语言中的协程
开发语言·后端·golang
m0_748236581 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
web151173602231 小时前
Spring Boot项目中解决跨域问题(四种方式)
spring boot·后端·dubbo
我就是我3521 小时前
记录一次SpringMVC的406错误
java·后端·springmvc
过客猫20223 小时前
使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
开发语言·后端·golang