Help us understand the problem. What is going on with this article?

intra-martが起動するDockerコンテナを作成する

More than 3 years have passed since last update.

概要

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で起動時のエラーとか確認していました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away