新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

Python アプリを OpenShift クラスター内にデプロイする 3 つの方法

このチュートリアルでは、Python アプリケーションをクラウド上の OpenShift クラスター内にデプロイする方法を説明します。ここで説明する方法は、他のランタイム環境で開発されたアプリケーションやマイクロサービスをデプロイする場合にも適用できます。このチュートリアルに記載するサンプル・コードで使用しているのは、Red Hat® OpenShift® on IBM Cloud™ です。

このチュートリアルでは、IBM Cloud 上の OpenShift クラスターに対してアプリケーションをビルドしてデプロイする 3 つのシナリオを取り上げます。各シナリオは次のとおりです。

  • 既存の Docker イメージを IBM Cloud 上の OpenShift クラスターにプッシュしてからデプロイする必要がある: このシナリオでは、プライベート・リポジトリー内に既存の Docker イメージが格納されています。このイメージを IBM Cloud 上の OpenShift クラスターにデプロイする必要があります。このデプロイ・シナリオは例えば、アプリケーションを最新化する際の「リフト・アンド・シフト」手法で適用することが考えられます。ソースにはアクセスできないため、継続的インテグレーション/デリバリー・メカニズムは実装されません。

  • ソースが格納された GitHub リポジトリーと、イメージのアセンブル方法を指示する Dockerfile がある: イメージのアセンブルを完全に制御し、必要な依存関係とバージョンだけを使用して柔軟にイメージをアセンブルしたい場合は、このシナリオを適用できます。依存関係は自分で指定するので、コードは常に依存関係と互換性を持つことになります。このシナリオでは Dockerfile の保守が必要になりますが、それは時には複雑なタスクになることもあります。このシナリオを適用する場合、OpenShift クラスターに対する継続的インテグレーションおよびデリバリーが可能になるため、デプロイ済みバージョンのコードを常に最新の状態に維持できます。

  • ソースが格納された GitHub リポジトリーがある: このシナリオでは、OpenShift の Source to Image (S2I) ツールキットを頼りに Docker イメージを作成します。OpenShift の S2I は、リポジトリー内に格納されたソースと、ビルダー・イメージを使用して、新しい Docker イメージを作成します。oc new-app ... コマンドの実行時にリポジトリー内にDockerfile が存在していなければ、ソース・コード言語が自動的に検出されます。言語の検出ルールはここに指定されています。OpenShift ブログによると、S2I を使用するメリットは、速度、パッチ適用容易性、ユーザー効率、エコシステムにあります。このシナリオを適用する場合も、OpenShift クラスターに対する継続的インテグレーションおよびデリバリーが可能になるため、デプロイ済みバージョンのコードを常に最新の状態に維持できます。

前提条件

IBM Cloud アカウントOpenShift CLIDocker が必要です。

所要時間

このチュートリアルの所要時間は約 30 分です。

ステップ 1. OpenShift クラスター・インスタンスを作成する

OpenShift クラスターの新しいインスタンスを作成します。適切なプランを選択してから「Create (作成)」をクリックします。

ステップ 2. ローカル・レジストリー内の Docker イメージを使用してアプリケーションをデプロイする

