概要
intra-mart(http://www.intra-mart.jp/) の環境をDockerコンテナ上に構築します。
CentOS7上で作業しています。
今回目指すイメージは以下のような感じです。
- 「/imart/system/initialsetting」が表示されるところまで確認する
- docker runした際に、imart.warをデプロイできるようにする
- データベースはコンテナ外のものを利用する
- Webサーバ(Apacheとか)は用意しない
試した各アプリケーションのバージョンです。
application | version | 説明 |
---|---|---|
Resin Pro | 4.0.48 | intra-martが配布しているものを利用します。 |
Oracle JDK | 1.8.0 u91 | |
intra-mart | 8.0.11(Karen) | |
Oracle | 12.1.0.2 | データベースは今回はコンテナ化の対象外です。 |
imart.warの作成
以下の手順を参考に別途作成しておいてください。
http://www.intra-mart.jp/download/product/iap/setup/iap_setup_guide/texts/create_war/index.html
Dockerビルド用のファイルを作成
Dockerfile
intra-mart Accel Platform セットアップガイドを参考にしつつ、以下のようなDockerfileを書きました。
- JDKのインストール
- OracleのJDKをインストールします。
- Resinのダウンロード/インストール
- Resinはintra-martで配布されているものを利用しています。
- ダウンロードにはユーザIDとパスワードが必要です。お持ちのユーザIDとパスワードをそれぞれDockerfileのRESIN_DOWNLOAD_USERとRESIN_DOWNLOAD_PASSWORDの環境変数に設定してください。
- ojdbc7.jarの配置(ojdbc7.jarは別途ダウンロードして来たものをコピーしています)
- resin.propertiesのコピー
- 別途用意してください。初期設定のままでいい場合は、
ADD resin.properties ${RESIN_HOME}/conf/resin.properties
の記述を消してください。
- 別途用意してください。初期設定のままでいい場合は、
From centos:7
RUN yum -y install gcc* && \
yum -y install binutils compat-libcap1 gcc gcc-c++ glibc glibc.i686 glibc-devel glibc.i686 ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++l7.i686 libstdc++-devel libstdc++-devel.i686 compat-libstdc++-33 compat-libstdc++-33.i686 libXi libXi.i686 libXtst libXtst.i686 make sysstat unzip && \
yum -y install wget
# install oracle jdk
ENV JDK_VERSION 8u91
ENV JDK_BUILD_NO b14
ENV JDK_PRM jdk-${JDK_VERSION}-linux-x64.rpm
ENV JAVA_HOME /usr/java/jdk1.8.0_91
RUN wget -q \
--no-check-certificate \
--no-cookies \
--header "Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/${JDK_VERSION}-${JDK_BUILD_NO}/${JDK_PRM} && \
rpm -ihv ${JDK_PRM} && \
rm -f ${JDK_PRM}
RUN echo 'export JAVA_HOME=$JAVA_HOME' >> /etc/profile && \
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> etc/profile
# install resin
ENV RESIN_VERSION 4.0.48
ENV RESIN_DOWNLOAD_USER XXXXXXXXX
ENV RESIN_DOWNLOAD_PASSWORD XXXXXXXXX
ENV RESIN_HOME /opt/resin-pro-${RESIN_VERSION}
RUN wget \
--http-user=${RESIN_DOWNLOAD_USER} \
--http-password=${RESIN_DOWNLOAD_PASSWORD} \
--auth-no-challenge \
-O /opt/resin-pro-${RESIN_VERSION}.tar.gz \
http://www.intra-mart.jp/download/product/iap/src/resin-pro-${RESIN_VERSION}.tar.gz
WORKDIR /opt
RUN tar xvzf resin-pro-${RESIN_VERSION}.tar.gz && \
rm -f resin-pro-${RESIN_VERSION}.tar.gz && \
cd /opt/resin-pro-${RESIN_VERSION} && \
./configure --prefix=/opt/resin-pro-${RESIN_VERSION} --enable-64bit && \
make && \
make install
# Setting resin
ADD ojdbc7.jar ${RESIN_HOME}/lib/ojdbc7.jar
ADD resin.properties ${RESIN_HOME}/conf/resin.properties
# deploy script setting
ENV WAR_FILE /temp/imart.war
ADD deploy.sh /opt/deploy.sh
RUN chmod a+x /opt/deploy.sh
EXPOSE 8080
CMD /opt/deploy.sh
deploy.sh
初回起動時にdeploy、2回目以降はdeployをスキップして、start-with-foregroundで起動するようなスクリプトを用意しておいてdocker run時にdeployできるようにしておく。
再デプロイのことは考慮していません。
#!/bin/sh
if [ -e ${RESIN_HOME}/webapps/imart]; then
${RESIN_HOME}/bin/resinctl -server app-0 start-with-foreground
else
${RESIN_HOME}/bin/resinctl -server app-0 start && \
sleep 20s && \
${RESIN_HOME}/bin/resinctl deploy ${WAR_FILE}
${RESIN_HOME}/bin/resinctl -server app-0 stop
${RESIN_HOME}/bin/resinctl -server app-0 start-with-foreground
fi
resin.properties
以下のページを参考に設定します。
http://www.intra-mart.jp/download/product/iap/setup/iap_setup_guide/texts/setting/resin_configuration_file.html
ojdbc.jar
別途、ダウンロードし入手してください。
http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html
Dockerイメージの作成
以下のようなディレクトリ構成にして、docker build
を実行します。
Dockerfile
deploy.sh
resin.properties
ojdbc7.jar
Dockerビルドを実行しイメージを作成します。
docker build -t imart-base:4.0.48 .
コンテナの起動
docker run
で起動します。
その際の注意点として、/temp/imart.warのwarファイルをデプロイするように指定しているので、-vでimart.warのあるディレクトリをマウントします。
ついでに、storageも永続化しておきたい場合は、マウントしておきます。
docker run --name imart -p 8080:8080 -v path/to/imartwar:/temp -v path/to/storage:/opt/resin-pro-4.0.48/storage-files imart-base:4.0.48
エラーなく起動すれば、http://server-ip/imart/system/login
にアクセスしていつものテナント設定画面が表示されるはずです。
最後に
ちょっと動作確認したり、使い捨てできるようなテスト環境として使ったりしたくて作業しています。
最終的には、Oracleのデータベースも込みでコンテナ化したいなぁと思っています。
あと、ログの確認したいときに、docker logsでは
Resin/4.0.48 started -server 'app-0' for watchdog at 127.0.0.1:6600 with foreground
としか、表示されなかったので、仕方なく、
docker exec コンテナID cat /opt/resin-pro-4.0.48/log/jvm-app-0.log
で起動時のエラーとか確認していました。