如何将python应用制作成容器镜像?

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 握手包跑包

各位好 又见面了 我是曹操 今天给大家带来一篇新的教程

希望各位细心学习 低调用网

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello World!"
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=int("5000"), debug=True)

在极客世界里,部署一次,处处运行,这个问题其实有点老掉牙了。别犹豫,答案就是docker。如果你对docker有所了解,你就会知道,以容器的形式发布应用程序已经变得非常流行。本文将教你如何将一个Python应用容器化。一旦容器化,你的应用就可以轻松迁移到其他支持Docker的服务器上,即使这些服务器不联网,只需将一个Docker镜像拷贝到内网即可完成部署。假设有一个用flask编写的Python web应用index.py,展示了一个简单的Hello World:

cdlinux镜像如何制作

运行python index.py后,在浏览器上访问:5000,会看到浏览器显示’Hello World!’,说明程序正常运行。如果我们将这个文件发送给别人,他需要执行以下3个步骤才能启动这个web应用:

Flask==1.1.2

安装Python解释器、安装flask库、执行python index.py。实际情况下,第二步可能涉及很多依赖项,我们可以将所有依赖库放在requirements.txt文件中:

cdlinux镜像如何制作

FROM python:alpine3.8
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD python ./index.py

cdlinux镜像如何制作

然后,在应用程序的根目录(即index.py所在的目录)中创建一个名为Dockerfile的文本文件,并粘贴以下代码。请注意,FROM指令指向python:alpine3.7,告诉Docker容器要使用的基本映像和Python版本(这里是3.8)。Docker Hub提供几乎所有Python版本的基本映像。这个示例使用的是安装在Alpine Linux上的Python,有助于使Docker镜像更小。RUN指令调用pip从requirements.txt文件安装依赖项。Dockerfile中的其他指令非常简单。CMD指令告诉容器要执行的启动应用程序,这里是告诉Python运行index.py。COPY指令简单地将应用程序移动到容器镜像中,WORKDIR设置工作目录,EXPOSE绑定Flask使用的端口。

docker build --tag somenzz-app ./
$ docker images | grep somenzz
somenzz-app                                         latest              b7e2359056bb        3 hours ago         89.1MB
somenzz/my-kali                                     latest              975cbe3a4619        2 weeks ago         1.83GB

cdlinux镜像如何制作

$ docker run --name python-app -p 5000:5000 somenzz-app
 * Serving Flask app "index" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 201-219-912
172.17.0.1 - - [14/Oct/2020 22:32:05] "GET / HTTP/1.1" 200 -

要构建镜像,在Dockerfile目录下,运行docker build命令。等待基本镜像下载并构建完成,将得到一个名为somenzz-app的镜像。这个镜像只有89.1MB大小。接下来就像使用其他镜像一样:

cdlinux镜像如何制作

此时容器已成功启动,本地的5000端口映射到容器的5000端口,因此访问127.0.0.0:5000相当于访问容器的5000端口。如果要在后台运行容器,可以加入-d参数:

$ docker run -d  --name python-app -p 5000:5000 somenzz-app
259d09fbbf77a6fd680cd7527600d055cb76fe3d6792063846103b47360210f9
$ docker container list | grep somenzz-app
259d09fbbf77        somenzz-app                                         "/bin/sh -c 'python …"   20 minutes ago      Up 20 minutes       0.0.0.0:5000->5000/tcp                           python-app

结合前文的步骤,带你进入Docker的第7步:发布镜像,你可以将容器发布到网络上供他人使用。如果你不熟悉Dockerfile,制作并发布Docker镜像还有一个更简单的方法,即下载一个镜像,启动,登录到容器内部进行修改、安装依赖,然后保存为新镜像,最后发布。当然,这种方法效率较低,建议还是学习Dockerfile,官方教程在此:docs.docker.com/engine/reference/builder/。本文只是一个简单的HelloWorld web应用,更复杂的场景需要更多关注细节,但大多数Python应用程序的容器化流程都是相似的。希望本文对你有所帮助。

赞(0)