doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

dockerでOracleをEUCで動かそうとして諦めた

過程で色々詳しくなったのでメモ

やりたかったこと

下記記事で、Oracleをdockerコンテナで動かすことができました。

Oracleをdockerで動かす - doilux’s tech blog

そもそもなんでdockerで動かしたかったのかというと、JenkinsのDBのIOのテストをスケールアウトさせたいためです。テストをコンテナ内で動かせたらJenkinsサーバーをいい感じにスケールアウトできるはず。

f:id:doiluxng:20180211190546p:plain

f:id:doiluxng:20180211190558j:plain

ただ、諸般の事情により、Oracle文字コードEUCにする必要がありました。

コンテナ起動後にDB再作成してみる

docker-images/Dockerfile.xe at master · oracle/docker-images · GitHub

Dockerファイルを見ると、末尾に以下の記述があります。

CMD exec $ORACLE_BASE/$RUN_FILE

$RUN_FILEの中で、DBの作成を行なっています。 なので、以下の手順にあるとおり、この後createdb.shを読んでEUC指定でDB再作成したらうまくいくはず

Oracle 11g XEのDBをShift JIS化する - Qiita

で、実際うまくいきそうだったんですが、DBの再作成があまりにも時間がかかるので諦めました。 ちなみにUTFのDB作成は割と短時間で完了します。コードを追って見ると、どうやらデータファイルなどをリストアして作っているっぽくて、そのため普通にDBファイル諸々作るより速いのではないかと思われます。

DB作成済みのイメージ作ったらよくね?

そもそもなんでコンテナ実行時にDB作ってんの?と思ったので、DB作成済みのイメージを作ろうと思いまして、DockerFileを以下のように変えました(一部抜粋)

RUN exec $ORACLE_BASE/$RUN_FILE

HEALTHCHECK --interval=1m --start-period=5m \
   CMD [ "su", "-p", "oracle", "-c", "$ORACLE_BASE/$CHECK_DB_FILE > /dev/null || exit 1" ]

CMD tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log

結果、DBが起動してくれませんでしたorz コンテナに入って、sysユーザーでログインしてstartupを実行しても起動せず。。。

他に、/etc/init.d/oracle-xeの中身を変えたりとか、EUCのバックアップからリストアする、とか色々手はありそうなんですが、あんまりこれに時間もかけられないのでギブでorz