geek.conf.2

あるエンジニアの備忘録

Oracle 11gを実行するDockerコンテナをRUN

こんばんは。あらかじめ決められた僕です。
Infrastructure as a codeなツールを勉強するときはOracle11gで試す癖があります。
今回は、Oracle11gを実行するDockerコンテナを作りましたので共有します。

いきなり以下にDockerfileを貼ります。

Dockerfile for run Oracle11g

1: OSイメージはOracle Linux 6を使用
4-6:Oracleのユーザグループを作成
7-8:Oracleのユーザ作成とパスワード設定
9-10:Oracleユーザにグループを設定
11-13:ORACLE_HOME、ORACLE_BASE、インベントリー用のディレクトリをmkdr
14:Oracleデータベース用のテンプレートをCOPY
15:Oracle用ディレクトリすべてをOracleユーザの所有に設定
16:Oracle11gに必要なパッケージをyumインストール
17:Oracleに必要なカーネルパラメータが設定されたsysctl.confをCOPY
18:Oracle11gのインストールdisk1とdisk2を解凍して2つとも同じディレクトリに入れたdatabaseディレクトリをCOPY
19-20:databaseディレクトリの所有者をOracleユーザにして実行権限を付与
22-23:Oracleユーザでdatabaseディレクトリに移動
24-26:サイレントモードでrunInstaller
COPYしたdatabaseディレクトリにOracle11gインストール用の応答ファイルdb_install.rspを準備しておく
27-28:rootユーザでroot.shを実行
30:Oracle環境変数をexportするため.bash_profileをOracleユーザのホームディレクトリ直下にCOPY
ADDとCOPYだけど、ADDは解凍機能を持つので、解凍する場合に使う。単なるファイル置くだけならCOPYを使ってます。
31:Listenerとデータベースを設定するためのスクリプトoracle.shをCOPY
32:Oracleユーザのホームディレクトリ以下をOracleユーザ所有に設定
34:Listenerポートを外部に公開
35-36:OracleユーザでOracleホームディレクトリに移動
37:oracle.shを実行

よっしゃ。Dockerfileを作成したらbuildしましょう。
$ docker build -t "tsubauaaa/oracle-docker" .
割と時間かかりますが、buildが完了するとoraclelinuxとtsubauaaa/oracle-dockerの2つイメージが出来上がります。

それではRUNしたいのですが、このイメージを実行するとoracle.shが実行されます。oracle.shでは

  • .bash_oracleを読み込んでOracle環境変数をexport
  • listener.oraを作成
  • Listenerを開始
  • dbcaにOracleデータベース用テンプレートdb_create.dbtを指定してデータベース作成
  • Alertログをtail

をやります。

$ docker run -p 1521:1521 --ipc=host --name oracle-docker --hostname oracle-docker tsubauaaa/oracle-docker

コンテナを停止するとデータベースのデータは消えます。
こちらにDockerfileとかoracle.shといった関連ファイルを置いています。

github.com

こちらのサイトを参考にさせていただきました。

Installing the Oracle database in docker | Frits Hoogland Weblog

おしまい