今回は実際に接続するところまで行います。
公式Dockerfile や参考リンク見た方が速いです
※注意
2017年11月7日時点ですと、
Windows10 でコンテナ起動時にボリューム指定すると
as SYSDBA
でログインできないようです。
環境
- docker toolbox on Windows 10
- docker-machine.exe version 0.10.0
-
docker version
の結果は以下の通り - プロキシ設定済
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 16:58:30 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 16:58:30 2017
OS/Arch: linux/amd64
Experimental: false
Dockerfile の入手
git 使えない場合は適宜 zip 落として解凍したりしましょう。
$ git clone https://github.com/oracle/docker-images.git
Oracle DB 本体の入手
本体は Docker のみで入手できません。
以下のリンクからダウンロードします(事前に無償OTN開発者の登録が必要)。
Oracle Database Software Downloads | Oracle Technology Network | Oracle
上記のリンクから、(12.2.0.1.0) - Standard Edition 2 and Enterprise Edition
の Linux x86-64 版をダウンロードしましょう(3.2GB もあるので気長に待ちましょう)。
ダウンロードが終わったら zip ファイルのまま(ファイル名の例: linuxx64_12201_database.zip)
docker-images-master/OracleDatabase/dockerfiles/12.2.0.1
の下に配置します。
Dockerfile.ee
と同じ場所に zip ファイルがあれば大丈夫です。
Docker イメージのビルド
以下のようにして Docker image のビルドをします。結構時間がかかります。
$ cd docker-images-master/OracleDatabase/dockerfiles
$ sh buildDockerImage.sh -v 12.2.0.1 -e
各オプションは以下の通りです。
Mac だと MD5 コマンドが無いらしいので -i
が必要らしいです。
-v: version to build
Choose one of: 11.2.0.2 12.1.0.2 12.2.0.1
-e: creates image based on 'Enterprise Edition'
-s: creates image based on 'Standard Edition 2'
-x: creates image based on 'Express Edition'
-i: ignores the MD5 checksums
-o: passes on Docker build option
注意
私の環境だと Docker が古かったためか以下の部分でエラーが起きました。
~途中省略~
HEALTHCHECK --interval=1m --start-period=5m \
CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
これはコンテナの異常を検知するためのオプションらしいです。
Docker 1.12の新機能、ヘルスチェック機能を使ってみる | さくらのナレッジ
今回はあくまで動かすことが目的なので、コメントアウトして対処しました。
もし同じところで躓いた方は参考にしてください。
(根本的な対処知ってる方いらしたら教えてください )
~途中省略~
# HEALTHCHECK --interval=1m --start-period=5m \
# CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
無事に Build が終わると、以下のようにして確認できます。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 12.2.0.1-ee 5a12cbb3b827 22 hours ago 13.3 GB
コンテナ作成
以下のようにしてコンテナを作成して起動します。
特にポートとか設定していないと接続できないので注意してください。
#!/bin/bash
docker run --name oracleDB \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=orcl -e ORACLE_PDB=pdb1 -e ORACLE_PWD=0racleDB \
-v /c/Users/User1/Desktop/studyOracleDB/oradata:/opt/oracle/oradata \
oracle/database:12.2.0.1-ee
※ 上記のパスワード「0racleDB」の先頭文字は数字の0です
パスワードは自動で生成されますが、自分で予め設定したい場合は
-e ORACLE_PWD=<your database passwords>
を入れればできます。
詳しくは 公式Dockerfile をご確認ください。
以下のようにしてコンテナを作成&起動します。
docker@default:/c/Users/User1/Desktop/studyOracleDB$ sh startDB.sh
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: 0racleDB
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 07-NOV-2017 01:24:24
Copyright (c) 1991, 2016, Oracle. All rights reserved.
~~~省略~~~
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Completed: alter pluggable database pdb1 open
~~~省略~~~
Completed: ALTER PLUGGABLE DATABASE pdb1 SAVE STATE
DATABASE IS READY TO USE!
が出てくれば OK!
さっそく接続していきましょう。
起動したコンテナ内の Oracle DB へ接続
ここでは 2通りの方法で接続します。
- ビルドしたイメージ内の sqlplusを使う
- SQL Developer(Windows 版)を使う
ビルドしたイメージ内の sqlplusを使う
ビルドしたイメージ内に sqlplus が入っているので、それを使います。
$ docker run --rm -ti oracle/database:12.2.0.1-ee sqlplus system/0racleDB@//192.168.99.100:1521/pd
b1
SQL*Plus: Release 12.2.0.1.0 Production on Tue Nov 7 01:44:07 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select count(1) from user_tables;
COUNT(1)
----------
128
SQL>
接続に必要な各パラメータは以下の通りです。
-
0oracleDB
は指定した、もしくは自動生成されたパスワード -
192.168.99.100:1521
は Docker-machine の ip ($ docker-machine ls
とかで確認できます) -
pdb1
はコンテナ起動時に指定したpdb名前 (何も指定しなかった場合は ORCLPDB1 になります)
SQL Developer(Windows 版)を使う
しかし上記の付属SQL developer だと、接続後に↑↓キーによる履歴参照だったり、
バックスペースキーが使えなかったりしてストレスフルなので、ツールでも接続してみます。
(Docker を Mac や Ubuntu でいれている場合は、lrwrap を入れれば解決できそう?)
まず以下のリンクから Oracle SQL Developer を入手します。
めんどうなので Windows 64-bit with JDK 8 included をダウンロードします。
展開して sqldeveloper.exe を開き、左側にある緑のプラスボタンをクリックします。
以下のような入力画面が出てくるので、値を入力しましょう。
下にある「テスト」ボタンを押下すれば、接続テストができます。
設定が正しければ、上記の画像のように左下の「ステータス」が「成功」となります。
以下は実際に「接続」を押してから、適当なクエリを投げた結果です。
ちゃんと DB に問い合わせできてますね!
これで自習が捗ります!
感想
Oracle DB めんどくちゃい
参考リンク
- https://github.com/oracle/docker-images/tree/master/OracleDatabase
- OS X 10.11で,Oracle Database 12cのDocker Imageを使ってみた - Qiita
- 公式 Oracle Database の Docker イメージを構築 - #chiroito ’s blog
- 自分の前回記事: プロキシ下で OracleDatabase 12.2 の docker image をビルド - Qiita
変更履歴
- 2017年11月7日
- startDB.sh 修正
- リンクの貼り忘れ対応