LoginSignup
1
1

More than 3 years have passed since last update.

Raspberry Pi 上で Open Liberty を動かす

Last updated at Posted at 2020-07-16

自宅で転がっている 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(今回は不要)

k8s-compo.png

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のソースコードのリポジトリ

1
1
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
1
1