Libertyの実行環境をDocker上に作成します。
websphere-libertyを使っても良いのですが、日本語化したい&Dockerfileや仕組みを理解したいと思い、Dockerfileを書いてみました。websphere-liberty以外にibmjavaを参考にしています。
ibmjava:8-jreは
FROM ubuntu:18.04.3
⇒ IBM JREインストールです。
websphere-libertyは
FROM ibmjava:8-jre
⇒ Libertyインストールです。
これをalpine linux、IBM JRE、libertyのインストール&日本語化します。
よく見るとalpine-minirootfsの入手先書いていませんね。3.16.2なら以下となります。
alpine-minirootfs
Dockerfile例
FROM scratch
ADD alpine-minirootfs-3.16.2-x86_64.tar.gz /
RUN apk update \
&& apk add --no-cache unzip \
&& apk --no-cache --virtual .build-deps add binutils tzdata \
&& cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
&& echo "Asia/Tokyo" > /etc/timezone
ENV GLIBC https://github.com/sgerrand/alpine-pkg-glibc/releases/download
ENV GLIBC_VER 2.34-r0
RUN wget -q ${GLIBC}/${GLIBC_VER}/glibc-${GLIBC_VER}.apk
RUN wget -q ${GLIBC}/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk
RUN wget -q ${GLIBC}/${GLIBC_VER}/glibc-i18n-${GLIBC_VER}.apk
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
RUN apk add --no-cache \
"glibc-${GLIBC_VER}.apk" \
"glibc-bin-${GLIBC_VER}.apk" \
"glibc-i18n-${GLIBC_VER}.apk" \
&& rm "glibc-${GLIBC_VER}.apk" \
"glibc-bin-${GLIBC_VER}.apk" \
"glibc-i18n-${GLIBC_VER}.apk" \
&& /usr/glibc-compat/bin/localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 \
&& apk del --purge .build-deps \
&& apk add --no-cache ca-certificates openssl
ENV JAVA_VERSION 8.0.7.20
RUN set -eux; \
YML_FILE='jre/linux/x86_64/index.yml'; \
BASE_URL="https://public.dhe.ibm.com/ibmdl/export/pub/systems/cloud/runtimes/java/meta/8.0/"; \
wget -q -U UA_IBM_JAVA_Docker -O /tmp/index.yml ${BASE_URL}/${YML_FILE}; \
JAVA_URL=$(sed -n '/^'${JAVA_VERSION}:'/{n;s/\s*uri:\s//p}'< /tmp/index.yml); \
wget -q -U UA_IBM_JAVA_Docker -O /tmp/ibm-java.bin ${JAVA_URL}; \
echo "INSTALLER_UI=silent" > /tmp/response.properties; \
echo "USER_INSTALL_DIR=/opt/ibm/java" >> /tmp/response.properties; \
echo "LICENSE_ACCEPTED=TRUE" >> /tmp/response.properties; \
mkdir -p /opt/ibm; \
chmod +x /tmp/ibm-java.bin; \
/tmp/ibm-java.bin -i silent -f /tmp/response.properties; \
rm -f /tmp/response.properties /tmp/index.yml /tmp/ibm-java.bin
# Install WebSphere Liberty
ENV LIBERTY_VERSION 22.0.0.12
ARG LIBERTY_URL
ARG DOWNLOAD_OPTIONS=""
RUN LIBERTY_URL=${LIBERTY_URL:-$(wget -q -O - https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/downloads/wlp/index.yml | grep $LIBERTY_VERSION -A 6 | sed -n 's/\s*kernel:\s//p' | tr -d '\r' | head -1 )} \
&& wget -q $DOWNLOAD_OPTIONS $LIBERTY_URL -U UA-IBM-WebSphere-Liberty-Docker -O /tmp/wlp.zip \
&& unzip -q /tmp/wlp.zip -d /opt/ibm \
&& rm /tmp/wlp.zip
ENV JAVA_HOME=/opt/ibm/java/jre \
PATH=/opt/ibm/java/jre/bin:/opt/ibm/wlp/bin:$PATH \
IBM_JAVA_OPTIONS="-XX:+UseContainerSupport" \
LANG=ja_JP.UTF-8 LANGUAGE=ja_JP.UTF-8
RUN /opt/ibm/wlp/bin/server create
RUN /opt/ibm/wlp/bin/installUtility install defaultServer
EXPOSE 9080 9443
CMD ["/opt/ibm/wlp/bin/server", "run", "defaultServer"]
起動メッセージ
起動すると以下のメッセージが出力されました。
IBM J9 VM バージョン 8.0.7.20 - pxa6480sr7fp20-20221020_01(SR7 FP20) (ja_JP) で、defaultServer (WebSphere Application Server 22.0.0.12/wlp-1.0.71.cl221220221107-1900) を起動 しています
[AUDIT ] CWWKE0001I: サーバー defaultServer が起動されました。
[AUDIT ] CWWKE0100I: この製品は、開発使用向け、および限定的な実動使用向けにライセンスが交付されています。 全ライセンス条項は以下で表示可能です: https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/license/base_ilan/ilan/22.0.0.12/lafiles/ja.html
[警告 ] CWWKF0009W: サーバーは、いずれのフィーチャーもインストールするようには構成されていません。
[AUDIT ] CWWKF0011I: defaultServer サーバーは、Smarter Planet に対応する準備ができま
した。defaultServer サーバーは 3.164 秒で始動しました。
特徴
・Alpineをベースにしていて、scratchから構築している。
・日本語化している。
・2022/11/23現在の最新版IBM JRE、Libertyを使用している。
・/opt/ibm/wlp/bin/clientなども動かしたいので、/configなどのリンクは使わない。
index.ymlが更新されています。更新されてない場合、index.ymlからパスを取得するのではなく、直接ダウンロードしたものを使うようにしましょう。
https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/downloads/wlp/22.0.0.4/wlp-kernel-22.0.0.4.zip
おまけ
minirootfsは
aports
のscripts/genrootfs.shを使えば、簡単にできます。
main/busybox配下でbusybox-1.30.1を作成後、それを使ってみます。
./genrootfs.sh -o test-x86_64.tar.gz busybox-1.30.1-r1.apk \
ssl_client-1.30.1-r1.apk \
alpine-baselayout alpine-keys apk-tools libc-utils
8/26時点でalpine:latestのDockerfileは以下でした。
FROM scratch
ADD alpine-minirootfs-3.10.2-x86_64.tar.gz /
CMD ["/bin/sh"]
参考リンク
How_to_make_a_custom_ISO_image_with_mkimage
Alpine Linux用パッケージを作成する
チェックしたいサイトは以下です。
・IBM JRE
https://public.dhe.ibm.com/ibmdl/export/pub/systems/cloud/runtimes/java/meta/jre/linux/x86_64/index.yml
・Liberty
https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/downloads/wlp/index.yml
Libertyのリリース予定は
Recommended updates for WebSphere Application Serverにありますが、あくまで予定なので実際に早まることが多いです。
変更履歴
(2019/6/22) rootfsを3.9.3から3.10.0に変更、Libertyを19.0.0_06に変更
(2019/6/27) keytoolが以下のエラーになるので、ホスト名変更を追加
デフォルトの SSL 証明書を作成できません。
keytool エラー (英語の場合があります): java.lang.RuntimeException: java.io.IOException: Invalid IPAddressName 992fdba70de5
(2019/7/11)jreを1.8.0_sr5fp37に変更。server.xml、earのコピーを削除。ホスト名の設定部分を削除。
(2019/7/24)index.ymlに無いバージョンの対処を追加。19.0.0.7など。
(2019/8/1x?)[index.yml]https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/downloads/wlp/index.yml)が更新されていましたので、ベースのLibertyを19.0.0.7に変更。
(2019/8/21)JREを1.8.0_sr5fp40に、Libertyを19.0.0.8にバージョンアップ。
(2019/8/26)alpine linuxのバージョンを3.10.2に変更。ALPINE_GLIBCのバージョンを2.30に変更。
(2019/9/15)Libertyを19.0.0.9にバージョンアップ。
(2019/9/29)jreの8.0.5.41について追記。
(2019/10/11)Libertyの19.0.0.10がリリースされた。index.yamlも更新されています。
(2019/10/22)Liberty-19.0.0.10に更新しきれなかった部分を修正。
(2019/10/23)Alpineのrootfsを3.10.3に更新。
(2019/11/13)Libertyを19.0.0.11にバージョンアップ。
(2020/3/6)Libertyを20.0.0.2に、Alpineのrootfsを3.11.3に、jreを8.0.6.5にバージョンアップ。
(2020/3/24)Libertyを20.0.0.3に、Alpineのrootfsを3.11.5にバージョンアップ。
(2020/4/12)Libertyを20.0.0.4に、jreを8.0.6.7にバージョンアップ。ただし、Libertyはindex.ymlにまだないです。
(2020/4/15)Liberty-20.0.0.4がindex.ymlに入ったので修正。Libertyのバージョン指定を修正。
(2020/5/8)Libertyを20.0.0.5に、jreを8.0.6.10にバージョンアップ。
修正。Libertyのバージョン指定を修正。
(2020/5/23)alpline linuxを3.11.6にバージョンアップ、websphere-libertyの状況を更新。
(2020/6/12)alpline linuxを3.12.0に、Libertyを20.0.0.6にバージョンアップ。
(2020/6/27)jreを8.0.6.11にバージョンアップ。
(2020/7/8)Libertyを20.0.0.7にバージョンアップ。
(2020/8/5)Libertyを20.0.0.8にバージョンアップ。
(2020/9/13)Libertyを20.0.0.9に、jreを8.0.6.15にバージョンアップ。
(2020/9/30)Libertyを20.0.0.10に、jreを8.0.6.16にバージョンアップ。
(2020/12/11)Libertyを20.0.0.12にバージョンアップ。
(2020/12/11)jreを8.0.6.20にバージョンアップ。
(2021/02/19)Libertyを21.0.0.2にバージョンアップ。
(2021/03/15)jreを8.0.6.26にバージョンアップ。
(2021/03/22)Libertyを21.0.0.3にバージョンアップ。
(2021/03/31)alpline linuxを3.13.3にバージョンアップ。
(2021/05/05)alpline linuxを3.13.5にバージョンアップ。Libertyを21.0.0.4にバージョンアップ。
(2021/05/31)Libertyを21.0.0.5に、jreを8.0.6.30にバージョンアップ。
(2021/07/26)alpline linuxを3.14.0に、Libertyを21.0.0.7に、jreを8.0.6.31にバージョンアップ。
(2021/08/21)alpline linuxを3.14.1に、Libertyを21.0.0.8にバージョンアップ
(2021/09/17)alpline linuxを3.14.2に、Libertyを21.0.0.9に、jreを8.0.6.36にバージョンアップ。
(2021/12/19)alpline linuxを3.15.0に、Libertyを21.0.0.12に、jreを8.0.7.0にバージョンアップ。
(2022/01/01)GNU C Libraryの取得方法を変更。busyboxのバージョンを1.34.1
(2022/01/18)Libertyを22.0.0.1にバージョンアップ。
(2022/02/15)Libertyを22.0.0.2にバージョンアップ。
(2022/03/10)jreを8.0.7.5にバージョンアップ。
(2022/03/26)Libertyを22.0.0.3に、alpline linuxを3.15.2にバージョンアップ。
(2022/04/01)alpline linuxを3.15.3にバージョンアップ。
(2022/04/22)Libertyを22.0.0.4に、alpline linuxを3.15.4にバージョンアップ。
(2022/04/30)jreを8.0.7.6にバージョンアップ。
(2022/05/28)Libertyを22.0.0.5に、alpline linuxを3.16.0にバージョンアップ。
(2022/06/12)Libertyを22.0.0.6にバージョンアップ。
(2022/07/13)Libertyを22.0.0.7にバージョンアップ。
(2022/07/13)jreを8.0.7.11にバージョンアップ。
(2022/07/14)起動メッセージ張り直し。
(2022/08/04)Libertyを22.0.0.8に、alpline linuxを3.16.1にバージョンアップ。busybox関連は別記事に移動しました。
(2022/08/31)Libertyを22.0.0.9に、alpline linuxを3.16.2にバージョンアップ。
(2022/09/21)jreを8.0.7.11にバージョンアップ。
(2022/10/29)jreを8.0.7.15に、Libertyを22.0.0.11にバージョンアップ。Libertyのindex.ymlからの検索を修正。
(2022/11/23)jreを8.0.7.20に、Libertyを22.0.0.12にバージョンアップ。