OpenShift Python S2I鏡像

Python S2I 鏡像

概覽

OpenShift Container Platform提供支持 S2I的 Python鏡像,用于構(gòu)建和運(yùn)行Python應(yīng)用程序。Python S2I構(gòu)建器鏡像使用一些必需的依賴項(xiàng)組裝您的應(yīng)用程序源,以創(chuàng)建包含Python應(yīng)用程序的新鏡像。生成的鏡像可以由OpenShift Container Platform或容器運(yùn)行時(shí)運(yùn)行。

版本

目前,OpenShift Container Platform提供的版本 2.7, 3.3, 3.43.5的Python。

鏡像

根據(jù)您的需要,這些鏡像有兩種形式:

  • 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容器鏡像注冊表中。此外,您可以在容器鏡像注冊表或外部位置創(chuàng)建 指向鏡像的鏡像流(image stream)。然后,您的OpenShift Container Platform資源可以引用ImageStream。您可以從下邊鏈接中找到 所有提供的OpenShift Container Platform鏡像的示例鏡像流定義。

構(gòu)建過程

S2I通過將源代碼注入容器并讓容器準(zhǔn)備要執(zhí)行的源代碼來生成可立即運(yùn)行的鏡像。它執(zhí)行以下步驟:

  1. 從構(gòu)建器(bulid)鏡像啟動(dòng)容器。
  2. 下載應(yīng)用程序源。
  3. 將腳本和應(yīng)用程序源流式傳輸?shù)綐?gòu)建器鏡像容器中。
  4. 運(yùn)行assemble 腳本(來自構(gòu)建器鏡像)。
  5. 保存最終鏡像。

有關(guān)構(gòu)建過程的詳細(xì)概述,請參見S2I構(gòu)建過程。

配置

Python鏡像支持許多環(huán)境變量,可以設(shè)置這些變量來控制Python運(yùn)行時(shí)的配置和行為。

要將這些環(huán)境變量設(shè)置為鏡像的一部分,可以將它們放入 源代碼存儲庫中的.s2i /environment文件中,或者在構(gòu)建配置定義的環(huán)境部分中定義它們sourceStrategy。

您還可以在創(chuàng)建新應(yīng)用程序時(shí)設(shè)置要與現(xiàn)有鏡像一起使用的環(huán)境變量 ,或者通過 更新現(xiàn)有對象(如部署配置)的環(huán)境變量。

:heavy_exclamation_mark:

控制構(gòu)建行為的環(huán)境變量必須設(shè)置為s2i構(gòu)建配置的一部分,或者設(shè)置在.s2i/environment文件中,以使它們可用于構(gòu)建步驟。

變量名 描述
APP_FILE 此變量指定傳遞給Python解釋器的文件名,該解釋器負(fù)責(zé)啟動(dòng)應(yīng)用程序。默認(rèn)情況下,此變量設(shè)置為app.py.
APP_MODULE 此變量指定可調(diào)用的WSGI。它遵循模式$(MODULE_NAME):$(VARIABLE_NAME),其中模塊名稱是完整的虛線路徑,變量名稱是指定模塊內(nèi)的函數(shù)。如果您有setup.py用于安裝應(yīng)用程序,則可以從該文件中讀取模塊名稱,并且變量默認(rèn)為application。有一個(gè)示例 setup-test-app 可用。
APP_CONFIG 此變量指示具有gunicorn配置的有效Python文件的路徑 。
DISABLE_COLLECTSTATIC 將其設(shè)置為非空值以禁止manage.py collectstatic 在構(gòu)建期間執(zhí)行。只影響Django項(xiàng)目。
DISABLE_MIGRATE 將其設(shè)置為非空值以禁止manage.py migrate 在生成的圖像運(yùn)行時(shí)執(zhí)行。只影響Django項(xiàng)目。
PIP_INDEX_URL 設(shè)置此變量以使用自定義索引URL或鏡像在構(gòu)建過程中下載所需的包。這僅影響requirements.txt文件中列出的包 。
WEB_CONCURRENCY 設(shè)置此項(xiàng)以更改worker數(shù)量的默認(rèn)設(shè)置 。默認(rèn)情況下,此值設(shè)置為可用核心數(shù)乘以4。
ENABLE_PIPENV 設(shè)置此變量以使用Pipenv(更高級別的Python打包工具)來管理應(yīng)用程序的依賴關(guān)系。僅當(dāng)您的項(xiàng)目包含正確格式化的Pipfile和Pipfile.lock時(shí),才應(yīng)使用此方法。
APP_SCRIPT 用于從腳本文件運(yùn)行應(yīng)用程序。這應(yīng)該是一個(gè)腳本文件的路徑(默認(rèn)為app.sh除非設(shè)置為null),它將運(yùn)行以啟動(dòng)應(yīng)用程序。

