OpenShift Python S2I镜像

Python S2I 镜像

概览

OpenShift Container Platform提供支持 S2I的 Python镜像,用于构建和运行Python应用程序。Python S2I构建器镜像使用一些必需的依赖项组装您的应用程序源,以创建包含Python应用程序的新镜像。生成的镜像可以由OpenShift Container Platform或容器运行时运行。

版本

目前,OpenShift Container Platform提供的版本 2.73.33.43.5的Python。

镜像

根据您的需要,这些镜像有两种形式:

  • RHEL 7
  • CentOS 7

基于RHEL 7的镜像

RHEL 7镜像可通过Red Hat Registry获得:

$ docker pull registry.redhat.io/rhscl/python-27-rhel7
$ docker pull registry.redhat.io/openshift3/python-33-rhel7
$ docker pull registry.redhat.io/rhscl/python-34-rhel7
$ docker pull registry.redhat.io/rhscl/python-35-rhel7

基于CentOS 7的镜像

这些镜像可在Docker Hub上获得:

$ docker pull centos/python-27-centos7
$ docker pull openshift/python-33-centos7
$ docker pull centos/python-34-centos7
$ docker pull centos/python-35-centos7

要使用这些镜像,您可以直接从这些镜像注册表(image registry)访问它们,也可以将它们 推送到OpenShift Container Platform容器镜像注册表中。此外,您可以在容器镜像注册表或外部位置创建 指向镜像的镜像流(image stream)。然后,您的OpenShift Container Platform资源可以引用ImageStream。您可以从下边链接中找到 所有提供的OpenShift Container Platform镜像的示例镜像流定义

构建过程

S2I通过将源代码注入容器并让容器准备要执行的源代码来生成可立即运行的镜像。它执行以下步骤:

  1. 从构建器(bulid)镜像启动容器。
  2. 下载应用程序源。
  3. 将脚本和应用程序源流式传输到构建器镜像容器中。
  4. 运行assemble 脚本(来自构建器镜像)。
  5. 保存最终镜像。

有关构建过程的详细概述,请参见S2I构建过程。

配置

Python镜像支持许多环境变量,可以设置这些变量来控制Python运行时的配置和行为。

要将这些环境变量设置为镜像的一部分,可以将它们放入 源代码存储库中的.s2i /environment文件中,或者在构建配置定义的环境部分中定义它们sourceStrategy

您还可以在创建新应用程序时设置要与现有镜像一起使用的环境变量 ,或者通过 更新现有对象(如部署配置)的环境变量

:heavy_exclamation_mark:

控制构建行为的环境变量必须设置为s2i构建配置的一部分,或者设置在.s2i/environment文件中,以使它们可用于构建步骤。

变量名 描述
APP_FILE 此变量指定传递给Python解释器的文件名,该解释器负责启动应用程序。默认情况下,此变量设置为app.py.
APP_MODULE 此变量指定可调用的WSGI。它遵循模式$(MODULE_NAME):$(VARIABLE_NAME),其中模块名称是完整的虚线路径,变量名称是指定模块内的函数。如果您有setup.py用于安装应用程序,则可以从该文件中读取模块名称,并且变量默认为application。有一个示例 setup-test-app 可用。
APP_CONFIG 此变量指示具有gunicorn配置的有效Python文件的路径 。
DISABLE_COLLECTSTATIC 将其设置为非空值以禁止manage.py collectstatic 在构建期间执行。只影响Django项目。
DISABLE_MIGRATE 将其设置为非空值以禁止manage.py migrate 在生成的图像运行时执行。只影响Django项目。
PIP_INDEX_URL 设置此变量以使用自定义索引URL或镜像在构建过程中下载所需的包。这仅影响requirements.txt文件中列出的包 。
WEB_CONCURRENCY 设置此项以更改worker数量的默认设置 。默认情况下,此值设置为可用核心数乘以4。
ENABLE_PIPENV 设置此变量以使用Pipenv(更高级别的Python打包工具)来管理应用程序的依赖关系。仅当您的项目包含正确格式化的Pipfile和Pipfile.lock时,才应使用此方法。
APP_SCRIPT 用于从脚本文件运行应用程序。这应该是一个脚本文件的路径(默认为app.sh除非设置为null),它将运行以启动应用程序。

源存储库布局

您不需要在现有Python项目的存储库中更改任何内容。但是,如果存在以下文件,则会影响构建过程的行为:

  • requirements.txt

    要安装的依赖项列表pip。格式记录 在这里

  • Pipfile

    对于requirements.txt的增强,pipfile项目正处于活动的设计和开发中,格式记录在这里。将ENABLE_PIPENV环境变量设置为true以处理此文件。

  • setup.py

    配置项目的各个方面,包括安装依赖项,如此 处所述。对于大多数项目,只需使用requirements.txtPipfile即可。将DISABLE_SETUP_PY_PROCESSING环境变量设置为true以跳过此文件的处理。

运行策略

由s2i-python生成的容器镜像按以下的优先顺序执行项目:

  • Gunicorn

    Gunicorn WSGI HTTP服务器用于在安装时为您的应用程序提供服务。可以通过将其列在requirements.txt 文件或文件setup.pyinstall_requires部分中来安装它。

    如果wsgi.py存储库中存在已命名的文件,则它将用作应用程序的入口点。这可以用环境变量APP_MODULE覆盖。默认情况下,此文件存在于Django项目中。

    如果您的Django和Gunicorn都符合要求,您的Django项目将自动使用Gunicorn。

  • Django开发服务器

    如果您的Django符合要求但没有Gunicorn,那么您的应用程序将使用Django提供的开发Web服务器。但是,建议不要将其用于生产环境。

  • Python脚本

    这将用于提供运行应用程序的Python代码文件的位置。它将用于通过APP_FILE环境变量指定Python脚本的路径,默认为app.py命名的文件(如果存在)。该脚本将传递给常规Python解释器以启动您的应用程序。

  • 应用脚本文件

    这是执行应用程序的最常用方法。它将用于通过APP_SCRIPT环境变量指定可执行脚本文件的路径,默认为app.sh命名的文件(如果存在)。脚本直接执行以启动您的应用程序。

热部署

热部署允许您快速make和部署对应用程序的更改,而无需生成新的S2I构建。如果您使用Django,热部署开箱即用。

要在使用Gunicorn时启用热部署,请确保在存储库中有一个Gunicorn配置文件, reload选项设置为true。使用APP_CONFIG环境变量指定配置文件 。例如,请参阅该oc new-app 命令。您可以使用该 oc set env 命令更新现有对象的环境变量。

:exclamation:

您应该只在开发或调试时使用此选项; 建议不要在生产环境中启用此功能。

要在正在运行的窗格中更改源代码,请使用以下 oc rsh 命令输入容器id:

$ oc rsh <pod_id>

进入正在运行的容器后,当前目录将设置为 /opt/app-root/src,源代码位于此处。

也可以看看

可以在https://github.com/sclorg/s2i-python-container上找到Dockerfile和其他来源。在该存储库中,您还可以找到其他版本的Python环境Dockerfiles。CentOS的Dockerfile命名为Dockerfile,RHEL7的Dockerfile命名为Dockerfile.rhel7,RHEL8的命名为Dockerfile.rhel8

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容