$ oc new-app /<path to source code>
您可以使用 OpenShift Container Platform 命令行界面 (CLI) 从包含源代码或二进制代码、镜像和模板的组件创建 OpenShift Container Platform 应用程序。
new-app
创建的对象集取决于作为输入传递的工件:源代码库、镜像或模板。
使用 new-app
命令,您可以从本地或远程 Git 仓库中的源代码创建应用程序。
new-app
命令创建一个构建配置,该配置本身会从您的源代码创建一个新的应用程序镜像。new-app
命令通常还会创建一个 Deployment
对象来部署新镜像,以及一个服务来提供对运行您镜像的部署的负载均衡访问。
OpenShift Container Platform 会自动检测应该使用流水线、源代码或 Docker 构建策略,并且在源代码构建的情况下,会检测合适的语言构建器镜像。
要从本地目录中的 Git 仓库创建应用程序
$ oc new-app /<path to source code>
如果您使用本地 Git 仓库,则该仓库必须具有名为 |
要从远程 Git 仓库创建应用程序
$ oc new-app https://github.com/sclorg/cakephp-ex
要从私有远程 Git 仓库创建应用程序
$ oc new-app https://github.com/youruser/yourprivaterepo --source-secret=yoursecret
如果您使用私有远程 Git 仓库,您可以使用 |
您可以通过指定 --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
OpenShift Container Platform 通过检测某些文件来自动确定要使用的构建策略
在创建新应用程序时,如果源代码仓库的根目录或指定的上下文目录中存在 Jenkinsfile,则 OpenShift Container Platform 将生成流水线构建策略。
|
在创建新应用程序时,如果源代码仓库的根目录或指定的上下文目录中存在 Dockerfile,则 OpenShift Container Platform 将生成 Docker 构建策略。
如果未检测到 Jenkinsfile 或 Dockerfile,则 OpenShift Container Platform 将生成源代码构建策略。
通过将 --strategy
标志设置为 docker
、pipeline
或 source
来覆盖自动检测到的构建策略。
$ oc new-app /home/user/code/myapp --strategy=docker
|
如果您使用源代码构建策略,new-app
将尝试通过仓库的根目录或指定上下文目录中某些文件的存在来确定要使用的语言构建器。
语言 | 文件 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
检测到语言后,new-app
将在 OpenShift Container Platform 服务器上搜索具有与检测到的语言匹配的 supports
注释的镜像流标签,或者与检测到的语言名称匹配的镜像流。如果找不到匹配项,new-app
将在 Docker Hub 注册表 中搜索与检测到的语言基于名称匹配的镜像。
您可以通过指定镜像(镜像流或容器规范)和带有 ~
分隔符的仓库来覆盖构建器对特定源代码仓库使用的镜像。请注意,如果这样做,则不会执行构建策略检测和语言检测。
例如,要将 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 不可用,您可以通过使用
|
您可以从现有镜像部署应用。镜像可以来自 OpenShift Container Platform 服务器中的镜像流、特定注册表中的镜像或本地 Docker 服务器中的镜像。
new-app
命令尝试确定传递给它的参数中指定的镜像类型。但是,您可以使用 --docker-image
参数显式地告诉 new-app
镜像是容器镜像,或者使用 -i|--image-stream
参数指定它是镜像流。
如果您指定来自本地 Docker 仓库的镜像,则必须确保 OpenShift Container Platform 集群节点上也可用相同的镜像。 |
您可以通过指定模板名称作为参数,从先前存储的模板或模板文件创建应用。例如,您可以存储一个示例应用模板并使用它来创建应用。
将应用模板上传到您当前项目的模板库。以下示例从名为 examples/sample-app/application-template-stibuild.json
的文件中上传应用模板:
$ oc create -f examples/sample-app/application-template-stibuild.json
然后,通过引用应用模板创建一个新的应用。在此示例中,模板名称为 ruby-helloworld-sample
:
$ oc new-app ruby-helloworld-sample
要通过引用本地文件系统中的模板文件(无需先将其存储在 OpenShift Container Platform 中)来创建新应用,请使用 -f|--file
参数。例如:
$ oc new-app -f examples/sample-app/application-template-stibuild.json
当基于模板创建应用时,使用 -p|--param
参数设置模板定义的参数值:
$ oc new-app ruby-helloworld-sample \
-p ADMIN_USERNAME=admin -p ADMIN_PASSWORD=mypassword
您可以将参数存储在文件中,然后在实例化模板时使用 --param-file
使用该文件。如果要从标准输入读取参数,请使用 --param-file=-
。以下是一个名为 helloworld.params
的示例文件:
ADMIN_USERNAME=admin
ADMIN_PASSWORD=mypassword
在实例化模板时引用文件中的参数:
$ oc new-app ruby-helloworld-sample --param-file=helloworld.params
new-app
命令生成 OpenShift Container Platform 对象,这些对象构建、部署和运行创建的应用。通常情况下,这些对象是在当前项目中创建的,并分配从输入源代码库或输入镜像派生的名称。但是,使用 new-app
,您可以修改此行为。
对象 | 描述 |
---|---|
|
为命令行中指定的每个源代码库创建一个 |
|
对于 |
|
创建 |
|
|
其他 |
根据模板,在实例化模板时可以生成其他对象。 |
从模板、源代码或镜像生成应用时,可以使用 -e|--env
参数在运行时将环境变量传递给应用容器:
$ oc new-app openshift/postgresql-92-centos7 \
-e POSTGRESQL_USER=user \
-e POSTGRESQL_DATABASE=db \
-e POSTGRESQL_PASSWORD=password
也可以使用 --env-file
参数从文件中读取变量。以下是一个名为 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=-
作为 |
从模板、源代码或镜像生成应用时,可以使用 --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
参数从文件中读取变量。以下是一个名为 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=-
从源代码、镜像或模板生成应用时,可以使用 -l|--label
参数向创建的对象添加标签。标签使您可以轻松地集体选择、配置和删除与应用关联的对象。
$ oc new-app https://github.com/openshift/ruby-hello-world -l name=hello-world
要查看运行 new-app
命令的预演,可以使用带 yaml
或 json
值的 -o|--output
参数。然后,您可以使用输出预览创建的对象,或将其重定向到您可以编辑的文件。满意后,您可以使用 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
new-app
创建的对象通常以用于生成它们的源代码库或镜像命名。您可以通过向命令添加 --name
标志来设置生成的对象的名称:
$ oc new-app https://github.com/openshift/ruby-hello-world --name=myapp
通常情况下,new-app
在当前项目中创建对象。但是,您可以使用 -n|--namespace
参数在不同的项目中创建对象:
$ oc new-app https://github.com/openshift/ruby-hello-world -n myproject
new-app
命令允许通过向 new-app
指定多个参数来创建多个应用。命令行中指定的标签适用于单个命令创建的所有对象。环境变量适用于从源代码或镜像创建的所有组件。
要从源代码库和 Docker Hub 镜像创建应用:
$ oc new-app https://github.com/openshift/ruby-hello-world mysql
如果源代码库和构建器镜像作为单独的参数指定,则 |
new-app
命令允许在一个 Pod 中一起部署多个镜像。要指定要组合在一起的镜像,请使用 +
分隔符。--group
命令行参数也可用于指定应组合在一起的镜像。要将从源代码仓库构建的镜像与其他镜像组合在一起,请在组中指定其构建器镜像。
$ oc new-app ruby+mysql
要一起部署从源代码构建的镜像和外部镜像
$ oc new-app \
ruby~https://github.com/openshift/ruby-hello-world \
mysql \
--group=ruby+mysql
要搜索 oc new-app
命令的镜像、模板和其他输入,请添加 --search
和 --list
标志。例如,要查找所有包含 PHP 的镜像或模板
$ oc new-app --search php
要使用 oc new-app
设置导入模式,请添加 --import-mode
标志。此标志可以附加 Legacy
或 PreserveOriginal
,分别为用户提供使用单个子清单或所有清单创建镜像流的选项。
$ oc new-app --image=registry.redhat.io/ubi8/httpd-24:latest --import-mode=Legacy --name=test
$ oc new-app --image=registry.redhat.io/ubi8/httpd-24:latest --import-mode=PreserveOriginal --name=test