dockerでOracle DB 11gを動かす

12cを構築する方法はいくつか見つけたのですが、11gを構築する方法はあまり無かったのでメモ。 基本的にはOracleの公式とQiitaの記事を参考にしています。

github.com

qiita.com

環境

  • ホストOS: CoreOS(1576.5.0)
  • docker: 17.09.0-ce
  • docker-compose: 1.16.1

手順

  1. ここからoracle-xe-11.2.0-1.0.x86_64.rpm.zipをダウンロード
  2. dockerfiles/11.2.0.2/oracle-xe-11.2.0-1.0.x86_64.rpm.zipを置く
  3. 以下のコマンドでイメージを作成

     $ ./buildDockerImage.sh -v 11.2.0.2 -x -i
    
     ...
    
     Successfully tagged oracle/database:11.2.0.2-xe
    
    
       Oracle Database Docker Image for 'xe' version 11.2.0.2 is ready to be extended:
    
         --> oracle/database:11.2.0.2-xe
    
       Build completed in 160 seconds.
    

    ビルドが成功すると、以下のようにOracle DBのイメージが作成されている

      $ docker images
      oracle/database                                      11.2.0.2-xe         xxxxxxxxxxxx        24 hours ago        1.13GB
    
  4. データ永続化用のディレクトリを作成

     $ mkdir data
     $ sudo chown 1000:1000 data
    
  5. docker-compose.ymlを準備 gist.github.com

  6. 以下のコマンドで実行
    $ docker-compose up -d

注意点

永続化用のディレクトリのパーミッション

公式のドキュメントに

Has to be writable by the Unix "oracle" (uid: 54321) user inside the container!

とあったので、はじめはuidを54321としていましたが書き込みができませんでした。
CoreOSの他の永続化用ディレクトリと同じようにuidを1000にする必要があります。

DB起動時のオプション

ORACLE_SIDORACLE_PDBORACLE_CHARACTERSETは11gでは設定できません
オプション自体は受け取るようですが、起動時に失敗します