サンプル・コードが用意されている GitHub リポジトリー (github.com/IBM/deploy-python-openshift-tutorial) 内に、ソースと Dockerfile があります。このチュートリアルでは、これらのサンプル・コードを使用して Docker イメージをアセンブルした後、そのイメージを OpenShift クラスターにデプロイします。

  1. 以下のコマンドを実行して GitHub リポジトリーを複製します。

     $ git clone https://github.com/IBM/deploy-python-openshift-tutorial.git
    
  2. OpenShift クラスターにデプロイするアプリケーションの Docker イメージをビルドします。

     $ cd deploy-python-openshift-tutorial
     $ docker build -t helloworldpython:latest .
    
  3. OpenShift Web コンソールを開きます。

    コンソールを開くためのボタンを示すスクリーン・キャプチャー

  4. CLI を使用して OpenShift にログインし、新しいプロジェクトを作成します。

    「Copy Login Command (ログイン・コマンドをコピー)」メニュー項目を示すスクリーンショット

     $ oc login https://c100-e.us-east.containers.cloud.ibm.com:30682 --token=xxxxxxxxxxxxxxx
     $ oc new-project exampleproject
    
  5. Docker レジストリーのルートを作成します。

     $ oc project default
     $ oc get svc
    

    次のような内容の出力が返されます。

     NAME               TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
     docker-registry    ClusterIP      172.21.xxx.xx    <none>           5000/TCP                     18h
     kubernetes         ClusterIP      172.21.x.x       <none>           443/TCP,53/UDP,53/TCP        18h
     myfirstosdeploy    ClusterIP      172.21.xx.xxx    <none>           5000/TCP                     17h
     registry-console   ClusterIP      172.21.xxx.xxx   <none>           9000/TCP                     18h
     router             LoadBalancer   172.21.xx.x      169.47.xxx.xxx   80:31297/TCP,443:30385/TCP   18h
    
  6. 以下のコマンドを実行して Docker レジストリーのルートを作成します。

     $ oc create route reencrypt --service=docker-registry
    
  7. 作成されたルートの詳細を確認します。

     $ oc get route docker-registry
    

    以下のような出力が返されます。

     NAME              HOST/PORT                                                                                                        PATH      SERVICES          PORT       TERMINATION   WILDCARD
     docker-registry   docker-registry-default.clustersiteam-5290cxxxxxxxxxxd1b85xxx-0001.us-east.containers.appdomain.cloud             docker-registry   5000-tcp   reencrypt     None
    
  8. レジストリー URL のパターンは、docker-registry-default.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud となっています。

    この Docker レジストリー URL をメモします。以降のステップで、この URL が必要になります。

  9. Docker CLI を使用して Docker レジストリーにログインします。

    注: 前にメモした Docker レジストリー URL を使用してください。

     docker login -u $(oc whoami) -p $(oc whoami -t) docker-registry-default.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud
    
  10. 以下の例に示すように、Docker イメージにタグを付けます。

     docker tag helloworldpython:latest docker-registry-default.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/exampleproject/helloworldpython:latest
    
  11. Docker イメージを OpenShift Docker レジストリーにプッシュします。

     docker push docker-registry-default.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/exampleproject/helloworldpython
    
  12. イメージを OpenShift にデプロイして、ルートを公開します。

     $ oc project exampleproject
     $ oc new-app --image-stream=helloworldpython --name=helloworldpython
     $ oc expose svc/helloworldpython
    
  13. helloworldpython アプリケーションの OpenShift コンソール上に表示されている「Open Url (URL を開く)」アイコンをクリックします。

    helloworldpython の URL を開くためのアイコンを示すスクリーン・キャプチャー

    ブラウザー・ウィンドウ内に Hello, world! メッセージが表示されます。

    helloworldpython アプリから表示された HelloWorld メッセージを示すスクリーン・キャプチャー

ステップ 3. ソースが格納された GitHub リポジトリーと Dockerfile を使用してアプリケーションをデプロイする

このステップでのデプロイには、同じ GitHub リポジトリー (github.com/IBM/deploy-python-openshift-tutorial) を使用します。Dockerfile には、イメージをアセンブルするための指示が含まれています。

このステップのサンプル・コードでは、前に作成した exampleproject を使用しています。

$ oc project exampleproject

以下のコマンドを実行してアプリケーションをデプロイします。

$ oc new-app https://github.com/IBM/deploy-python-openshift-tutorial
$ oc expose svc/deploy-python-openshift-tutorial

deploy-python-openshift-tutorial アプリケーションの OpenShift コンソール上に表示されている「Open Url (URL を開く)」アイコンをクリックします。

deploy-python-openshift-tutorial の URL を開くためのアイコンを示すスクリーン・キャプチャー

ブラウザー・ウィンドウ内に Hello, world! メッセージが表示されます。

deploy-python-openshift-tutorial アプリから表示された HelloWorld を示すスクリーン・キャプチャー

ステップ 4. ソースが格納された GitHub リポジトリーを使用してアプリケーションをデプロイする

このステップでのデプロイには、同じ GitHub リポジトリー (github.com/IBM/deploy-python-openshift-tutorial) を使用します。ここでは、OpenShift S2I がビルダー・イメージとそのソースを使用して、OpenShift クラスターにデプロイする新しい Docker イメ―ジを作成します。

$ oc new-app https://github.com/IBM/deploy-python-openshift-s2i-tutorial
$ oc expose svc/deploy-python-openshift-s2i-tutorial

deploy-python-openshift-s2i-tutorial アプリケーションの OpenShift コンソール上に表示されている「Open Url (URL を開く)」アイコンをクリックします。

deploy-python-openshift-s2i-tutorial の URL を開くためのアイコンを示すスクリーン・キャプチャー

ブラウザー・ウィンドウ内に Hello, world! メッセージが表示されます。

deploy-python-openshift-s2i-tutorial アプリから表示された HelloWorld を示すスクリーン・キャプチャー

まとめ

アプリケーションをビルドして OpenShift クラスターにデプロイする 3 つの方法は以上のとおりです。Red Hat OpenShift on IBM Cloud で、実際に独自のデプロイを試すことができます。

Source-to-Image について詳しく学ぶには、この動画をご覧ください。