2.2. 新規アプリケーションの作成
2.2.1. 概要
OpenShift CLI または web コンソールのいずれかを使用して、ソースまたはバイナリーコード、イメージおよびテンプレート (あるいは両方) を含むコンポーネントから新規の OpenShift Online アプリケーションを作成できます。
2.2.2. CLI を使用したアプリケーションの作成
2.2.2.1. ソースコードからのアプリケーションの作成
new-app
コマンドでは、ローカルまたはリモートの Git リポジトリーのソースコードからアプリケーションを作成できます。
ローカルディレクトリーの Git リポジトリーを使用してアプリケーションを作成するには、以下を実行します。
$ oc new-app /path/to/source/code
ローカルの Git リポジトリーを使用する場合には、OpenShift Online クラスターがアクセス可能な URL を参照する origin という名前のリモートが必要です。認識されているリモートがない場合は、new-app
によりバイナリービルドが作成されます。
リモート 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
フラグを使用して、既存のソースクローンのシークレットを指定できます。これは、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
new-app
コマンドは、ビルド設定を作成します。これは、ソースコードから新規アプリケーションのイメージを作成します。new-app
コマンドは通常、デプロイメント設定を作成して新規イメージをデプロイするほか、サービスを作成してイメージを実行するデプロイメントへの負荷分散したアクセスを提供します。
OpenShift Online は、Pipeline
または Source
ビルドストラテジーのいずれを使用すべきかを自動的に検出します。また、Source
ビルドの場合は、適切な言語のビルダーイメージを検出します。
ビルドストラテジーの検出
新規アプリケーションの作成時に Jenkinsfile がソースリポジトリーのルートまたは指定されたコンテキストディレクトリーに存在する場合に、OpenShift Online は Pipeline
ビルドストラテジーを生成します。それ以外の場合は、ソース
ビルドストラテジーが生成されます。
ビルドストラテジーを上書きするには、--strategy
フラグを pipeline
または source
のいずれかに設定します。
$ oc new-app /home/user/code/myapp --strategy=source
oc
コマンドを使用するには、ビルドソースを含むファイルがリモートの git リポジトリーで利用可能である必要があります。ソースのすべてのビルドには、git remote -v
を使用する必要があります。
言語の検出
Source
ビルドストラテジーを使用する場合に、new-app
はリポジトリーのルートまたは指定したコンテキストディレクトリーに特定のファイルが存在するかどうかで、使用する言語ビルダーを判別しようとします。
言語 | ファイル |
---|---|
| project.json、*.csproj |
| pom.xml |
| app.json、package.json |
| cpanfile、index.pl |
| composer.json、index.php |
| requirements.txt、setup.py |
| Gemfile, Rakefile、config.ru |
| build.sbt |
| Godeps、main.go |
言語の検出後、new-app
は OpenShift Online サーバーで、検出言語と一致して 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
2.2.2.2. イメージからアプリケーションを作成する方法
既存のイメージからアプリケーションのデプロイが可能です。イメージは、OpenShift Online サーバー内のイメージストリーム、指定したレジストリー内またはDocker Hub レジストリー 内のイメージ、またはローカルの Docker サーバー内のイメージから取得できます。
OpenShift Online は、任意に割り当てられたユーザー ID を使用してコンテナーを実行します。この動作により、コンテナーエンジンの脆弱性が原因でコンテナーから出ていくプロセスに対して追加のセキュリティーを設定でき、ホストノードでパーミッションのエスカレーションが可能になります。この制限により、root として実行されるイメージは OpenShift Online に予想通りにデプロイされません。
new-app
コマンドは、渡された引数に指定されたイメージの種類を判断しようとします。ただし、イメージが (--docker-image
引数を使用した) Docker イメージなのか、または (-i|--image
引数) を使用したイメージストリームなのかを new-app
に明示的に指示できます。
ローカル Docker リポジトリーからイメージを指定した場合、同じイメージが OpenShift Online のクラスターノードでも利用できることを確認する必要があります。
たとえば、DockerHub MySQL イメージからアプリケーションを作成するには、以下を実行します。
$ oc new-app mysql
プライベートのレジストリーのイメージを使用してアプリケーションを作成する場合には、Docker イメージの仕様全体を以下のように指定します。
$ oc new-app myregistry:5000/example/myimage
イメージを含むレジストリーが SSL でセキュリティー保護されていない場合には、クラスター管理者は、 OpenShift Online ノードホストの Docker デーモンが対象のレジストリーを参照する --insecure-registry
フラグを指定して実行されていることを確認する必要があります。また、--insecure-registry
フラグを指定して、セキュアでないレジストリーからイメージが取得されていることを、new-app
に示す必要があります。
以下のように、既存のイメージストリームおよび任意のイメージストリームタグでアプリケーションを作成することができます。
$ oc new-app my-stream:v1
2.2.2.3. テンプレートからのアプリケーションの作成
テンプレート名を引数として指定することで、事前に保存したテンプレートまたはテンプレートファイルからアプリケーションを作成することができます。たとえば、サンプルアプリケーションテンプレートを保存し、これを使用してアプリケーションを作成できます。
保存したテンプレートからアプリケーションを作成する場合、以下を実行します。
$ oc create -f examples/sample-app/application-template-stibuild.json $ oc new-app ruby-helloworld-sample
事前に OpenShift Online に保存することなく、ローカルファイルシステムでテンプレートを直接使用するには、-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=-
を使用します。
$ 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.2.2.4. アプリケーション作成における追加修正
new-app
コマンドは、OpenShift Online オブジェクトを生成します。このオブジェクトにより、作成されるアプリケーションがビルドされ、デプロイされ、実行されます。通常、これらのオブジェクトは、入力ソースリポジトリーまたはインプットイメージから派生する名前を使用して現在のプロジェクトに作成されます。ただし、new-app
によりこの動作を修正することができます。
new-app
で作成したオブジェクトのセットは、ソースリポジトリー、イメージまたはテンプレートなどのインプットとして渡されるアーティファクトによって異なります。
オブジェクト | 説明 |
---|---|
|
|
|
|
|
|
|
|
その他 | テンプレートのインスタンスを作成する際に、他のオブジェクトがテンプレートに基づいて生成される可能性があります。 |
2.2.2.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=-
詳細については、「環境変数の管理」を参照してください。
-e|--env
または --env-file
引数で渡される環境変数では、 new-app
処理の一環として作成される BuildConfig
オブジェクトは更新されません。
2.2.2.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.2.2.4.3. ラベルの指定
ソース、イメージ、またはテンプレートからアプリケーションを生成する場合、-l|--label
引数を使用し、作成されたオブジェクトにラベルを追加できます。ラベルを使用すると、アプリケーションに関連するオブジェクトを一括で選択、設定、削除することが簡単になります。
$ oc new-app https://github.com/openshift/ruby-hello-world -l name=hello-world
2.2.2.4.4. 作成前の出力の表示
new-app
が作成する内容についてのドライランを確認するには、yaml
または json
の値と共に -o|--output
引数を使用できます。次にこの出力を使用して、作成されるオブジェクトのプレビューまたは編集可能なファイルへのリダイレクトを実行できます。問題がなければ、oc create
を使用して OpenShift Dedicated オブジェクトを作成できます。
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.2.2.4.5. 別名でのオブジェクトの作成
通常 new-app
で作成されるオブジェクトの名前はソースリポジトリーまたは生成に使用されたイメージに基づいて付けられます。コマンドに --name
フラグを追加することで、生成されたオブジェクトの名前を設定できます。
$ oc new-app https://github.com/openshift/ruby-hello-world --name=myapp
2.2.2.4.6. 別のプロジェクトでのオブジェクトの作成
通常 new-app
は現在のプロジェクトにオブジェクトを作成します。ただし、-n|--namespace
引数を使用して、アクセスできる別のプロジェクトにオブジェクトを作成することができます。
$ oc new-app https://github.com/openshift/ruby-hello-world -n myproject
2.2.2.4.7. 複数のオブジェクトの作成
new-app
コマンドは、複数のパラメーターを new-app
に指定して複数のアプリケーションを作成できます。コマンドラインで指定するラベルは、単一コマンドで作成されるすべてのオブジェクトに適用されます。環境変数は、ソースまたはイメージから作成されたすべてのコンポーネントに適用されます。
ソースリポジトリーおよび Docker Hub イメージからアプリケーションを作成するには、以下を実行します。
$ oc new-app https://github.com/openshift/ruby-hello-world mysql
ソースコードリポジトリーおよびビルダーイメージが別個の引数として指定されている場合、new-app
はソースコードリポジトリーのビルダーとしてそのビルダーイメージを使用します。これを意図していない場合は、~
セパレーターを使用してソースに必要なビルダーイメージを指定します。
2.2.2.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.2.3. Web コンソールを使用したアプリケーションの作成
必要なプロジェクトで Add to Project をクリックします。
プロジェクト内にあるイメージの一覧またはサービスカタログからビルダーイメージを選択します。
注記以下に示すように、builder タグがアノテーションに一覧表示されているイメージストリームタグのみが一覧に表示されます。
kind: "ImageStream" apiVersion: "v1" metadata: name: "ruby" creationTimestamp: null spec: dockerImageRepository: "registry.access.redhat.com/openshift3/ruby-20-rhel7" tags: - name: "2.0" annotations: description: "Build and run Ruby 2.0 applications" iconClass: "icon-ruby" tags: "builder,ruby" 1 supports: "ruby:2.0,ruby" version: "2.0"
- 1
- ここに builder を含めると、この
ImageStreamTag
がビルダーとして Web コンソールに表示されます。
新規アプリケーション画面で設定を変更し、オブジェクトをアプリケーションをサポートするように設定します。