OS X 10.11で，Oracle Database 12cのDocker Imageを使ってみた


# この記事はなに？
Dockerでアプリケーションのローカル開発環境を構築するにあたって，「Oracle DBのDocker Containerって使えないのかなぁ」と思ったら，公式が用意してくれていたので試してみました．
他にも，「Oracle試してみたいけど環境構築面倒…」という人にも使えるかと思います（Dockerならイメージの配布も簡単なので）．

# 注意点
* Dockerの導入方法については記載しません．
* 
このインストール方法はOracle社ページのブログをもとにしていますが，Oracle社としてはこの方法でのインストールのサポートはしていないみたいです．
 追記（2017/05/02）： 公式にリリースされたとのPress Releaseがありました．https://www.oracle.com/corporate/pressrelease/docker-oracle-041917.html

# 参考記事
基本的に下記記事をなぞったただけです．

* Creating an Oracle Database Docker image
	- https://blogs.oracle.com/developer/entry/creating_and_oracle_database_docker
	- Docker Containerの作成について参考にした．
* Mac OS XからOracle Databaseへ接続する方法あれこれ - 正論紅茶 | ～紅茶でも飲んで、言いたい事を言おう！～
	- https://www.tank-sakurai.com/mac-os-x_oracle-database/
	- SQL*Plusの導入について参考にした．


# 環境
Mac OS X 10.11.6
Docker 1.12.1 (Docker for Mac)


# 手順
コンテナを起動するまでの手順として，大きく分けて，

* Dockerfile（とビルド用スクリプト）をGithubから入手
* Oracle DBのバイナリを入手
* ビルドしてイメージを作成
* イメージからコンテナを起動

の4段階のプロセスがある．

加えて，DBにCLIから接続するために，SQL*Plusを導入し，実際にDBにログインするところまでを扱う．

## Oracle公式のDockerfileを導入

```bash
cd /path/to/src/directory

git clone https://github.com/oracle/docker-images.git

cd docker-images/OracleDatabase
```

https://github.com/oracle/docker-images/tree/master/OracleDatabase

↑に，具体的にどうやってビルドすればいいか書いてある．

11.2.0.2と，12.1.0.2の2バージョンに対応しているらしい．

## Oracle DBのバイナリを入手

開発者向けにOracle Databaseを入手するためには，事前にOTN開発者ライセンスの入手（無償）が必要．
規約をよく読んでから入手．

* OTN Developer License Terms - Oracle
	- http://www.oracle.com/technetwork/jp/licenses/standard-license-152015.html

* 自分用Oracle DBを「無償で」作ろう！「OTN開発者ライセンス」
	- https://blogs.oracle.com/oracle4engineer/entry/oracle_db_-otn_developer_license

その後，製品のダウンロードページへ行く．
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

今回入手したいのは，Oracle Database 12c Release 1 (12.1.0.2.0) - Enterprise Edition．
参考記事とは異なり，使用している端末のOSがOS Xなので少し悩んだが，コンテナ自体はLinuxなので（Dockerだから当たり前か），"Linux x86-64"のリンクから，"linuxamd64_12102_database_1of2.zip"，"linuxamd64_12102_database_2of2.zip"の両方を入手．

## ビルドしてイメージを入手

```bash
cd docker-images/OracleDatabase/dockerfiles

mv /path/to/binary/linuxamd64_12102_database_{1,2}of2.zip 12.1.0.2/

./buildDockerImage.sh -v 12.1.0.2 -e -i
```

1点，参考記事とは異なり，OS Xではデフォルトでmd5sumコマンドが用意されておらず，iオプションをつけてMD5チェックサムの確認をしないようにする必要があることに注意．

しばらく待つとイメージがインストールされる．

```bash
docker images
```

で．

```
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
oracle/database     12.1.0.2-ee         e63a79a35266        2 hours ago         11.48 GB
```

のように表示されれば，無事イメージがビルドされている．

## イメージからコンテナを起動
```bash
sudo docker run -p 1521:1521 --name gvenzl oracle/database:12.1.0.2-ee
```

実行後，しばらく待つと，

```
#########################
DATABASE IS READY TO USE!
#########################
```

のような文言が表示される．
これで，コンテナ（ここでは"gvenzl"という名前にしている）上のDBが起動し，Dockerホスト上から1521番ポートで見える状態になっているらしい（この後もスクリプトが終了しないのだが，問題ないのかは不明…）．

また，

```
ORACLE AUTO GENERATED PASSWORD FOR SYS, SYSTEM AND PDBAMIN
```

という文言の後に，systemユーザ用のパスワードが表示される．

これを変更したい場合は，コンテナ起動後，

```bash
cd docker-images/OracleDatabase/dockerfiles/12.1.0.2

PASS=<your password> # 参考記事中では，"LetsDocker"と設定している
sudo docker exec gvenzl ./setPassword.sh ${PASS}
```

とする．

## SQL*Plusを導入
http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
上記ページからOS X向けのクライアントとSQL*Plusを入手．
instantclient-basic-macos.x64-12.1.0.2.0.zip
instantclient-sqlplus-macos.x64-12.1.0.2.0.zip

両方のZIPファイルを展開し，ディレクトリに入っているすべてのファイルを，同一のディレクトリ中に入れる．

このディレクトリを

```bash
ls -ld ~/src/instantclient_12_1
```

とした場合，

```bash
export ORACLE_HOME=~/src
export SQLPATH=$ORACLE_HOME/instantclient_12_1/

export PATH="$SQLPATH:$PATH"
```

のように環境変数を設定する（この設定は.bash_profileなどに記述するとよい）．

## Oracle DBにログイン

```bash
sqlplus system/<your password>@//localhost:1521/ORCLPDB1
```

無事ログインできれば，コンソールが表示される．

```sql
select table_name, tablespace_name, status from user_tables;
```

このSQLで現在のテーブル一覧とステータスが表示されればOK．