2.3. 使用 CLI 创建应用程序
您可以使用 OpenShift Container Platform CLI,从包含源代码或二进制代码、镜像和模板的组件创建 OpenShift Container Platform 应用程序。
由 new-app
创建的对象集合取决于作为输入传递的工件,如输入源存储库、镜像或模板。
2.3.1. 从源代码创建应用程序
您可以使用 new-app
命令,从本地或远程 Git 存储库中的源代码创建应用程序。
new-app
命令会创建一个构建配置,其本身会从您的源代码中创建一个新的应用程序镜像。new-app
命令通常还会创建用来部署新镜像的部署配置,以及为运行您的镜像的部署提供负载均衡访问的服务。
OpenShift Container Platform 会自动检测要使用 Pipeline
还是 Source
构建策略,如果进行 Source
构建,则还检测适当的语言构建器镜像。
2.3.1.1. 本地
从本地目录中的 Git 存储库创建应用程序:
$ oc new-app /<path to source code>
如果使用本地 Git 存储库,该存储库必须具有一个名为 origin
的远程源,指向可由 OpenShift Container Platform 集群访问的 URL。如果没有可识别的远程源,运行 new-app
命令将创建一个二进制构建。
2.3.1.2. 远程
从远程 Git 存储库创建新应用程序:
$ oc new-app https://github.com/sclorg/cakephp-ex
从私有远程 Git 存储库创建应用程序:
$ oc new-app https://github.com/youruser/yourprivaterepo --source-secret=yoursecret
如果使用私有远程 Git 存储库,您可以使用 --source-secret
标志指定一个现有源克隆 secret,此 secret 将注入到 BuildConfig
中以访问存储库。
您可以通过指定 --context-dir
标志来使用源代码存储库的子目录。从远程 Git 存储库和上下文子目录创建应用程序:
$ oc new-app https://github.com/sclorg/s2i-ruby-container.git \ --context-dir=2.0/test/puma-test-app
另外,在指定远程 URL 时,您可以通过在 URL 末尾附加 #<branch_name>
来指定要使用的 Git 分支:
$ oc new-app https://github.com/openshift/ruby-hello-world.git#beta4
2.3.1.3. 构建策略检测
在创建新应用程序时,如果源存储库的根目录或指定上下文目录中存在 Jenkinsfile
,则 OpenShift Container Platform 会生成 Pipeline 构建策略。
否则,它会生成 Source 构建策略。
通过将 --strategy
标志设为 pipeline
或 source
,即可覆盖构建策略。
$ oc new-app /home/user/code/myapp --strategy=docker
oc
命令要求包含构建源的文件在远程 Git 存储库中可用。对于所有 Source 构建,您必须使用 git remote -v
。
2.3.1.4. 语言检测
如果使用 Source
构建策略,new-app
会尝试根据存储库根目录或指定上下文目录中是否存在特定的文件,确定要使用的语言构建器:
语言 | 文件 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
检测了语言后,new-app
会在 OpenShift Container Platform 服务器上搜索具有与所检测语言匹配的 suppors
注解的镜像流标签,或与所检测语言的名称匹配的镜像流。如果找不到匹配项,new-app
会在 Docker Hub registry 中搜索名称上与所检测语言匹配的镜像。
您可以通过指定镜像(镜像流或容器规格)和存储库(以 ~
作为分隔符),来覆盖构建器用于特定源存储库的镜像。请注意,如果进行这一操作,就不会执行构建策略检测和语言检测。
例如,使用 myproject/my-ruby
镜像流以及位于远程存储库中的源:
$ oc new-app myproject/my-ruby~https://github.com/openshift/ruby-hello-world.git
使用 `openshift/ruby-20-centos7:latest ` 容器镜像流以及本地存储库中的源:
$ oc new-app openshift/ruby-20-centos7:latest~/home/user/code/my-ruby-app
语言检测需要在本地安装 Git 客户端,以便克隆并检查您的存储库。如果 Git 不可用,您可以使用 <image>~<repository>
语法指定要与存储库搭配使用的构建器镜像,以避免语言检测步骤。
调用 -i <image> <repository>
要求 new-app
尝试克隆 repository
,从而能判断其工件类型;如果 Git 不可用,此操作会失败。
调用 -i <image> --code <repository>
要求 new-app
克隆 repository
,从而能判断 image
应用作源代码的构建器,还是另外部署(使用数据库镜像时)。
2.3.2. 从镜像创建应用程序
您可以从现有镜像部署应用程序。镜像可以来自 OpenShift Container Platform 服务器中的镜像流、特定 registry 中的镜像或本地 Docker 服务器中的镜像。
new-app
命令尝试确定传递给它的参数中指定的镜像类型。但是,您可以使用 --docker-image
或 -i|--image
参数明确告知 new-app
镜像是容器镜像或镜像流。
如果指定本地 Docker 存储库中的镜像,必须确保同一镜像可供 OpenShift Container Platform 节点使用。
2.3.2.1. DockerHub MySQL 镜像
从 Dockerhub MySQL 镜像创建应用程序,例如:
$ oc new-app mysql
2.3.2.2. 私有 registry 中的镜像
使用私有 registry 中的镜像创建应用程序时,请指定完整容器镜像规格:
$ oc new-app myregistry:5000/example/myimage
2.3.2.3. 现有镜像流和可选镜像流标签
从现有镜像流和可选镜像流标签创建应用程序:
$ oc new-app my-stream:v1
2.3.3. 从模板创建应用程序
您可以使用之前存储的模板或模板文件创建应用程序,方法是将模板名称指定为参数。例如,您可以存储一个示例应用程序模板,并使用它来创建应用程序。
从存储的模板创建应用程序,例如:
$ oc create -f examples/sample-app/application-template-stibuild.json $ oc new-app ruby-helloworld-sample
要直接使用本地文件系统中的模板,而不先将它保存到 OpenShift Container Platform 中,请使用 -f|--file
参数。例如:
$ oc new-app -f examples/sample-app/application-template-stibuild.json
2.3.3.1. 模板参数
在基于模板创建应用程序时,请使用 -p|--param
参数来设置模板定义的参数值:
$ oc new-app ruby-helloworld-sample \ -p ADMIN_USERNAME=admin -p ADMIN_PASSWORD=mypassword
您可以将参数保存到文件中,然后在实例化模板时通过 --param-file
来使用该文件。如果要从标准输入中读取参数,请使用 --param-file=-
:
$ cat helloworld.params ADMIN_USERNAME=admin ADMIN_PASSWORD=mypassword $ oc new-app ruby-helloworld-sample --param-file=helloworld.params $ cat helloworld.params | oc new-app ruby-helloworld-sample --param-file=-
2.3.4. 修改应用程序创建
new-app
命令生成用于构建、部署和运行所创建应用程序的 OpenShift Container Platform 对象。通常情况下,这些对象是在当前项目中创建的,并分配有从输入源存储库或输入镜像中获得的名称。但是,您可以使用 new-app
修改这种行为。
对象 | 描述 |
---|---|
|
为命令行中指定的每个源存储库创建一个 |
|
对于 |
|
创建一个 |
|
|
其他 | 根据模板,可在实例化模板时生成其他对象。 |
2.3.4.1. 指定环境变量
从模板、源或镜像生成应用程序时,您可以在运行时使用 -e|--env
参数将环境变量传递给应用程序容器:
$ oc new-app openshift/postgresql-92-centos7 \ -e POSTGRESQL_USER=user \ -e POSTGRESQL_DATABASE=db \ -e POSTGRESQL_PASSWORD=password
这些变量可使用 --env-file
参数从文件中读取:
$ cat postgresql.env POSTGRESQL_USER=user POSTGRESQL_DATABASE=db POSTGRESQL_PASSWORD=password $ oc new-app openshift/postgresql-92-centos7 --env-file=postgresql.env
另外,也可使用 --env-file=-
在标准输入上给定环境变量:
$ cat postgresql.env | oc new-app openshift/postgresql-92-centos7 --env-file=-
在 new-app
处理过程中创建的任何 BuildConfig
对象,都不能使用通过 -e|--env
或 --env-file
参数传递的环境变量进行更新。
2.3.4.2. 指定构建环境变量
从模板、源或镜像生成应用程序时,您可以在运行时使用 --build-env
参数将环境变量传递给构建容器:
$ oc new-app openshift/ruby-23-centos7 \ --build-env HTTP_PROXY=http://myproxy.net:1337/ \ --build-env GEM_HOME=~/.gem
这些变量可使用 --build-env-file
参数从文件中读取:
$ cat ruby.env HTTP_PROXY=http://myproxy.net:1337/ GEM_HOME=~/.gem $ oc new-app openshift/ruby-23-centos7 --build-env-file=ruby.env
另外,也可使用 --build-env-file=-
在标准输入上给定环境变量:
$ cat ruby.env | oc new-app openshift/ruby-23-centos7 --build-env-file=-
2.3.4.3. 指定标签
从源、镜像或模板生成应用程序时,您可以使用 -l|--label
参数为创建的对象添加标签。借助标签,您可以轻松地集中选择、配置和删除与应用程序关联的对象。
$ oc new-app https://github.com/openshift/ruby-hello-world -l name=hello-world
2.3.4.4. 查看输出但不创建
要查看运行 new-app
命令的空运行,您可以使用 -o|--output
参数及 yaml
或 json
值。然后,您可以使用输出结果预览创建的对象,或将其重定向到可以编辑的文件。满意之后,您可以使用 oc create
创建 OpenShift Container Platform 对象。
将 new-app
工件输出到文件中,编辑工件,再创建工件:
$ oc new-app https://github.com/openshift/ruby-hello-world \ -o yaml > myapp.yaml $ vi myapp.yaml $ oc create -f myapp.yaml
2.3.4.5. 使用其他名称创建对象
new-app
创建的对象通常命名自用于生成它们的源存储库或镜像。您可以通过在命令中添加 --name
标志来设置生成的对象名称:
$ oc new-app https://github.com/openshift/ruby-hello-world --name=myapp
2.3.4.6. 在另一项目中创建对象
通常,new-app
会在当前项目中创建对象。不过,您可以使用 -n|--namespace
参数在另一项目中创建对象:
$ oc new-app https://github.com/openshift/ruby-hello-world -n myproject
2.3.4.7. 创建多个对象
new-app
命令允许创建多个应用程序,为 new-app
指定多个参数便可实现。命令行中指定的标签将应用到单一命令创建的所有对象。环境变量应用到从源或镜像创建的所有组件。
从源存储库和 Docker Hub 镜像创建应用程序:
$ oc new-app https://github.com/openshift/ruby-hello-world mysql
如果以独立参数形式指定源代码存储库和构建器镜像,new-app
会将构建器镜像用作源代码存储库的构建器。如果这不是您的用意,请使用 ~
分隔符为源指定所需的构建器镜像。
2.3.4.8. 在单个 Pod 中对镜像和源进行分组
new-app
命令允许在一个 Pod 中一起部署多个镜像。要指定哪些镜像要分组在一起,请使用 +
分隔符。也可使用 --group
命令行参数来指定应分组在一起的镜像。要将源存储库中构建的镜像与其他镜像一起分组,请在组中指定其构建器镜像:
$ oc new-app ruby+mysql
将通过源构建的镜像和外部镜像一起部署:
$ oc new-app \ ruby~https://github.com/openshift/ruby-hello-world \ mysql \ --group=ruby+mysql
2.3.4.9. 搜索镜像、模板和其他输入
要搜索镜像、模板和 oc new-app
命令的其他输入,使用 --search
和 --list
。例如,查找包含 PHP 的所有镜像或模板:
$ oc new-app --search php