centos/python-35-centos7本容器镜像为 Python 3.5 应用提供 S2I(源码构建工具)基础镜像,支持基于 RHEL 或 CentOS 的构建环境。用户可根据需求选择对应系统的镜像,具体来源如下:
registry.access.redhat.com/rhscl/python-35-rhel7registry.access.redhat.com/rhel8/python-35centos/python-35-centos7构建后的镜像可通过 Docker 运行。
Python 3.5 容器镜像作为基础平台,用于构建和运行各类 Python 3.5 应用及框架。Python 语言具有易学性、强大的编程能力,具备高效的高级数据结构、简洁的面向对象编程方法,其优雅的语法、动态类型及解释型特性,使其成为多数平台下脚本编写和快速应用开发的理想选择。
容器内置 npm 工具,方便用户为 Web 应用安装 JavaScript 模块。注意:镜像不保证 npm 或 nodejs 的具体版本,版本可能随时变更,nodejs 仅为支持 npm 运行而包含。
通过独立 S2I 工具构建示例应用(如 python-sample-app),并使用 Docker 运行生成的镜像,步骤如下:
bash# 构建应用镜像 s2i build [***] --context-dir=3.5/test/setup-test-app/ rhscl/python-35-rhel7 python-sample-app # 运行镜像(映射 8080 端口) docker run -p 8080:8080 python-sample-app
bash# 构建应用镜像 s2i build [***] --context-dir=3.5/test/setup-test-app/ rhel8/python-35 python-sample-app # 运行镜像(映射 8080 端口) docker run -p 8080:8080 python-sample-app
bash# 构建应用镜像 s2i build [***] --context-dir=3.5/test/setup-test-app/ centos/python-35-centos7 python-sample-app # 运行镜像(映射 8080 端口) docker run -p 8080:8080 python-sample-app
构建并运行后,通过以下命令访问应用:
bashcurl 127.0.0.1:8080
可在源码仓库的 .s2i/environment 文件中定义键值对,设置以下环境变量:
APP_SCRIPT指定启动应用的脚本文件路径。默认值为 app.sh(设为 null 可取消默认),脚本将直接执行以启动应用。
APP_FILE指定启动应用的 Python 脚本路径。默认值为 app.py(设为 null 可取消默认),脚本将通过 Python 解释器执行。
APP_MODULE用于通过 Gunicorn 启动应用,格式为 MODULE_NAME:VARIABLE_NAME(MODULE_NAME 为模块路径,VARIABLE_NAME 为 WSGI 可调用对象)。若未指定,Gunicorn 默认查找 application 可调用对象;若未设置 APP_MODULE,构建脚本会检查项目中是否存在 wsgi.py 并使用。
若通过 setup.py 安装应用,MODULE_NAME 可从该文件读取(示例见 setup-test-app)。
APP_HOME指定应用所在的子目录路径,该目录需包含 wsgi.py(Gunicorn)或 manage.py(Django)。未设置时,构建和运行脚本使用项目根目录。
APP_CONFIGGunicorn 配置文件的路径,需为有效的 Python 文件(配置格式见 Gunicorn 文档)。
DISABLE_MIGRATE设为非空值可禁用容器运行时执行 manage.py migrate(仅影响 Django 项目)。数据库迁移建议参考 OpenShift 博客文章,避免多 pod 同时执行迁移导致数据库损坏。
DISABLE_COLLECTSTATIC设为非空值可禁用构建过程中执行 manage.py collectstatic(仅影响 Django 项目)。
DISABLE_SETUP_PY_PROCESSING设为非空值可跳过 setup.py 处理(适用于通过 requirements.txt 或 -e . 管理依赖的场景)。
ENABLE_PIPENV设为非空值可使用 Pipenv 管理依赖(需项目包含 Pipfile 和 Pipfile.lock)。启用后会自动升级 pip 至最新版(以满足 Pipenv 依赖)。
PIP_INDEX_URL指定 pip 安装依赖时的自定义索引 URL 或镜像(仅影响 requirements.txt 中的依赖;Pipenv 忽略此变量)。
UPGRADE_PIP_TO_LATEST设为非空值可在安装依赖前升级 pip、setuptools 和 wheel 至最新版。未设置时使用平台默认版本。
WEB_CONCURRENCY调整 Gunicorn 的 worker 数量。默认值为 CPU 核心数 × 2(上限 12)。
现有 Python 项目无需修改即可使用,但以下文件会影响构建行为:
requirements.txt通过 pip 安装的依赖列表,格式见 pip 文档。
Pipfile替代 requirements.txt 的依赖管理文件(设计与开发见 Pipfile 文档)。需设置 ENABLE_PIPENV 环境变量以启用处理。
setup.py配置项目元数据及依赖安装(见 Python 打包文档)。多数场景下,requirements.txt 或 Pipfile 已足够;设 DISABLE_SETUP_PY_PROCESSING 可跳过处理。
S2I 构建的容器镜像按以下优先级执行应用:
若依赖中安装了 Gunicorn(通过 requirements.txt 或 setup.py 的 install_requires 指定),则使用 Gunicorn 作为 WSGI 服务器。
wsgi.py(Django 项目默认包含),则以此为入口;可通过 APP_MODULE 覆盖。若依赖中包含 Django 但未安装 Gunicorn,则使用 Django 开发服务器(不建议生产环境使用)。
若指定 APP_FILE 或项目存在 app.py,则通过 Python 解释器执行该脚本。
若指定 APP_SCRIPT 或项目存在 app.sh,则直接执行该脚本。
默认支持热部署,无需额外配置。
需在项目中添加 Gunicorn 配置文件,设置 reload 选项为 true,并通过 APP_CONFIG 环境变量指定配置文件路径。
通过 Docker exec 命令进入容器修改源码:
bashdocker exec -it <容器ID> /bin/bash
进入容器后,当前目录为 /opt/app-root/src(源码存放路径)。
Dockerfile,RHEL7 为 Dockerfile.rhel7,RHEL8 为 Dockerfile.rhel8。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务