3.3. CLI を使用したアプリケーションの作成
OpenShift Container Platform CLI を使用して、ソースまたはバイナリーコード、イメージおよびテンプレートを含むコンポーネントから OpenShift Container Platform アプリケーションを作成できます。
new-app
で作成したオブジェクトのセットは、ソースリポジトリー、イメージまたはテンプレートなどのインプットとして渡されるアーティファクトによって異なります。
3.3.1. ソースコードからのアプリケーションの作成
new-app
コマンドを使用して、ローカルまたはリモート Git リポジトリーのソースコードからアプリケーションを作成できます。
new-app
コマンドは、ビルド設定を作成し、これはソースコードから新規のアプリケーションイメージを作成します。new-app
コマンドは通常、Deployment
オブジェクトを作成して新規のイメージをデプロイするほか、サービスを作成してイメージを実行するデプロイメントへの負荷分散したアクセスを提供します。
OpenShift Container Platform は、パイプライン、ソース、または docker ビルドストラテジーのいずれを使用すべきかを自動的に検出します。また、ソースビルドの場合は、適切な言語のビルダーイメージを検出します。
3.3.1.1. Local
ローカルディレクトリーの Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app /<path to source code>
ローカル Git リポジトリーを使用する場合には、リポジトリーで OpenShift Container Platform クラスターがアクセス可能な URL を参照する origin
という名前のリモートリポジトリーが必要です。認識されているリモートがない場合は、new-app
コマンドを実行してバイナリービルドを作成します。
3.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
フラグを使用して、既存のソースクローンのシークレットを指定できます。このシークレットは、ビルド設定に挿入され、リポジトリーにアクセスできるようになります。
--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
3.3.1.3. ビルドストラテジーの検出
OpenShift Container Platform は、特定のファイルを検出し、使用するビルドストラテジーを自動的に判別します。
新規アプリケーションの作成時に Jenkinsfile がソースリポジトリーのルート または指定されたコンテキストディレクトリーに存在する場合に、OpenShift Container Platform はパイプラインビルドストラテジーを生成します。
注記pipeline
ビルドストラテジーは非推奨になりました。代わりに Red Hat OpenShift Pipelines を使用することを検討してください。- 新規アプリケーションの作成時に Dockerfile がソースリポジトリーのルートまたは指定されたコンテキストディレクトリーに存在する場合に、OpenShift Container Platform は docker ビルドストラテジーを生成します。
- Jenkins ファイルも Dockerfile も検出されない場合、OpenShift Container Platform はソースビルドストラテジーを生成します。
--strategy
フラグを docker
、pipeline
、または source
に設定して、自動的に検出されたビルドストラテジーを上書きします。
$ oc new-app /home/user/code/myapp --strategy=docker
oc
コマンドを使用するには、ビルドソースを含むファイルがリモートの git リポジトリーで利用可能である必要があります。すべてのソースビルドには、git remote -v
を使用する必要があります。
3.3.1.4. 言語の検出
ソースビルドストラテジーを使用する場合に、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 が使用できない場合、<image>~<repository>
構文を指定し、リポジトリーで使用するビルダーイメージを指定して言語の検出手順を回避することができます。
-i <image> <repository>
呼び出しでは、アーティファクトのタイプを判別するために new-app
が repository
のクローンを試行する必要があります。そのため、これは Git が利用できない場合には失敗します。
-i <image> --code <repository>
呼び出しでは、image
がソースコードのビルダーとして使用されるか、またはデータベースイメージの場合のように別個にデプロイされる必要があるかどうかを判別するために、new-app
が repository
のクローンを作成する必要があります。
3.3.2. イメージからアプリケーションを作成する方法
既存のイメージからアプリケーションのデプロイが可能です。イメージは、OpenShift Container Platform サーバー内のイメージストリーム、指定したレジストリー内のイメージ、またはローカルの Docker サーバー内のイメージから取得できます。
new-app
コマンドは、渡された引数に指定されたイメージの種類を判断しようとします。ただし、イメージが、--docker-image
引数を使用したコンテナーイメージなのか、または -i|--image-stream
引数を使用したイメージストリームなのかを、new-app
に明示的に指示できます。
ローカル Docker リポジトリーからイメージを指定した場合、同じイメージが OpenShift Container Platform のクラスターノードでも利用できることを確認する必要があります。
3.3.2.1. Docker Hub MySQL イメージ
たとえば、Docker Hub MySQL イメージからアプリケーションを作成するには、以下を実行します。
$ oc new-app mysql
3.3.2.2. プライベートレジストリーのイメージ
プライベートのレジストリーのイメージを使用してアプリケーションを作成し、コンテナーイメージの仕様全体を以下のように指定します。
$ oc new-app myregistry:5000/example/myimage
3.3.2.3. 既存のイメージストリームおよびオプションのイメージストリームタグ
既存のイメージストリームおよび任意のイメージストリームタグでアプリケーションを作成します。
$ oc new-app my-stream:v1
3.3.3. テンプレートからのアプリケーションの作成
テンプレート名を引数として指定することで、事前に保存したテンプレートまたはテンプレートファイルからアプリケーションを作成することができます。たとえば、サンプルアプリケーションテンプレートを保存し、これを利用してアプリケーションを作成できます。
現在のプロジェクトのテンプレートライブラリーにアプリケーションテンプレートをアップロードします。以下の例では、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
3.3.3.1. テンプレートパラメーター
テンプレートをベースとするアプリケーションを作成する場合、以下の -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
3.3.4. アプリケーション作成の変更
new-app
コマンドは、OpenShift Container Platform オブジェクトを生成します。このオブジェクトにより、作成されるアプリケーションがビルドされ、デプロイされ、実行されます。通常、これらのオブジェクトは現在のプロジェクトに作成され、これらのオブジェクトには入力ソースリポジトリーまたはインプットイメージから派生する名前が割り当てられます。ただし、new-app
でこの動作を変更することができます。
オブジェクト | 説明 |
---|---|
|
|
|
|
|
|
|
|
その他 | テンプレートのインスタンスを作成する際に、他のオブジェクトをテンプレートに基づいて生成できます。 |
3.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
引数を使用してファイルから読み取ることもできます。以下は、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=-
-e|--env
または --env-file
引数で渡される環境変数では、new-app
処理の一環として作成される BuildConfig
オブジェクトは更新されません。
3.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
引数を使用してファイルから読み取ることもできます。以下は、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=-
3.3.4.3. ラベルの指定
ソース、イメージ、またはテンプレートからアプリケーションを生成する場合、-l|--label
引数を使用し、作成されたオブジェクトにラベルを追加できます。ラベルを使用すると、アプリケーションに関連するオブジェクトを一括で選択、設定、削除することが簡単になります。
$ oc new-app https://github.com/openshift/ruby-hello-world -l name=hello-world
3.3.4.4. 作成前の出力の表示
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
3.3.4.5. 別名でのオブジェクトの作成
通常 new-app
で作成されるオブジェクトの名前はソースリポジトリーまたは生成に使用されたイメージに基づいて付けられます。コマンドに --name
フラグを追加することで、生成されたオブジェクトの名前を設定できます。
$ oc new-app https://github.com/openshift/ruby-hello-world --name=myapp
3.3.4.6. 別のプロジェクトでのオブジェクトの作成
通常 new-app
は現在のプロジェクトにオブジェクトを作成します。ただし、-n|--namespace
引数を使用して、別のプロジェクトにオブジェクトを作成することができます。
$ oc new-app https://github.com/openshift/ruby-hello-world -n myproject
3.3.4.7. 複数のオブジェクトの作成
new-app
コマンドは、複数のパラメーターを new-app
に指定して複数のアプリケーションを作成できます。コマンドラインで指定するラベルは、単一コマンドで作成されるすべてのオブジェクトに適用されます。環境変数は、ソースまたはイメージから作成されたすべてのコンポーネントに適用されます。
ソースリポジトリーおよび Docker Hub イメージからアプリケーションを作成するには、以下を実行します。
$ oc new-app https://github.com/openshift/ruby-hello-world mysql
ソースコードリポジトリーおよびビルダーイメージが別個の引数として指定されている場合、new-app
はソースコードリポジトリーのビルダーとしてそのビルダーイメージを使用します。これを意図していない場合は、~
セパレーターを使用してソースに必要なビルダーイメージを指定します。
3.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
3.3.4.9. イメージ、テンプレート、および他の入力の検索
イメージ、テンプレート、および oc new-app
コマンドの他の入力内容を検索するには、--search
フラグおよび --list
フラグを追加します。たとえば、PHP を含むすべてのイメージまたはテンプレートを検索するには、以下を実行します。
$ oc new-app --search php