Raspberry Pi 上で Open Liberty を動かす
自宅で転がっている Raspberry Pi を利用して、Kubernatesクラスター上で継続的インテグレーション/継続的デリバリー(CI/CD)の学習をするための第一歩。
継続的ほにゃにゃらといいながら、まずJavaのWebアプリケーションを動かすために、Java EE(Java Enterprise Edition)の仕様を満足するアプリケーションサーバーを準備します。
Java EE仕様のアプリケーションサーバーは、重厚長大なイメージがあり、Raspberry Pi上で動作するのか? との疑問をもたられるかもしれませんが、Open Liberty という、Java EEの仕様を満足するアプリケーションサーバーがあり、軽快に動作します。
環境と前提条件
- Docker : version 19.03.8
- Raspberry PiのKubernatesクラスターが構築されていること(今回は不要)
- Kubernatesクラスター クライアント/サーバー v1.18.2/v1.18.2(今回は不要)
Open Liberty とは
Open Liberty は、製品版の Websphere Liberty のオープンソース版で、元々の Websphere Liberty の軽量・高速であること、モジュール化されていることなどの特徴を引き継いでいます。
Open Liberty の Docker イメージ作成
Docker Hubを参照すると、openliberty/open-liberty のタグ名でOpen Libertyが直ちに見つかります。しかし、x86、ppc64le、s390x アーキテクチャーのイメージしか提供されていないよ
うなので、Open Liberty の Docker イメージを作成することにします。
git が未導入な場合は、導入して、Open Libertyのソースのリポジトリを clone します。
$ sudo apt-get install git
$ mkdir -p ~/tmp/open-liberty
$ cd ~/tmp/open-liberty
$ git clone https://github.com/OpenLiberty/ci.docker.git
Dockerfile のテンプレートが準備されているので、openjdkを利用しているテンプレートをコ
ピーして必要ば部分を修正します。
修正箇所は2箇所
1. 参照するイメージをアーキテクチャーにあわせて修正する
「FROM adoptopenjdk:8-jre-openj9」 を 「FROM arm32v7/adoptopenjdk:latest」 に修正する。
2. $OPENJ9_SCC の行をコメントアウト
77行目付近の 「RUN if [ "$OPENJ9_SCC" ...」 から始まる行をコメントアウト
環境変数 $OPENJ9_SCC は、Javaクラスをキャッシュするための仕組みらしいのですが、
何が正解が、追求していません。(すみません。)
Docker ビルドします。
$ cd ci.docker/releases/latest/kernel
$ cp -p Dockerfile.ubuntu.adoptopenjdk8 Dockerfile
$ vi Dockerfile # 2箇所に修正をする
$ docker build -t openliberty/raspberrypi .
Docker イメージが作成できていることを確認します。感動。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
openliberty/raspberrypi latest f7976fae19fd 12 minutes ago 561MB
サンプルアプリのイメージ作成
作成した Open Liberty の Docker イメージをベースにして、サンプルアプリの Docker イメージを作成して、稼働を確認します。
JavaのWebサンプルアプリとして、様々な物が GitHUb 上に存在しますが、今回は Open Liberry 側で提供している。サンプルアプリ sample-getting-started を利用してみます。
Webのアプリケーションモジュールを作成するために、maven と呼ばれるビルドツールが必要なので、以下の手順で導入をしておきます。
$ sudo apt install maven
$ mvn --version
Apache Maven 3.6.0
作業ディレクトリに移動して、git から clone して、ビルドをします。(これも少し時間がかかる)
ビルド後に 自動的に Open Liberty で実行されるようになっています。
$ mkdir ~/tmp/sample-getting-started
$ cd ~/tmp/sample-getting-started
$ git clone https://github.com/OpenLiberty/sample-getting-started
$ mvn clean package liberty:run
アプリが稼働すると、http://localhost:9080 でリクエストを受けられる様になります。
curl でリクエストをして、それらしいレスポンスが戻ってくれば正常に稼働しています。(多分)
稼働が確認できたら、コントロール-C 等で強制的にアプリを停止しておきます。
$ curl http://localhost:9080
アプリの稼働が確認できたので、先ほど作成した Open Liberty の Docker イメージをベース
にして、サンプルアプリの Docker イメージを作成します。
maven のビルド実行により、warファイルは作成済みなので、Dockerfile で war をコピーします。
FROM openliberty/raspberrypi
LABEL maintainer="Graham Charters" vendor="IBM" github="https://github.com/WASdev/ci.maven"
COPY --chown=1001:0 src/main/liberty/config/ /config/
COPY --chown=1001:0 target/*.war /config/apps/
Dockerfile が準備できたので、ビルドをします。
$ cd ~/tmp/sample-getting-started
$ vi Dockerfile
$ docker build -t sample-getting-started/raspberrypi .
docker イメージを確認するとこのようになります。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
sample-getting-started/raspberrypi latest 2943356c7ae1 10 seconds ago 561MB
openliberty/raspberrypi latest f7976fae19fd 36 minutes ago 561MB
arm32v7/adoptopenjdk latest 8db1eaed3a3f 6 days ago 381MB
:
Docker イメージをコンテナ上で実行して、curl のリクエストにレスポンスがあるかを確認します。
shell-session
$ docker run -d -p 9080:9080 sample-getting-started/raspberrypi
$ curl http://localhost:9080
まとめ
本当は、アプリのDocker イメージを Pod化して、Kubernates クラスターにデプロイをする予定でしたが、Podでエラーが発生してしまったので、今日はここまで。
参考資料
Open Liberty in Docker on a Raspberry Pi
GithubリポジトリからOpen Liberty のDocker イメージの作成及びサンプルアプリの実行までが記述されている。
Open Liberty Images
Open Libertyのソースコードのリポジトリ
Author And Source
この問題について(Raspberry Pi 上で Open Liberty を動かす), 我々は、より多くの情報をここで見つけました https://qiita.com/loquat01/items/0658172d1b0b682e6e49著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .