Docker は Ubuntu に Oracle 11g データベースをインストールするのに役立ちますか?

Docker は Ubuntu に Oracle 11g データベースをインストールするのに役立ちますか?

私たちは、開発者がテストできるように Oracle 11g インスタンスを提供しようという共通の問題に苦労しています。私たちの標準ビルド エージェントは Ubuntu 12.04 に基づいていますが、Oracle は RedHat ベースの OS のみをサポートしています。

Ubuntu に Oracle をインストールする方法に関するハックがネット上にいくつかありますが、それらは非常に脆弱で、当てずっぽうなようです。

Oracle をサポートするためだけに、RedHat (/CentOS) 上でビルド サーバー Puppet 構成全体をサポートする必要は避けたいので、標準の Ubuntu システム上で Oracle に必要な RedHat のような環境を提供するために Docker を使用できるかどうか考え始めました。Oracle は独自のコンテナーで実行されますが、ビルド エージェントの残りの部分は標準の Ubuntu 上で実行され、TCP 経由で Oracle と通信できるというアイデアです。

LXC とは何か、そして LXC と KVM/VirtualBox などの本格的な仮想化との違いはわかっていますが、それでも可能かどうか疑問に思っていました。

ありがとう。

答え1

これが私のフォークです:

  • 画像のサイズを3.8Gから825MBに縮小
  • データベースの初期化がイメージ構築フェーズから外れました
  • コンテナの起動時にデータベースファイルがマウントされていない状態でデータベースが初期化されるようになりました。
  • コンテナ外でのメディア再利用のサポート
  • コンテナ停止時に正常なシャットダウンを追加
  • sshdを削除しました

こちらで確認できます:
参考:
参考:

答え2

Oracle Express が適している場合:

  1. Oracle XE 11g rpm をダウンロードします。
  2. alien を使用して rpm を deb に変換します。
  3. dpkg-deb コマンドを使用して deb パッケージを「抽出」します。
  4. deb スクリプトを変更します。
    • preinst の先頭で [ "$1" != "1" ] を [ "$1" != "install" ] に変更します。
    • postint の先頭で [ "$1" = "1" -o -z "$2" ] を [ "$1" = "configure" -a -z "$2" ] に変更します。
    • prerm と postrm で [ "$1" = "0" ] を [ "$1" = "remove" -o "$1" = "purge" ] に変更します。
    • postinst および prerm で 'chkconfig' コマンドを 'update-rc.d' コマンドに変更します。
    • init スクリプトで、一部のシステム コマンドの絶対パスを削除します。/etc/sysconfig/oracle-xe を /etc/default/oracle-xe に修正します。/var/lock/subsys を /var/lock に修正します。など...
    • 制御ファイルに依存関係を追加します: bc & libaio1。
  5. deb コマンドを使用して deb パッケージをビルドします。

これで、Oracle XE 11g の deb パッケージが手に入りました。インストールしてください。

しかし、まだ問題が残っています: /dev/shm。これを修正する方法は次のとおりです。

  1. /etc/init/mounted-dev.conf の次の行をコメントアウトします: [ -e /dev/shm ] || ln -s /run/shm /dev/shm。
  2. /etc/fstab に次の行を追加します: shm /dev/shm tmpfs size=2g 0 0
  3. rm -f /dev/shm; mkdir /dev/shm; shm をマウント

Oracle XEを起動します: service oracle-xe configure

答え3

私は以下を使用していますDockerイメージかなりの成功を収めました。

実行するには:

 docker pull wnameless/oracle-xe-11g

そして

 docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g

答え4

これは間違いなく実現可能なアプローチです。私たちはホストマシンに Ubuntu 14.04 を使用し、開発目的で Docker コンテナ内で複数の Oracle 11g インスタンスも実行しています。

現在(Docker 1.5)11gと12cの両方での主な問題は、Dockerのハードコードされた共有メモリ制限です。問題 #2606現在、この問題を回避する方法は 2 つあります。

  1. docker run --privileged ...インスタンスを起動する前に、より多くのメモリを使用して/dev/shm を再マウントします。
  2. Docker を自分で変更して再構築します。この場合、1 回でイメージを作成できる 12c 用の Dockerfile を作成しました。参考:

関連情報