如何把一个Python应用程序装进Docker
准备容器无处不在 , 但是如何在Docker容器中运行Python应用程序呢?这篇文章将告诉你怎么做!
如果您想知道 , 这些示例需要Python 3.x 。
在深入讨论容器之前 , 让我们进一步讨论一下我们想要封装的Python应用程序 。
这个应用程序是一个web API , 它从一个电影集合中返回一个随机的电影 。 在我们的本地文件夹中 , 我们有3个文件:
app.py # Python applicationmovies.json # movie collectionrequirements.txt # where we specifiy our Python dependenciesapp.py包含一个API端点 , 它返回一个随机的影片:
import osimport jsonfrom pathlib import Pathfrom random import choiceimport cherrypyPORT = os.environ.get('PORT', 8888)FOLDER_PATH = Path(__file__).parentwith open(FOLDER_PATH / "movies.json", "r") as f:MOVIES = json.loads(f.read())class Movie:@cherrypy.expose@cherrypy.tools.json_out()def index(self):return {"movie": choice(MOVIES)}cherrypy.quickstart(Movie(), config=cherrypy.config.update({'server.socket_host': '0.0.0.0','server.socket_port': PORT,}))requirement.txt , 我们有我们的依赖包
pip install -r requirements.txt我们可以使用python app.py运行我们的应用程序 。
【如何把一个Python应用程序装进Docker】运行curl localhost:8888应该返回一个随机的影片 , 类似于:
{"movie": {"Title": "Opal Dreams","US_Gross": 14443,"Worldwide_Gross": 14443,"US_DVD_Sales": null,"Production_Budget": 9000000,"Release_Date": "Nov 22 2006","MPAA_Rating": "PG","Running_Time_min": null,"Distributor": "Strand","Source": "Based on Book/Short Story","Major_Genre": "Drama","Creative_Type": "Contemporary Fiction","Director": null,"Rotten_Tomatoes_Rating": null,"IMDB_Rating": 6.5,"IMDB_Votes": 468}}如何容器化我们的程序
文章插图
包含一个Python应用程序意味着创建一个Docker镜像 , 其中包含运行它所需要的一切:源代码、依赖项和配置 。
容器化应用程序的第一步是创建一个新的文本文件 , 名为Dockerfile:
app.pymovies.jsonrequirements.txtDockerfile在Dockerfile(我们认为是最小可行Dockerfile)中 , 我们需要指定三个步骤:
- 选择我们想要使用的基本图像
- 选择我们想要在Docker图像中复制的文件
- 安装应用程序的依赖项
文章插图Base image要指定基本映像 , 我们使用FROM命令 , 后面跟着私有或公共映像 。
在我们的例子中 , 我们将使用官方的Python Docker映像 , 该映像可在Docker hub上使用 。
我们将选择最新可用的基于Ubuntu的python3图像 。
文章插图# 1. Base imageFROM python:3.8.5-slim-buster图像名称由两个不同的部分组成:image:tag 。 在我们的例子中 , 图像是python , 标签是3.8.5-slim-buster 。这就是第一步所需要的一切 。
复制应用程序要在Docker图像中复制我们的应用程序 , 我们将使用copy命令:
# 2. Copy filesCOPY . /src此命令将指定的文件(或文件夹)复制到Docker映像中 。 在我们的例子中 , 我们希望复制Docker映像中本地文件夹中/src路径下的所有可用文件 。
推荐阅读
- 微软Edge迎来一个新的浮层菜单 用于管理下载进度
- 大一非计算机专业的学生,如何利用寒假自学C语言
- 计算机专业大一下学期,该选择学习Java还是Python
- 红米K40渲染图曝光:居中挖孔+后置四摄,这外观你觉得如何?
- 一个亮点解读 创维小湃P3 Pro必须要买的理由
- 华为认证HCIP-GaussDB-OLTP发布,下一个高级DBA会是你吗
- 又黄一个APP,“品牌收购机”成“没落收割机”,收一黄一
- 想自学Python来开发爬虫,需要按照哪几个阶段制定学习计划
- 教你用Siri来控制电脑:真香
- 未来想进入AI领域,该学习Python还是Java大数据开发
