IBM Support

Liberty on Docker Hubの紹介

Preventive Service Planning


Abstract

IBM WebSphere Application Server for Developers V8.5.5 Liberty Profile と IBM Java Runtime Environment 7.1 SR1を含むDockerイメージが公開され、Docker Hubから利用できるようになりました。
この文書ではLibertyプロファイルを含むDockerイメージの紹介と利用方法を説明します。

Content

【詳細】

■Dockerについて

・Dockerとは

Dockerはコンテナー型仮想環境と呼ばれるアプリケーションの稼動環境です。
ハイパーバイザー型の仮想環境とは異なり、1つのホストOS上で複数のコンテナーを別々のサーバーのように稼動させることができます。コンテナーはネットワークやユーザープロセス等を分離する空間を割り当てられますが、OSではないためコンテナーの作成や稼動のオーバーヘッドは少なくて済みます。
また、イメージという、ランタイムのサーバー構成となるディレクトリー構造やデータを含むテンプレートに相当するものからコンテナーを作成するため、同じ環境を複数作成することや再現することが容易にできます。

・Docker Hubとは

Dockerの稼働環境は、DockerイメージからDockerコンテナーを作成し、コンテナーの状態管理を行っていくことになります。
ローカルでイメージを作成しそれを利用することもできますが、DockerがDocker Hub Registryという公式リポジトリーを公開しており、様々な企業や団体、個人のDockerイメージがそこに登録されています。
Docker Hubに繋がっていれば、リポジトリーを指定してプルすることでDocker Hub内のイメージをローカルにダウンロードして利用することができます。

■Liberty on Docker Hub 概要

Libertyプロファイルを含むDockerイメージとしてwebsphere-libertyイメージがwasdevから公開されています。
2014年12月時点では最新である V8.5.5.4 のLibertyプロファイルが利用できます。
Dockerイメージはタグで管理されており、今後異なるバージョンのLibertyプロファイルを利用できようになれば、その時点の最新もしくはタグでバージョンを指定して利用することができます。
140402Fig1.png

■Liberty on Docker Hub 利用手順

事前にDockerインストール済み環境を用意します。ここでは簡単な動作確認を行うためRHEL V7.0の仮想イメージ上に、docker V1.3.2をインストールした環境を使用しています。

・Dockerイメージ(websphere-liberty)の起動

wasdev/websphere-libertyイメージの起動だけであれば以下のコマンドで実行できます。wasdev/websphere-libertyイメージは事前にプルしてダウンロードすることもできますが、実行時にローカルに保存されたものがなければDocker Hubからダウンロードしてきます。

[user01@localhost ~]$ docker run -e LICENSE=accept -d -p 80:9080 -p 443:9443 wasdev/websphere-liberty
Unable to find image 'wasdev/websphere-liberty' locally
Pulling repository wasdev/websphere-liberty

~~省略~~

c06271b950390f087c9d8aff7df6bd985d8991977928f2d8536aab7d79cbef78
[user01@localhost ~]$

Dockerイメージに含まれるLibertyプロファイルでは、デフォルトで webProfile-6.0 フィーチャーが有効化されており、httpポート9080とhttpsポート9443がLISTENするようになっています。
コンテナー内部では9080ポートと9443でLISTENしますが、コンテナーを動かすホストでLISTENするポートを -p オプションで指定します。
ここでは、9080ポートに対して80ポートを、9443ポートに対して443ポートをそれぞれマッピングしています。
コマンド実行の戻り値として最終行に出力されている文字列 (c06271~ ) がコンテナーのIDです。docker ps コマンドで稼動中のプロセスを確認することができます。

