この記事はなに?
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を導入
cd /path/to/src/directory
git clone https://github.com/oracle/docker-images.git
cd docker-images/OracleDatabase
↑に,具体的にどうやってビルドすればいいか書いてある.
11.2.0.2と,12.1.0.2の2バージョンに対応しているらしい.
Oracle DBのバイナリを入手
開発者向けにOracle Databaseを入手するためには,事前にOTN開発者ライセンスの入手(無償)が必要.
規約をよく読んでから入手.
-
OTN Developer License Terms - Oracle
-
自分用Oracle DBを「無償で」作ろう!「OTN開発者ライセンス」
その後,製品のダウンロードページへ行く.
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"の両方を入手.
ビルドしてイメージを入手
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チェックサムの確認をしないようにする必要があることに注意.
しばらく待つとイメージがインストールされる.
docker images
で.
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 12.1.0.2-ee e63a79a35266 2 hours ago 11.48 GB
のように表示されれば,無事イメージがビルドされている.
イメージからコンテナを起動
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ユーザ用のパスワードが表示される.
これを変更したい場合は,コンテナ起動後,
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ファイルを展開し,ディレクトリに入っているすべてのファイルを,同一のディレクトリ中に入れる.
このディレクトリを
ls -ld ~/src/instantclient_12_1
とした場合,
export ORACLE_HOME=~/src
export SQLPATH=$ORACLE_HOME/instantclient_12_1/
export PATH="$SQLPATH:$PATH"
のように環境変数を設定する(この設定は.bash_profileなどに記述するとよい).
Oracle DBにログイン
sqlplus system/<your password>@//localhost:1521/ORCLPDB1
無事ログインできれば,コンソールが表示される.
select table_name, tablespace_name, status from user_tables;
このSQLで現在のテーブル一覧とステータスが表示されればOK.