如何把一个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文章插图
包含一个Python应用程序意味着创建一个Docker镜像 , 其中包含运行它所需要的一切:源代码、依赖项和配置 。
容器化应用程序的第一步是创建一个新的文本文件 , 名为Dockerfile:
app.pymovies.jsonrequirements.txtDockerfile在Dockerfile(我们认为是最小可行Dockerfile)中 , 我们需要指定三个步骤:

  • 选择我们想要使用的基本图像
  • 选择我们想要在Docker图像中复制的文件
  • 安装应用程序的依赖项

如何把一个Python应用程序装进Docker文章插图
Base image要指定基本映像 , 我们使用FROM命令 , 后面跟着私有或公共映像 。
在我们的例子中 , 我们将使用官方的Python Docker映像 , 该映像可在Docker hub上使用 。
我们将选择最新可用的基于Ubuntu的python3图像 。
如何把一个Python应用程序装进Docker文章插图
# 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路径下的所有可用文件 。