Laravel + Dockerで Oracle Databaseに接続する方法を紹介します。
スポンサーリンク
前提
今回紹介する記事では、以下の環境・バージョンを使用して検証しています。
- PHP 8.0
- Laravel 9
- Oracle Instant Client 12.1
- Docker
※ Oracle Database本体の用意はしません。(すでに別のサーバーにある前提)
Dockerfile
Oracle Instant Client をダウンロードする
まず、Oracle公式から、Linux用の Instant Clientをダウンロードする。
ダウンロードするのは「instantclient-basic-linux.x64-12.1.0.2.0.zip」と「instantclient-sdk-linux.x64-12.1.0.2.0.zip」の2つのファイルである。
ダウンロードしたファイルは、↓で作る Dockerfile
と同じディレクトリに置いておくこと。
Dockerfileの作成
PHPコンテナ用の Dockerファイルを作成する。 内容は次のとおり。
FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/
ENV LD_LIBRARY_PATH /usr/local/instantclient/
ENV TNS_ADMIN /usr/local/instantclient/
COPY instantclient-basic-linux.x64-12.1.0.2.0.zip /tmp
COPY instantclient-sdk-linux.x64-12.1.0.2.0.zip /tmp
RUN apt-get update \
&& apt-get install -y git openssh-client zlib1g-dev mariadb-client vim libzip-dev libpq-dev libonig-dev libpng-dev libjpeg-dev zip unzip \
&& docker-php-ext-configure gd --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install zip pdo_pgsql mbstring bcmath
#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
#Oracle Client
RUN apt-get install -y libaio1 wget && \
unzip /tmp/instantclient-basic-linux.x64-12.1.0.2.0.zip -d /usr/local/ && \
unzip /tmp/instantclient-sdk-linux.x64-12.1.0.2.0.zip -d /usr/local/ && \
ln -s /usr/local/instantclient_12_1 /usr/local/instantclient && \
ln -s /usr/local/instantclient_12_1/libclntsh.so.12.1 /usr/local/instantclient/libclntsh.so && \
export LD_LIBRARY_PATH=/usr/local/instantclient && \
docker-php-ext-configure oci8 --with-oci8=instantclient,/usr/local/instantclient && \
docker-php-ext-install oci8 && \
docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/usr/local/instantclient,12.1 && \
docker-php-ext-install pdo_oci && \
rm -rf /usr/local/*.zip
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
#WORKDIR /var/www
WORKDIR /workspace
RUN composer global require "laravel/installer"
ポイントは、Dockerfile
の中でダウンロードした Oracle Instant Clientを解凍し、コンテナイメージの /usr/local/
の下にインストールしている箇所だろう。
スポンサーリンク
「Laravel-oci8」のインストール
Oracleに接続するために必要な「Laravel-OCI8」をインストールする。「Laravel-OCI8」は、Laravel用のOracleデータベースドライバである。
composer.json
の require
に次の内容を足す。
"require": {
"yajra/laravel-oci8": "^9"
},
追加したら、次のコマンドでインストール。
composer update
config/app.php
config/app.php
の providers
に、Oracle接続用のプロバイダを追加する。
'providers' => [
Yajra\Oci8\Oci8ServiceProvider::class,
],
config/oracle.phpの作成
次のコマンドを実行して、config/oracle.php
を作成する。
php artisan vendor:publish --tag=oracle
.envに接続先を設定する
.env
を編集して、DB接続先の設定を行う。
DB_CONNECTION=oracle
DB_HOST=ホスト名
DB_PORT=1521
DB_DATABASE=データベース名(サービス名)
DB_USERNAME=ユーザ名
DB_PASSWORD=パスワード
ここまでの手順で、Laravelから Oracleに接続する設定は完了である。
適当なSQLを実行して、正常に接続できるか試してみよう!
$results = DB::select("select * from EMP");
スポンサーリンク
まとめ
Laravelで Oracle Databaseに接続する方法について解説してきました。
PostgreSQLや MySQLであれば、デフォルトでドライバが組み込まれていますが、Oracleの場合は、この記事で紹介したように最初にドライバのセットアップをする必要があります。
0 件のコメント:
コメントを投稿