[user01@localhost ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c06271b95039 wasdev/websphere-liberty:latest "liberty-run" 3 minutes ago Up 3 minutes 0.0.0.0:80->9080/tcp, 0.0.0.0:443->9443/tcp silly_turing
[user01@localhost ~]$

実際に、ホストOSのホスト(IPアドレス)の80ポートにアクセスするとLibertyプロファイルのWelcomeページが表示されます。Libertyプロファイルが起動しているだけなのでアプリケーションは稼動してません。

140402Fig2.png

・Dockerイメージ(websphere-liberty)上でのアプリケーションの稼動

wasdev/websphere-libertyイメージのLibertyプロファイル上でアプリケーションを稼動させる場合、以下のようなコマンドで実行できます。
(上で稼動したコンテナーとは別のコンテナーとして作成、開始します。同じポートでDockerイメージが稼動している場合は先に停止してください。)
事前に作成したアプリケーションをホストOS上に配置しておく必要があります。

[user01@localhost ~]$ docker run -e LICENSE=accept -d -p 80:9080 -p 443:9443 -v /work/Sample1.war:/opt/ibm/wlp/usr/servers/defaultServer/dropins/Sample1.war wasdev/websphere-liberty
ba4aab848389a5bc05568d797fd653ea23e7b12eb6b45578acfa1391d9f9e6ae
[user01@localhost ~]$

アプリケーションのURLにアクセスするとアプリケーションが稼動していることが確認できます。

140402Fig3.png

・Dockerイメージ(websphere-liberty)のログ確認

ログを確認したい場合以下の方法で確認できます。

コンテナーの出力を確認する方法

dockerコマンドのlogsオプションを使用します。(-fオプションをつけるとログをtailします)

[user01@localhost ~]$ docker logs --tail=all -f <コンテナーID>
Launching defaultServer (WebSphere Application Server 8.5.5.4/wlp-1.0.7.cl50420141211-1039) on IBM J9 VM, version pxa6470_27sr1fp1-20140708_01 (SR1 FP1) (en_US)
[AUDIT ] CWWKE0001I: The server defaultServer has been launched.
[AUDIT ] CWWKZ0058I: Monitoring dropins for applications.
[AUDIT ] CWWKS4104A: LTPA keys created in 1.712 seconds. LTPA key file: /opt/ibm/wlp/usr/servers/defaultServer/resources/security/ltpa.keys
[AUDIT ] CWWKT0016I: Web application available (default_host): http://ba4aab848389:9080/Sample1/
[AUDIT ] CWWKZ0001I: Application Sample1 started in 1.437 seconds.
[AUDIT ] CWWKF0012I: The server installed the following features: [jdbc-4.0, ssl-1.0, jpa-2.0, appSecurity-2.0, managedBeans-1.0, jsf-2.0, jsp-2.2, servlet-3.0, jndi-1.0, ejbLite-3.1, cdi-1.0, distributedMap-1.0, webProfile-6.0, beanValidation-1.0].
[AUDIT ] CWWKF0011I: The server defaultServer is ready to run a smarter planet.


Libertyプロファイルのログファイルの内容をシェルコマンドで確認する方法

dockerコマンドのexecオプションを使用します。
コンテナーのベースにはubuntuが使われており、コンテナーにシェルコマンドの命令を送ることができます。

[user01@localhost ~]$ docker exec <コンテナーID> cat /opt/ibm/wlp/usr/servers/defaultServer/logs/messages.log
********************************************************************************
product = WebSphere Application Server 8.5.5.4 (wlp-1.0.7.cl50420141211-1039)
wlp.install.dir = /opt/ibm/wlp/
java.home = /opt/ibm/java/jre
java.version = 1.7.0
java.runtime = Java(TM) SE Runtime Environment (pxa6470_27sr1fp1-20140708_01 (SR1 FP1))
os = Linux (3.10.0-123.el7.x86_64; amd64) (en_US)
process = 15@ba4aab848389
********************************************************************************
[12/18/14 10:42:41:578 UTC] 00000001 com.ibm.ws.kernel.launch.internal.FrameworkManager A CWWKE0001I: The server defaultServer has been launched.
[12/18/14 10:42:45:634 UTC] 00000001 com.ibm.ws.kernel.launch.internal.FrameworkManager I CWWKE0002I: The kernel started after 5.23 seconds
[12/18/14 10:42:45:827 UTC] 0000001e com.ibm.ws.kernel.feature.internal.FeatureManager I CWWKF0007I: Feature update started.
~~省略~~

・Libertyプロファイル構成のカスタマイズ

デフォルトで提供されるwebsphere-libertyイメージを拡張したい場合や独自のLibertyプロファイルのサーバー構成を適用したい場合にDockerfileを利用してカスタマイズしたイメージを作成することができます。

例えば以下のようなケースが当てはまります。
・webProfileに含まれないフィーチャー(webSocketやJMSなど)を有効化したい
・ユーザーレジストリーを構成したserver.xmlを使用したい

Dockerfileに以下のように記述するとJMSフィーチャーを追加し、ホストOS上に配置した構成済みのserver.xmlとWARファイルをコンテナー上のLibertyプロファイルで使用することができるようになります。

FROM wasdev/websphere-liberty
RUN featureManager install jms-1.1 --when-file-exists=ignore --acceptLicense
COPY server.xml /opt/ibm/wlp/usr/servers/defaultServer/
COPY myApp.war /opt/ibm/wlp/usr/servers/defaultServer/dropins/
ENV LICENSE accept

Dockerfileが存在するディレクトリーで以下ビルドコマンドを実行します。

[user01@localhost ~]$ docker build -t app .

結果としてカスタマイズ済みのイメージとして登録されます。実行時にはそのイメージを指定して実行します。

[user01@localhost ~]$ docker run -d -p 80:9080 app


【参考資料】
WASdev: Announcing: Liberty profile on Docker Hub
docker repository: wasdev / websphere-liberty
Running Liberty profile in a Docker container


以上

[{"Product":{"code":"SSD28V","label":"WebSphere Application Server Liberty Core"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Component":"Not Applicable","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"Version Independent","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Historical Number

A3EB34F3AE273B7049257DB80035EAF4

Product Synonym

対象システム:WebSphere Application Server

Document Information

Modified date:
17 June 2018

UID

jpn1J1012277