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)鏡像啟動容器。
  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é)啟動應(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派撕。有一個示例 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)該是一個腳本文件的路徑(默認(rèn)為app.sh除非設(shè)置為null)痊剖,它將運(yùn)行以啟動應(yīng)用程序。

源存儲庫布局

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

  • requirements.txt

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

  • Pipfile

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

  • setup.py

    配置項(xiàng)目的各個方面,包括安裝依賴項(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)目將自動使用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解釋器以啟動您的應(yīng)用程序义图。

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

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

熱部署

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

要在使用Gunicorn時(shí)啟用熱部署,請確保在存儲庫中有一個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)系作者
  • 序言:七十年代末框沟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吐葱,更是在濱河造成了極大的恐慌街望,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弟跑,死亡現(xiàn)場離奇詭異灾前,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)孟辑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門哎甲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饲嗽,你說我怎么就攤上這事炭玫。” “怎么了貌虾?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵吞加,是天一觀的道長。 經(jīng)常有香客問我尽狠,道長衔憨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任袄膏,我火速辦了婚禮践图,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沉馆。我一直安慰自己码党,他們只是感情好德崭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著揖盘,像睡著了一般眉厨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扣讼,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天缺猛,我揣著相機(jī)與錄音,去河邊找鬼椭符。 笑死荔燎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的销钝。 我是一名探鬼主播有咨,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒸健!你這毒婦竟也來了座享?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤似忧,失蹤者是張志新(化名)和其女友劉穎渣叛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盯捌,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淳衙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饺著。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箫攀。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖幼衰,靈堂內(nèi)的尸體忽然破棺而出靴跛,到底是詐尸還是另有隱情,我是刑警寧澤渡嚣,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布梢睛,位于F島的核電站,受9級特大地震影響识椰,放射性物質(zhì)發(fā)生泄漏扬绪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一裤唠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莹痢,春花似錦种蘸、人聲如沸墓赴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诫硕。三九已至,卻和暖如春刊侯,著一層夾襖步出監(jiān)牢的瞬間章办,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工滨彻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藕届,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓亭饵,卻偏偏與公主長得像休偶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辜羊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容