Docker for Mac を利用して PHP + Oracle12c の環境を構築します。 Composer で様々なフレームワークがインストールできる Oracle + PHP のベースとなるリポジトリです。
Mac用ですので、Windowsは適宜読み替えてください。
- Docker for Mac
- Mac OS X 10.13
- Docker Version 18.06.0-ce-mac70
- Docker compose 1.22
- Docker Machine 0.15
docker-compose を使って、イメージのビルド・コンテナ生成を行ってCakePHPのサンプルコードを動かすまでのチュートリアルです。 data/htdocsが初期のドキュメントルートになります。
# イメージ生成・コンテナ作成・実行
docker-compose up -d
#実行中のコンテナ確認
docker ps
# phpコンテナへ入る
docker exec -it cakeoracle_php_1 /bin/sh
# 動作確認用のサンプルプロジェクト生成
composer create-project --prefer-dist cakephp/app bookmarker
exit
$ docker-compose down
# docker-compose.yml の以下を設定
volumes:
# - "./data/htdocs:/var/www/html"
- "./data/htdocs/bookmarker:/var/www/html"
$ docker-compose up
ドキュメントルートにphpMyAdminを置くと mysql の接続確認が楽にできます。
config.inc.php にDockerのコンテナ名を記載すれば、動作します。
$cfg['Servers'][$i]['host'] = 'cakeoracle_mysql_1';
User Id : sys, system
Password : oracle
Tnsname : XE
$ docker exec -it cakeoracle_oracle_1 bash
# impdp system/oracle directory=DATA_PUMP_DIR dumpfile=MYDB.DMP log=expdp_MYDB.log
ホストPCからORACLEに接続します。
Chromeだと失敗したのでFireFoxで動作確認しています。
http://localhost:8080/em
user: sys
password: oracle
connect as sysdba: true
GUIアプリで管理画面を開きます。利用については以下を参考に。
http://www.oracle.com/technetwork/jp/developer-tools/sql-developer/downloads/index.html
CUIで管理します。Oracleのサイトにログインしrpmをダウンロードしてインストール。 AlpineLinuxには入っていないので別のコンテナから利用ください。
oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.x86_64.rpm
インストール
$ rpm -ivh oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm
$ rpm -ivh oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.x86_64.rpm
LD_LIBRARY_PATHを設定
$sudo vi /etc/ld.so.conf.d/oracle.conf
ldconfig
/usr/lib/oracle/18.3/client64/lib
設定が済んだら以下にて接続が可能となります。
$sqlplus system/oracle@//localhost:1521/xe
OraclePDOを使用して、CakePHP3からORACLEに接続します。 詳しい説明は、以下URLを参照ください。
https://github.com/CakeDC/cakephp-oracle-driver
最初にコンポーザーでドライバーをインストールします。
# phpコンテナへ入る
docker exec -it cakeoracle_php_1 /bin/sh
# 通常通りにプロジェクトを生成します。
composer create-project --prefer-dist cakephp/app cakedc
# 生成した(もしくは既存の)プロジェクトに移動します。
cd cakedc
# composer で cakephp-oracle-driver をインストールします。
composer require cakedc/cakephp-oracle-driver
次にプラグインの設定を bootstrap.php に編集します。
<span class="pl-s1"><span class="pl-c1">Plugin</span><span class="pl-k">::</span>load(<span class="pl-s"><span class="pl-pds">'</span>CakeDC/OracleDriver<span class="pl-pds">'</span></span>, [<span class="pl-s"><span class="pl-pds">'</span>bootstrap<span class="pl-pds">'</span></span> <span class="pl-k">=></span> <span class="pl-c1">true</span>]);
</span>
データソース設定例
'Datasources' => [
'default' => [
'className' => 'CakeDC\OracleDriver\Database\OracleConnection',
'driver' => 'CakeDC\OracleDriver\Database\Driver\OracleOCI', # For OCI8
//'driver' => 'CakeDC\OracleDriver\Database\Driver\OraclePDO', # For PDO_OCI
'host' => 'cakeoracle_oracle_1', # Database host name or IP address
//'port' => 'nonstandard_port', # Database port number (default: 1521)
'username' => 'system', # Database username
'password' => 'oracle', # Database password
'database' => 'xe', # Database name (maps to Oracle's <code>SERVICE_NAME</code>)
'sid' => 'xe', # Database System ID (maps to Oracle's <code>SID</code>)
'instance' => '', # Database instance name (maps to Oracle's <code>INSTANCE_NAME</code>)
'pooled' => '', # Database pooling (maps to Oracle's <code>SERVER=POOLED</code>)
]
]
Lumen + OCI8 でマイグレーションツールを動作する例を追加予定
MIT License. See LICENSE.