源存儲庫布局

您不需要在現(xiàn)有Python項(xiàng)目的存儲庫中更改任何內(nèi)容。但是,如果存在以下文件,則會(huì)影響構(gòu)建過程的行為:

  • requirements.txt

    要安裝的依賴項(xiàng)列表pip。格式記錄 在這里。

  • Pipfile

    對于requirements.txt的增強(qiáng),pipfile項(xiàng)目正處于活動(dòng)的設(shè)計(jì)和開發(fā)中,格式記錄在這里。將ENABLE_PIPENV環(huán)境變量設(shè)置為true以處理此文件。

  • setup.py

    配置項(xiàng)目的各個(gè)方面,包括安裝依賴項(xiàng),如此 處所述。對于大多數(shù)項(xiàng)目,只需使用requirements.txtPipfile即可。將DISABLE_SETUP_PY_PROCESSING環(huán)境變量設(shè)置為true以跳過此文件的處理。

運(yùn)行策略

由s2i-python生成的容器鏡像按以下的優(yōu)先順序執(zhí)行項(xiàng)目:

  • Gunicorn

    Gunicorn WSGI HTTP服務(wù)器用于在安裝時(shí)為您的應(yīng)用程序提供服務(wù)??梢酝ㄟ^將其列在requirements.txt 文件或文件setup.pyinstall_requires部分中來安裝它。

    如果wsgi.py存儲庫中存在已命名的文件,則它將用作應(yīng)用程序的入口點(diǎn)。這可以用環(huán)境變量APP_MODULE覆蓋。默認(rèn)情況下,此文件存在于Django項(xiàng)目中。

    如果您的Django和Gunicorn都符合要求,您的Django項(xiàng)目將自動(dòng)使用Gunicorn。

  • Django開發(fā)服務(wù)器

    如果您的Django符合要求但沒有Gunicorn,那么您的應(yīng)用程序?qū)⑹褂肈jango提供的開發(fā)Web服務(wù)器。但是,建議不要將其用于生產(chǎn)環(huán)境。

  • Python腳本

    這將用于提供運(yùn)行應(yīng)用程序的Python代碼文件的位置。它將用于通過APP_FILE環(huán)境變量指定Python腳本的路徑,默認(rèn)為app.py命名的文件(如果存在)。該腳本將傳遞給常規(guī)Python解釋器以啟動(dòng)您的應(yīng)用程序。

  • 應(yīng)用腳本文件

    這是執(zhí)行應(yīng)用程序的最常用方法。它將用于通過APP_SCRIPT環(huán)境變量指定可執(zhí)行腳本文件的路徑,默認(rèn)為app.sh命名的文件(如果存在)。腳本直接執(zhí)行以啟動(dòng)您的應(yīng)用程序。

熱部署

熱部署允許您快速make和部署對應(yīng)用程序的更改,而無需生成新的S2I構(gòu)建。如果您使用Django,熱部署開箱即用。

要在使用Gunicorn時(shí)啟用熱部署,請確保在存儲庫中有一個(gè)Gunicorn配置文件, reload選項(xiàng)設(shè)置為true。使用APP_CONFIG環(huán)境變量指定配置文件 。例如,請參閱該oc new-app 命令。您可以使用該 oc set env 命令更新現(xiàn)有對象的環(huán)境變量。

:exclamation:

您應(yīng)該只在開發(fā)或調(diào)試時(shí)使用此選項(xiàng); 建議不要在生產(chǎn)環(huán)境中啟用此功能。

要在正在運(yùn)行的窗格中更改源代碼,請使用以下 oc rsh 命令輸入容器id:

$ oc rsh <pod_id>

進(jìn)入正在運(yùn)行的容器后,當(dāng)前目錄將設(shè)置為 /opt/app-root/src,源代碼位于此處。

也可以看看

可以在https://github.com/sclorg/s2i-python-container上找到Dockerfile和其他來源。在該存儲庫中,您還可以找到其他版本的Python環(huán)境Dockerfiles。CentOS的Dockerfile命名為Dockerfile,RHEL7的Dockerfile命名為Dockerfile.rhel7,RHEL8的命名為Dockerfile.rhel8。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容