- intra-mart の検証環境を Docker コンテナ上に作成し、環境構築にかかる時間を削減
- AP(Resin)のコンテナについては、Git タグで管理しています。
- 利用したいバージョンのタグ指定の上 clone を実施してください。
$ git clone https://github.com/rinne-grid/docker-for-intra-mart-with-oracle im -b <tag_name>
tag | OS | Oracle バージョン | Java バージョン | 確認した Resin バージョン | 確認した iAP バージョン |
---|---|---|---|---|---|
v1.0-oracle12c-openjdk8 | centos:7.5.1804(※1) | Oracle Database 12.2.0 | OpenJDK8 | 4.0.56 より前のバージョンで確認 | iAP 2019 Summer で確認(※1) |
v2.0-oracle19c-openjdk11-rhel8.x | RHEL8.x | Oracle Database 19.3.0 | OpenJDK11 | 4.0.66 で確認 | iAP 2022 Spring で確認 |
(※1 iAP2019Summer のサーバ要件は、RHEL6.x, RHEL7.x が前提となります。)
ホスト名 | コンテナイメージ | 目的 |
---|---|---|
ap | Red Hat Enterprise Linux 8.x (Ootpa) | resin-pro の実行及び war デプロイ |
db | Oracle Database 19.3.0(ビルドで作成) | intra-mart に関するデータの保存 |
(本 Docker 関連ファイルを利用する場合は、あくまでも動作検証用の環境に留めておくことをおすすめします。本内容によって発生した障害等について、一切責任を負いません)
事象 | コマンド |
---|---|
Docker コンテナを開始したい | docker compose up |
Docker コンテナをビルドしたい | docker compose build --no-cache |
Docker コンテナを終了させたい | docker compose down |
DB データやストレージを削除して、 新しくテナント環境セットアップから始めたい(永続化しているコンテナのデータが全部消えるので要注意) |
docker compose up docker compose down -v docker compose up |
war ファイルをアンデプロイしたい | docker compose exec ap /ap-server/bin/resinctl undeploy imart |
war ファイルをデプロイしたい | docker compose exec ap /ap-server/bin/resinctl deploy /war/imart.war |
Oracle イメージを単独で作成したい場合 | docker build -t oracle19c_local:latest ./db/build --build-arg DB_EDITION=SE2 |
- AP サーバー(RHEL)
コンテナ名 | ホスト名 | ポート番号(ホスト) | ポート番号(コンテナ) |
---|---|---|---|
im_ap_ora | ap | 8888 | 8080 |
- Oracle Database
コンテナ名 | ホスト名 | DB 名 | ユーザ名 | パスワード | ポート番号(ホスト) | ポート番号(コンテナ) |
---|---|---|---|---|---|---|
im_db_ora | db | IMART | IMART | IMART | 15210 | 1521 |
本 Docker プロジェクトを利用して、intra-mart の環境を構築する手順を記述します。 (この手順は、Windows10 + Docker Desktop を前提にしています。必要に応じて適宜読み替えをお願いします。)
- 下記の URL より、Docker Desktop をダウンロードし、インストールします
https://www.docker.com/products/docker-desktop/
-
下記の URL より、Git for Windows をダウンロードし、インストールします
- 任意のフォルダで、以下のコマンドを実行し、docker プロジェクトをダウンロードします
> git clone https://github.com/rinne-grid/docker-for-intra-mart-oracle im
> cd im
- war ファイルの配置用フォルダを作成します
> mkdir .\ap\war
-
下記の URL にアクセスし、19.3 - Enterprise Edition (Standard Edition 2 を含む) を見つけ、Linux x86-64 をダウンロードします
https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html
-
ダウンロードしたファイル(LINUX.X64_193000_db_home.zip)を im/db/build フォルダに配置します
プロジェクト名を imart にして、必要なモジュールを選択し、設定を行います。 今回の Docker 環境をそのまま利用するためには、下記ファイルの設定を変更する必要があります
- storage-config.xml を設定する
- resin-web.xml を設定する
- 出力する war ファイル名を imart.war とする
(Docker プロジェクトの ap/.env ファイルを変更することで、別の値を指定することも可能です)
imart/config/storage-config.xml の 19 行目付近を以下のとおりに変更します
<root-path-name>/im-data/storage</root-path-name>
imart/resin-web.xml 内容を下記のとおりにします
<web-app xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin">
<character-encoding>UTF-8</character-encoding>
<log-handler name="" class="jp.co.intra_mart.common.platform.log.handler.JDKLoggingOverIntramartLoggerHandler"/>
<logger name="debug.com.sun.portal" level="warning" />
<!-- im_service(im_asynchronous) -->
<resource jndi-name="jca/work" type="jp.co.intra_mart.system.asynchronous.impl.executor.work.resin.ResinResourceAdapter" />
<jsp>
<recycle-tags>false</recycle-tags>
</jsp>
<database jndi-name="jdbc/default">
<driver>
<type>oracle.jdbc.driver.OracleDriver</type>
<url>jdbc:oracle:thin:@db:1521/RNGD</url>
<user>IMART</user>
<password>IMART</password>
</driver>
<max-connections>20</max-connections>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
</database>
<session-config>
<reuse-session-id>false</reuse-session-id>
<session-timeout>30</session-timeout>
</session-config>
<mime-mapping extension=".json" mime-type="application/json"/>
</web-app>
imart.war という名称で war ファイルを出力したら、 プロジェクトの im/ap/war フォルダの中に、war ファイルをコピーします
-
intr-mart のサイトにアクセスし、プロダクトファイルダウンロードボタンを押下します。
ライセンスキーを入力すると、ダウンロード可能なファイル一覧が表示されます。
なお、intra-mart サイトにも書いているとおり、.tar.gz が Linux 用の resin-pro になります。
最新の Resinresin-pro-4.0.xx.tar.gzを入手します。
- 上記の resin-pro.4.0.xx を展開し「resin-pro.4.0.xx」の名称を resin-pro に変更します
- resin-pro フォルダを im/ap フォルダにコピーします
-
下記の URL にアクセスし、ojdbc10.jar を見つけ、ダウンロードします
https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html
-
ojdbc8.jar を im/ap/resin-pro/lib にコピーします
- フォルダを確認し、以下の構成と同じになっていることを確認します
- ポイント
- im/ap/resin-pro フォルダがあり、直下に automake や lib フォルダ等が存在する
- im/ap/resin-pro/lib フォルダ内に odbc8.jar ファイルが存在する
- im/ap/war フォルダがあり、imart.war ファイルが存在する
- im/db/build フォルダ内に LINUX.X64_193000_db_home.zip が存在する
im
├─ap
│ │
│ ├─resin-pro
│ │ ├─lib
│ │ │ ├─ojdbc8.jar
│ │ │ │
│ │ │ ├─activation.jar など
│ │ │
│ │ ├─automake など
│ │
│ ├─war
│ │ └─imart.war
│ │
│ └─Dockerfile
│
├─db
│ ├─build
│ │ ├─LINUX.X64_193000_db_home.zip
│ │ │
│ │ ├─checkDBStatus.sh など
│ │
│ ├─scripts_setup
│ │ └─01_create_imart.sh
│ │
│ └─scripts_startup
│
├─.env
├─.gitignore
├─docker compose.yml
└─README.md
- im/ap/resin-pro/conf/resin.properties の 82 行目付近 - jvm_args
-Xmx, -Xms の値が、初期状態だと 8192m(8GB)が設定されているため、自分の PC のメモリ状況に合わせて変更します
jvm_args : -Dfile.encoding=UTF-8 -Djava.io.tmpdir=tmp -Xmx4096m -Xms4096m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=30 -XX:NewSize=512m -XX:MaxNewSize=512m -XX:+CMSClassUnloadingEnabled -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -Xloggc:log/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M
- HTTP プロキシの設定 im/.env
社内ネットワーク等で、プロキシサーバーを経由する必要がある場合、.env の HTTP_PROXY、HTTPS_PROXY に値を設定します
HTTP_PROXY=http://user:password@server:port/
HTTPS_PROXY=http://user:password@server:port/
- プロジェクトフォルダに移動します
> cd any_folder\im
- docker compose を利用し、コンテナを起動します
> $ docker compose up -d ; docker compose logs -f
イメージ作成の際にアップデート等の処理が走るので、15 分程度~ 30 分程度かかります。
terminal にいろいろと出力されていきます。 以下の表示が出たら終了と判断して良いと思います。Ctrl+C 等でを強制終了します。
db1 | DONE: Executing user defined scripts
db1 |
db1 | The Oracle base remains unchanged with value /opt/oracle
db1 | #################
db1 | DATABASE IS READY TO USE!
db1 | #################
db1 |
db1 | Executing user defined scripts
db1 | /opt/oracle/runUserScripts.sh: ignoring /opt/oracle/scripts/startup/*
db1 |
db1 | DONE: Executing user defined scripts
db1 |
db1 | The following output is now a tail of the alert.log:
db1 | EXTENT MANAGEMENT LOCAL AUTOALLOCATE
db1 | SEGMENT SPACE MANAGEMENT AUTO
db1 | 2023-03-25T12:07:49.996452+00:00
db1 | RNGD(3):Completed: CREATE TABLESPACE IMART
db1 | DATAFILE '/opt/oracle/oradata/ORCL/RNGD/IMART.dbf' SIZE 7000M REUSE
db1 | LOGGING
db1 | ONLINE
db1 | BLOCKSIZE 8K
db1 | EXTENT MANAGEMENT LOCAL AUTOALLOCATE
db1 | SEGMENT SPACE MANAGEMENT AUTO
ホストマシン側から Oracle Database に接続したい場合は下記の指定を行います。
(設定を変更していない場合)
ユーザ ID | パスワード | SID |
---|---|---|
IMART | IMART | localhost:15210/RNGD |
- resin の index ページに接続します
- resin のページが開けることが確認できたら、war ファイルをデプロイします
> docker compose exec ap /ap-server/bin/resinctl deploy /war/imart.war
コンテナ内の resin-pro の場所は、/ap-server です。 im/.env ファイル内の変数を変更することで、お好きな場所を指定できます。
- デプロイのコマンドが終了して、数分経ったら intra-mart のセットアップページにアクセスします
- 503 Service Temporarily Unavailable が発生する場合は、もう少しだけ待ってあげてください。
http://localhost:8888/imart/system/login
- 無事にテナント設定画面が表示されるので、テナント環境セットアップを実行します
- テナント ID は imart を指定します
- リソース参照名は一覧に表示されたものを選択します
- テナント登録を行い、しばらく待ちます
- テナント環境セットアップが適切に動作しているかについて、ログを確認したい場合以下のコマンドを実行します
$ docker compose exec ap bash
$ less -f ./log/jvm-app-0.log
- データベースやストレージ情報は Docker Volume に保存しているため、データは永続化されています
- 一度、docker compose down で終了し、もう一度 docker compose up を試して、システムログイン画面にアクセスすると、ダッシュボードが表示されることがわかります