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.4和 3.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í)行以下步驟:
- 從構(gòu)建器(bulid)鏡像啟動容器。
- 下載應(yīng)用程序源氯庆。
- 將腳本和應(yīng)用程序源流式傳輸?shù)綐?gòu)建器鏡像容器中蹭秋。
- 運(yùn)行assemble 腳本(來自構(gòu)建器鏡像)。
- 保存最終鏡像堤撵。
有關(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.txt
或Pipfile
即可互婿。將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.py
的install_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
平匈。