Python Web 项目的 Dockerfile
介绍
现在,Python 的强大功能已可通过Flask和Streamlit等框架用于基于 Web 的项目。这些项目允许开发人员将 Python 的数据整理和分析功能引入 Web。在部署和共享这些项目时,设置依赖项、要求、网络端口和执行环境的问题可能会阻碍开发和测试。为了解决这个问题,引入了Docker。Docker是一种开源产品,可在操作系统 (OS) 级别提供硬件虚拟化。本指南将演示如何使用 Docker 打包和发布基于 Python 的 Streamlit Web 应用程序。
本指南假设您至少具有中级 Python 知识并对 Streamlit 和 Docker 有基本的了解。
示例应用程序
考虑这样的场景:您想要构建一个增长计算器,根据增长率、初始投资和年限来确定投资的价值。
然后,此应用程序将作为您的开发人员组合的一部分进行共享。最重要的是,感兴趣的各方将能够轻松下载和运行您的项目。Web 是最常见的界面,因此您决定将项目基于 Web。由于它涉及数据分析,因此它将使用 Python。为了让收件人轻松设置和运行您的应用程序,您决定将其打包在 docker 中。
将以下代码复制到 Python 文件中并将其命名为app.py
import streamlit as st
st.title("Hello Streamlit")
st.header("Calculate % Growth")
initial = st.number_input("Initial investment in USD")
yr = st.number_input("Growth Period in years")
growth = st.number_input("Growth Rate in %")
terminal_value = 0
current_val = initial
for year in range(int(yr)):
current_val += growth * current_val
terminal_value = current_val
# perform cashflow projections for the next 5 years
st.write(f'Terminal value of {initial} after {yr} years at a growth rate of {growth} is {terminal_value}')
该项目需要安装 Python 库才能运行。这些库将记录在requirements.txt文件中。将以下内容复制到您的requirements.txt文件中。
streamlit
为了在 Docker 构建期间方便处理,将 Python 和需求文件放在一个文件夹中并将其命名为src/。
Docker 设置
本项目所需的dockerfile主要要实现以下几个逻辑步骤:
- 创建基础映像
- 复制源代码
- 安装要求和依赖项
- 公开所需端口
- 在 Docker 环境中运行 Streamlit 应用程序
将以下 Docker 命令复制到文件中并将其命名为Dockerfile
FROM python:3.8
ENV MICRO_SERVICE=/home/app/webapp
# set work directory
RUN mkdir -p $MICRO_SERVICE
# where your code lives
WORKDIR $MICRO_SERVICE
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install dependencies
RUN pip install --upgrade pip
# copy project
COPY src/ $MICRO_SERVICE
RUN pip install -r requirements.txt
EXPOSE 8501
CMD streamlit run app.py
运行项目
设置完这两个文件后,您就可以构建并运行映像了。要构建映像,请运行命令
docker build -t myimage .
构建 Docker 镜像后,就可以运行 Docker 镜像了。
docker run -p 8501:8501 myimage
结论
使用 Docker 打包和运送 Python Web 应用程序是担任 Python 开发人员和 DevOps 相关职位的开发人员必不可少的技能。为了进一步掌握这些技能,请进一步研究如何使用docker-compose在 Docker 上运行多容器应用程序。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~