
私たちは、開発者がテストできるように 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
答え2
Oracle Express が適している場合:
- Oracle XE 11g rpm をダウンロードします。
- alien を使用して rpm を deb に変換します。
- dpkg-deb コマンドを使用して deb パッケージを「抽出」します。
- 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。
- deb コマンドを使用して deb パッケージをビルドします。
これで、Oracle XE 11g の deb パッケージが手に入りました。インストールしてください。
しかし、まだ問題が残っています: /dev/shm。これを修正する方法は次のとおりです。
- /etc/init/mounted-dev.conf の次の行をコメントアウトします: [ -e /dev/shm ] || ln -s /run/shm /dev/shm。
- /etc/fstab に次の行を追加します: shm /dev/shm tmpfs size=2g 0 0
- 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 つあります。
docker run --privileged ...
インスタンスを起動する前に、より多くのメモリを使用して/dev/shm を再マウントします。- Docker を自分で変更して再構築します。この場合、1 回でイメージを作成できる 12c 用の Dockerfile を作成しました。参考: