从源代码构建PHP应用程序指南
1. 引言
在容器化应用开发中,OpenShift提供了强大的功能来构建和部署应用程序。本文将详细介绍如何在OpenShift中使用Source-to-Image(S2I)策略从源代码构建PHP应用程序,包括环境搭建、S2I过程、构建简单PHP应用以及理解构建过程等内容。
2. 技术环境准备
2.1 环境选择
可以使用Minishift、
oc cluster up
或基于Ansible的标准生产就绪部署等OpenShift安装和开发环境,本文重点介绍
oc cluster up
方法。
2.2 虚拟实验室部署
可以使用以下Vagrantfile来部署虚拟实验室:
Vagrant.configure(2) do |config|
config.vm.define "openshift" do |conf|
conf.vm.box = "centos/7"
conf.vm.network "private_network", ip: "172.24.0.11"
conf.vm.hostname = 'openshift.example.com'
conf.vm.network "forwarded_port", guest: 80, host: 980
conf.vm.network "forwarded_port", guest: 443, host: 9443
conf.vm.network "forwarded_port", guest: 8080, host: 8080
conf.vm.network "forwarded_port", guest: 8443, host: 8443
conf.vm.provider "virtualbox" do |v|
v.memory = 4096
v.cpus = 2
end
conf.vm.provision "shell", inline: $lab_main
end
$lab_main = <<SCRIPT
cat <<EOF >> /etc/hosts
172.24.0.11 openshift.example.com openshift
172.24.0.12 storage.example.com storage nfs
EOF
systemctl disable firewalld
systemctl stop firewalld
yum update -y
yum install -y epel-release git
yum install -y docker
cat << EOF >/etc/docker/daemon.json
{
"insecure-registries": [
"172.30.0.0/16"
]
}
EOF
systemctl start docker
systemctl enable docker
yum -y install centos-release-openshift-origin39
yum -y install origin-clients
oc cluster up
SCRIPT
部署环境的步骤如下:
1. 运行
vagrant up
命令部署虚拟机。
2. 运行
vagrant ssh
连接到虚拟机。
3. 以开发者身份登录以执行非特权操作:
$ oc login -u developer
在登录过程中,可能会遇到服务器证书由未知机构签名的提示,可选择绕过证书检查。输入用户名
developer
和任意密码完成登录。
3. PHP S2I介绍
3.1 S2I概述
OpenShift支持PHP及其他多种运行时的S2I构建。S2I过程通过将应用程序的源代码与基础构建器镜像相结合,生成可直接运行的镜像。构建器是一种特殊的镜像,能够处理特定编程语言或框架的应用程序安装和配置。例如,PHP构建器只能处理PHP源代码,默认不支持Java。OpenShift的内置构建器已经覆盖了大多数常用的编程语言,如Python、Ruby、Java和Node.js等。
3.2 S2I过程步骤
S2I过程包含以下步骤:
1.
确定正确的基础构建器镜像
:该过程依赖于复杂的启发式方法,主要是查找特定的文件和文件扩展名,如Ruby on Rails的
Gemfile
或Python的
requirements.txt
。用户也可以从CLI覆盖构建器镜像所确定的运行时环境。
2.
创建指向应用程序源代码仓库和构建器镜像的ImageStream的BuildConfig
。
3.
从构建器镜像启动构建Pod
。
4.
下载应用程序的源代码
。
5.
使用
tar
实用程序将脚本和应用程序的源代码流式传输到支持的构建器镜像容器中
。
6.
运行组装脚本(构建器镜像提供的脚本优先级最高)
。
7.
将最终镜像保存到内部注册表
。
8.
创建支持应用程序所需的资源
:包括但不限于DeploymentConfig、Service和Pod等。
3.3 环境变量配置
PHP构建器支持使用多个环境变量来更改默认的PHP配置,每个特定构建器的相关信息可在其网页上查看。
3.4 启动构建
可以使用
oc new-app
命令启动构建过程,该命令将存储库URL或本地路径作为参数,同时创建所有必需的OpenShift实体以支持S2I构建和应用程序部署。默认情况下会创建以下OpenShift实体:
| 类型 | 名称 | 描述 |
| ---- | ---- | ---- |
| Pod | <应用程序名称>-<构建序号>-build | 构建应用程序的构建器Pod,生成应用程序镜像并可能生成一些用于后续构建的工件 |
| Pod | <名称>-<构建序号>-
| 构建过程生成的应用程序Pod |
| Service | <名称> | 应用程序服务 |
| 复制控制器 | <名称>-<构建序号> | 应用程序复制控制器,默认维护一个副本 |
| 部署配置 | <名称> | 包含如何部署应用程序的所有信息的部署配置 |
| 镜像流 | <名称> | 构建的镜像的路径 |
| 构建配置 | <名称> | 包含如何构建应用程序的所有必需信息的构建配置 |
| 构建 | <名称>-<构建序号> | 特定的构建,可以多次运行 |
OpenShift不会自动创建路由,如果需要将应用程序暴露给外部,需要运行
oc expose svc <名称>
命令创建路由。
3.5 S2I流程示意图
graph LR
A[确定基础构建器镜像] --> B[创建BuildConfig]
B --> C[启动构建Pod]
C --> D[下载源代码]
D --> E[流式传输代码到容器]
E --> F[运行组装脚本]
F --> G[保存最终镜像]
G --> H[创建支持资源]
4. 构建简单PHP应用程序
4.1 应用程序代码
第一个S2I实验将使用一个非常简单的PHP应用程序,该应用程序使用标准的PHP函数
phpinfo()
显示PHP配置。它由一个单独的
index.php
文件组成,内容如下:
<?php
phpinfo();
?>
该应用程序的代码存储在GitHub仓库
https://github.com/neoncyrex/phpinfo.git
中。
4.2 创建项目
首先,为新实验创建一个单独的项目:
$ oc new-project phpinfo
4.3 克隆仓库
克隆仓库到本地,以便进行更改:
$ git clone https://github.com/neoncyrex/phpinfo.git
4.4 启动构建和部署
使用
oc new-app
命令启动构建和应用程序部署过程:
$ oc new-app phpinfo
该命令会执行以下操作:
1. 使用
phpinfo
作为应用程序源代码的路径。
2. 自动检测编程语言为PHP。
3. 启动构建过程。
4. 创建多个OpenShift资源。
4.5 查看构建状态
构建过程需要一些时间,在第一阶段,可以看到名称中包含
-build
的容器,该容器从PHP构建器镜像部署,负责构建操作:
$ oc get pod
一段时间后,应用程序将可用,应用程序的Pod应处于
Running
状态:
$ oc get pod
4.6 访问应用程序
使用
oc get svc
命令获取应用程序的服务IP,然后使用
curl
命令访问应用程序:
$ oc get svc
$ curl -s http://<服务IP>:8080 | head -n 10
4.7 查看构建摘要
可以使用
oc status
或
oc status -v
命令显示构建过程的摘要:
$ oc status -v
该命令还可以包含一些有用的故障排除信息。另外,还可以使用
oc logs
命令显示具有低级详细信息的构建日志:
$ oc logs bc/phpinfo
5. 理解PHP构建过程
5.1 查看所有实体
可以使用以下命令显示OpenShift为支持构建和部署创建的所有API资源:
$ oc get all
输出结果如下:
| 名称 | 类型 | 来源 | 最新版本 | 状态 | 启动时间 | 持续时间 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| buildconfigs/phpinfo | Source | Git@master | 1 | | | |
| builds/phpinfo-1 | Source | Git@638030d | | Complete | About an hour ago | 34s |
| imagestreams/phpinfo | | 172.30.1.1:5000/phpinfo/phpinfo | latest | | About an hour ago | |
| deploymentconfigs/phpinfo | | | 1 | 1 | 1 | config,image(phpinfo:latest) |
| po/phpinfo-1-build | | | | 0/1 | Completed | 0 | 1h |
| po/phpinfo-1-h9xt5 | | | | 1/1 | Running | 0 | 1h |
| rc/phpinfo-1 | | | 1 | 1 | 1 | | 1h |
| svc/phpinfo | | 172.30.54.195 |
| 8080/TCP,8443/TCP | 1h | |
大部分实体(如Pod、Service、复制控制器和部署配置)在之前的操作中已经比较熟悉。S2I构建策略还使用了以下额外的实体:BuildConfig、Build和ImageStream。
5.2 查看BuildConfig配置
BuildConfig包含了构建应用程序所需的所有信息,可以使用以下命令查看其配置:
$ oc get bc phpinfo -o yaml
输出的配置中,以下字段尤为重要:
-
spec.source.git
:应用程序源代码的仓库URL。
-
spec.strategy.sourceStrategy
:包含将使用哪个构建器的信息。
在本例中,OpenShift使用了
openshift
命名空间中
php:7.0
镜像流的内置构建器。以下是其部分配置示例:
apiVersion: v1
kind: BuildConfig
...
spec:
source:
git:
ref: master
uri: https://github.com/neoncyrex/phpinfo.git
type: Git
strategy:
sourceStrategy:
from:
kind: ImageStreamTag
name: php:7.0
namespace: openshift
type: Source
successfulBuildsHistoryLimit: 5
triggers:
- github:
secret: 5qFv8z-J1me1Mj7Q27rY
type: GitHub
- generic:
secret: -g6nTMasd6TRCMxBvKWz
type: Generic
- type: ConfigChange
- imageChange:
lastTriggeredImageID: centos/php-70-centos7@sha256:eb2631e76762e7c489561488ac1eee966bf55601b6ab31d4fbf60315d99dc740
type: ImageChange
status:
lastVersion: 1
5.3 查看ImageStream配置
可以使用以下命令查看构建器镜像所在的ImageStream配置:
$ oc get is php -o yaml -n openshift
部分配置如下:
apiVersion: v1
kind: ImageStream
...
spec:
lookupPolicy:
local: false
tags:
- annotations:
openshift.io/display-name: PHP 7.0
openshift.io/provider-display-name: Red Hat, Inc.
sampleRepo: https://github.com/openshift/cakephp-ex.git
supports: php:7.0,php
tags: builder,php
version: "7.0"
from:
kind: DockerImage
name: centos/php-70-centos7:latest
...
用于构建应用程序的PHP构建器镜像为
centos/php-70-centos7:latest
。
5.4 构建过程流程图
graph LR
A[确定仓库URL和构建器信息] --> B[下载源代码]
B --> C[使用构建器镜像构建]
C --> D[运行组装脚本]
D --> E[保存最终镜像到内部注册表]
E --> F[创建支持资源]
6. 启动新构建
6.1 查看可用的BuildConfig
如果应用程序的源代码发生了更新,可以使用
oc start-build
命令触发重建过程。首先,需要查看所有可用的BuildConfig:
$ oc get bc
输出结果可能如下:
| 名称 | 类型 | 来源 | 最新版本 |
| ---- | ---- | ---- | ---- |
| phpinfo | Source | Git@master | 1 |
6.2 启动新构建
使用以下命令启动新构建:
$ oc start-build phpinfo
启动新构建后,可以使用
oc get pod
命令查看构建状态:
$ oc get pod
在构建完成后,应用程序将被重新部署。可以再次使用
oc get pod
命令确认应用程序的Pod处于
Running
状态。
6.3 查看最新构建版本
使用以下命令查看最新的构建版本:
$ oc get bc
输出结果可能如下:
| 名称 | 类型 | 来源 | 最新版本 |
| ---- | ---- | ---- | ---- |
| phpinfo | Source | Git@master | 2 |
6.4 查看所有构建记录
OpenShift会保留所有构建的记录,使用以下命令可以查看:
$ oc get build
输出结果示例:
| 名称 | 类型 | 来源 | 状态 | 启动时间 | 持续时间 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| phpinfo-1 | Source | Git@638030d | Complete | 2 hours ago | 34s |
| phpinfo-2 | Source | Git@638030d | Complete | About a minute ago | 7s |
6.5 清理环境
使用以下代码可以清理环境,为下一个实验做准备:
$ oc delete all --all
$ oc delete project phpinfo
$ oc project myproject
7. 总结
通过本文的介绍,我们了解了在OpenShift中使用S2I策略从源代码构建PHP应用程序的详细过程,包括环境搭建、S2I过程、构建简单PHP应用、理解构建过程以及启动新构建等内容。掌握这些知识可以帮助我们更高效地在OpenShift平台上开发和部署PHP应用程序。在实际应用中,可以根据具体需求对构建过程进行定制和优化,以满足不同的业务场景。
超级会员免费看

被折叠的 条评论
为什么被折叠?



