Oracle 公式のスクリプトを使用して Oracle Database を Docker 上に構築します。今回は Oracle Database Enterprise Edition 12.1.0.2.0 を構築します。
データベースを構築するまでの手順は次の通りです。
- oracle/docker-images の準備
- インストールバイナリの準備
- Oracle Database 環境の作成
- データベースの作成
- 接続確認
oracle/docker-images の準備
Oracle 社公式の Dockerイメージを作成するスクリプト群が Github 上で公開されています。[Clone or download]ボタンを押してダウンロードするか、Git を使用してダウンロードしてください。
docker-images/OracleDatabase ディレクトリが Oracle Database 用のスクリプト群です。
インストールバイナリの準備
インストールバイナリは次のリンクからOTNライセンスに同意の上ダウンロードします。インストールするエディションと OS ごとにバイナリが異なります。エディションを選択の上、Linux x86-64 の File 1 と File 2 の両方をダウンロードしてください。今回は 12.1.0.2.0 の Enterprise Edition を使用します。
ダウンロードした 2 つのバイナリは zip 形式のまま docker-images/OracleDatabase/dockerfiles/12.1.0.2 ディレクトリへ格納してください。
Oracle Database 環境の作成
Oracle Database の環境作成はシェルスクリプトを実行するだけです。シェルスクリプトには引数としてバージョンとエディションを選択します。現時点でのバージョンは 11.2.0.2 と 12.1.0.2 を選択できます。今後新しいバージョンがリリースされると選択できるバージョンが変わる可能性がありますのでご注意ください。選択できるエディションは選択したバージョンによって異なります。バージョンに 11.2.0.2 を選択すると Expres Edition (XE)、12.1.0.2 を選択すると Standard Edition 2 (SE)、Enterprise Edition (EE) から選択できます。
シェルスクリプトは docker-images/OracleDatabase/dockerfiles にある buildDockerImage.sh を使用します。引数は -v オプションに続いてバージョンを指定し、選択したエディションによって XE が -x、SE が -s、EE が -e を指定します。
今回はOracle Database Enterprise Edition 12.1.0.2 の環境を作成します。
> cd docker-images/OracleDatabase/dockerfiles > ./buildDockerImage.sh -v 12.1.0.2 -e Oracle Database Docker Image for 'ee' version 12.1.0.2 is ready to be extended: --> oracle/database:12.1.0.2-ee Build completed in 1486 seconds.
データベースの作成
Oracle Database はマルチテナントに対応しており、コンテナデータベースとプラガブルデータベースで構成されています。この Docker イメージではコンテナデータベースと 1 つのプラガブルデータベースを作成します。データベースの作成ではこの 2 つのデータベースの名前を環境変数として指定します。 Oracle Database が使用するポートは作成したデータベースに接続するポートと管理ツールへアクセスするポートがあります。
コンテナデータベースの名前に相当する環境変数は ORACLE_SID、プラガブルデータベースの名前に相当する環境変数は ORACLE_PDB です。データベースへ接続するポートは 1521 、管理ツールへアクセスするポートは 5500 です。また、データベースのデータは /opt/oracle/oradata に格納されます。
今回は、orcl と言う名前のコンテナデータベースと pdb1 という名前のプラガブルデータベースを作成します。両ポートとも Docker ホストの同じポートへバインドし、データの格納されるディレクトリは Docker ホストの /mnt/oradata にマッピングします。 起動すると管理ユーザ用のパスワードが出力されますのでご注意ください。この例ではパスワードは下記のZ6koiFT2K8A=になります。
> docker run --name orcl -p 1521:1521 -p 5500:5500 -v /mnt/oradata:/opt/oracle/oradata \ > -e ORACLE_SID=orcl -e ORACLE_PDB=pdb1 oracle/database:12.1.0.2-ee ORACLE AUTO GENERATED PASSWORD FOR SYS, SYSTEM AND PDBAMIN: Z6koiFT2K8A= LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 28-DEC-2016 02:07:20 Copyright (c) 1991, 2014, Oracle. All rights reserved. Starting /opt/oracle/product/12.1.0.2/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 12.1.0.2.0 - Production System parameter file is /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora Log messages written to /opt/oracle/diag/tnslsnr/cbd0712a61e2/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 28-DEC-2016 02:07:22 Uptime 0 days 0 hr. 0 min. 1 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora Listener Log File /opt/oracle/diag/tnslsnr/cbd0712a61e2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) The listener supports no services The command completed successfully Copying database files 27% complete Creating and starting Oracle instance 45% complete Completing Database Creation 72% complete Creating Pluggable Databases 100% complete Look at the log file "/opt/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details. SQL*Plus: Release 12.1.0.2.0 Production on Wed Dec 28 02:22:29 2016 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> System altered. SQL> Pluggable database altered. SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options ######################### DATABASE IS READY TO USE! ######################### XDB installed. XDB initialized. Resize operation completed for file# 4, old size 240640K, new size 250880K Wed Dec 28 02:22:21 2016 Resize operation completed for file# 4, old size 250880K, new size 256000K Wed Dec 28 02:22:29 2016 ALTER SYSTEM SET control_files='/opt/oracle/oradata/orcl/control01.ctl' SCOPE=SPFILE; ALTER PLUGGABLE DATABASE pdb1 SAVE STATE Completed: ALTER PLUGGABLE DATABASE pdb1 SAVE STATE
2016年12月28日現在では Docker ホストが保存領域として NFS や ZFS を使用している場合にはデータベースの作成でエラーが出てしまいます。プルリクをしているのでマージされればこの様な環境でもエラーが起きなくなるはずです。
接続確認
構築したデータベースへ接続してみましょう。 接続するためのツールは、データベースへの接続では Oracle SQL Developer を使用し、管理ツールである Oracle Enterprise Manager Database Express への接続ではブラウザを使用します。 Docker ホストの IP アドレスは 192.168.0.3 です。環境に応じて適宜読み替えてください。
Oracle SQL Developer
図はプラガブルデータベースへの接続例です。プラガブルデータベースへの接続はユーザ名に sys 、パスワードに先ほど出力された Z6koiFT2K8A=、ロールに SYSDBA を選択、ホスト名に Docker ホストの IP アドレス、ポートに 1521、サービス名に ORACLE_PDB で指定した pdb1 を指定します。
コンテナデータベースへの接続はサービス名の代わりに SID に ORACLE_SID で指定した orcl を指定します。
Oracle Enterprise Manager Database Express
ブラウザで次の URL へアクセスします。
ユーザ名に sys 、パスワードに先ほど出力された Z6koiFT2K8A=、SYSDBA 権限を選択し、ログインボタンを押すとログインできます。