dockerでOracleをEUCで動かそうとして諦めた
過程で色々詳しくなったのでメモ
やりたかったこと
下記記事で、Oracleをdockerコンテナで動かすことができました。
Oracleをdockerで動かす - doilux’s tech blog
そもそもなんでdockerで動かしたかったのかというと、JenkinsのDBのIOのテストをスケールアウトさせたいためです。テストをコンテナ内で動かせたらJenkinsサーバーをいい感じにスケールアウトできるはず。
ただ、諸般の事情により、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