LoginSignup
6
3

More than 3 years have passed since last update.

Red Hat OpenShift on IBM CloudでWebSphere Libertyイメージを使用する(初級編 Dockerイメージの利用)

Last updated at Posted at 2019-12-19

目的

Red Hat OpenShiftは生のKubernetesに比べてアプリケーションデプロイのための豊富なオプションが用意されています。私自身の学習と備忘を兼ねてさまざまなデプロイを試してみます。IBMによる買収を記念して?アプリケーションはWebSphere Libertyをランタイムとして使用します。

アプリケーションは何でもいいので下記サイトのSampleWebAppを使わせて頂きました。

https://www.middlewareinventory.com/blog/sample-web-application-war-file-download/

初級編 Dockerイメージを利用する

生Kubernetesから入った人なら一番わかりやすいやり方でしょう。コンテナレジストリにあるあらかじめビルドされたイメージを使ってデプロイします。

環境

OpenShiftクラスター イメージレジストリ
IBM Cloud Red Hat OpenShift Cluster IBM Cloud Container Registry

イメージのビルドと登録

Dockerfileを準備します。


FROM icr.io/ibm/liberty:microProfile3

RUN wget --directory-prefix=/config/dropins https://github.com/AKSarav/SampleWebApp/raw/master/dist/SampleWebApp.war

イメージをビルドしてレジストリに登録します。

$ ns=${名前空間}

$ ibmcloud login
$ ibmcloud cr region-set ap-north
$ ibmcloud cr namespace-add ${ns}

$ ibmcloud cr build --tag jp.icr.io/${ns}/openshift-liberty .

無事登録されたことを確認します。

$ ibmcloud cr images | grep openshift-liberty
jp.icr.io/${ns}/openshift-liberty   latest   31507da4964d   ${ns}   1 minute ago   206 MB   No Issues

OpenShiftプロジェクトの作成

OpenShiftのプロジェクトを作成します。合わせてContainer Registryからイメージをプルするための設定も行います。

$ project=${プロジェクト}

# プロジェクト作成
$ oc new-project ${project}

# Container RegistryのPullシークレットをプロジェクトにコピー
$ oc get secret default-jp-icr-io -n default -o yaml | sed "s/default/${project}/g" | oc create -n ${project} -f -

# Pullシークレットをdefaultサービスアカウントに設定
$ oc secrets add serviceaccount/default secrets/${project}-jp-icr-io --for=pull

# LibertyイメージのUSER 1001で実行を許可(注1)
$ oc patch scc nonroot -p 'priority: 5'
$ oc adm policy add-scc-to-user nonroot -z default

(注1)OpenShiftはデフォルトではイメージのUSER指定を使わないという特性があります。一方LibertyのイメージはUSER 1001で動作することを前提としているため、OpenShift上では正しく動作しないところがあります。回避する方法もあるのですが、今回はイメージのUSER指定を使うように設定を変更しています。このあたり、どうするのがベストなのか、IBMさん教えて欲しいところです。

イメージのインポート

コンテナレジストリのイメージをそのまま使ってデプロイもできますが、OpenShiftらしさを考えて、今回はイメージストリームを使います。

$ oc import-image openshift-liberty-docker --from jp.icr.io/${ns}/openshift-liberty --confirm

アプリケーションのデプロイ

それではアプリケーションをデプロイします。

$ oc new-app --name openshift-liberty-docker -i openshift-liberty-docker

そして公開します。

$ oc expose svc/openshift-liberty-docker

動作確認

# URLを確認
$ oc get route
NAME                       HOST/PORT                                                                                                        PATH      SERVICES                   PORT       TERMINATION   WILDCARD
openshift-liberty-docker   openshift-liberty-docker-#####.#######-################################-####.jp-tok.containers.appdomain.cloud             openshift-liberty-docker   9080-tcp                 None

# インターネット側からアクセスできることを確認
$ curl -s openshift-liberty-docker-#####.#######-################################-####.jp-tok.containers.appdomain.cloud/SampleWebApp/
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>SampleWebApp</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <h2>Sample Web Application To Deploy and Test</h2>
        <br>
    <div> click <a href="SnoopServlet">Click to Invoke a SnoopServlet</a></div>
    <br>
    <br>


    </body>
</html>

とりあえず動きましたね。次回以降もさまざまな方法を試してみたいと思います。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3