以下は、PHP 8.2.3-fpmイメージにOracleXEがインストールされたUbuntuベースのDockerfileの例です。
FROM ubuntu:latest
# Oracle Instant Clientのダウンロードとインストール
RUN apt-get update && apt-get install -y \
libaio1 \
alien \
curl \
zip \
&& curl -o oracle-instantclient19.8-basic_19.8.0.0.0-1_amd64.deb https://download.oracle.com/otn_software/linux/instantclient/19800/oracle-instantclient19.8-basic_19.8.0.0.0-1_amd64.deb -SL \
&& curl -o oracle-instantclient19.8-devel_19.8.0.0.0-1_amd64.deb https://download.oracle.com/otn_software/linux/instantclient/19800/oracle-instantclient19.8-devel_19.8.0.0.0-1_amd64.deb -SL \
&& alien -i oracle-instantclient19.8-basic_19.8.0.0.0-1_amd64.deb \
&& alien -i oracle-instantclient19.8-devel_19.8.0.0.0-1_amd64.deb \
&& rm -rf oracle-instantclient19.8-basic_19.8.0.0.0-1_amd64.deb \
&& rm -rf oracle-instantclient19.8-devel_19.8.0.0.0-1_amd64.deb \
&& echo /usr/lib/oracle/19.8/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf \
&& ldconfig
# PHPのインストールと必要な拡張のインストール
RUN apt-get update && apt-get install -y \
php8.2-fpm \
php8.2-oci8 \
php8.2-pdo_oci \
php8.2-curl \
php8.2-gd \
php8.2-mbstring \
php8.2-zip \
libzip4 \
nginx \
supervisor \
&& rm -rf /var/lib/apt/lists/*
# nginxの設定ファイルの配置
COPY nginx/default /etc/nginx/sites-available/default
# supervisorの設定ファイルの配置
COPY supervisor/* /etc/supervisor/conf.d/
# PHP-FPMとnginxのポート設定
EXPOSE 9000 80
# supervisor起動コマンド
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
上記のDockerfileはOracle Instant Client、PHP、必要なPHP拡張機能、nginx、supervisorをインストールします。Nginxの設定ファイルとsupervisorの設定ファイルをコピーし、supervisorを起動するCMDを指定しています。必要に応じて、ポートをマッピングするためにdocker runコマンドを使用してコンテナを起動する必要があります。
以下は、PHP 8.2.3-fpmイメージをベースに、OracleXEと接続するためのDockerfile例です。
FROM php:8.2.3-fpm
# 必要なパッケージをインストールし、Oracle Instant Clientをダウンロード
RUN apt-get update && \
apt-get install -y \
libnsl-dev \
libaio-dev \
curl \
unzip \
libffi-dev \
git \
build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/local/lib/php/extensions \
&& wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-basiclite-linux.x64-21.1.0.0.0.zip \
--header "Cookie: oraclelicense=accept-securebackup-cookie;" \
&& unzip instantclient-basiclite-linux.x64-21.1.0.0.0.zip \
&& rm instantclient-basiclite-linux.x64-21.1.0.0.0.zip \
&& mv instantclient_21_1 /usr/local/instantclient \
&& ln -s /usr/local/instantclient/libclntsh.so.21.1 /usr/local/instantclient/libclntsh.so \
&& ln -s /usr/local/instantclient/libocci.so.21.1 /usr/local/instantclient/libocci.so \
&& ln -s /usr/local/instantclient/libipc1.so /usr/lib/libipc1.so \
&& ln -s /usr/local/instantclient/libmql1.so /usr/lib/libmql1.so \
&& ln -s /usr/local/instantclient/libociicus.so /usr/lib/libociicus.so \
&& ln -s /usr/local/instantclient/libons.so /usr/lib/libons.so \
&& ln -s /usr/local/instantclient/libnnz21.so /usr/lib/libnnz21.so \
&& ln -s /usr/local/instantclient/libclntshcore.so.21.1 /usr/lib/libclntshcore.so.21.1 \
&& ln -s /usr/local/instantclient/libclntsh.so /usr/lib/libclntsh.so \
&& ln -s /usr/local/instantclient/libocci.so /usr/lib/libocci.so \
&& ln -s /usr/local/instantclient/libociei.so /usr/lib/libociei.so
# pdo_ociとoci8を有効にする
RUN 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,21.1 \
&& docker-php-ext-install pdo_oci
このDockerfileでは、ベースのPHPイメージを php:8.2.3-fpm
に設定し、必要なパッケージをインストールしています。
Oracle Instant Clientは、 basiclite
ダウンロードパッケージからインストールされます。Oracleのダウンロードページから、ユーザー名とパスワードを入力して、自分の環境に最適なバージョンをダウンロードしてください。
このDockerfileは、pdo_ociおよびoci8拡張機能も有効にしています。これらの拡張機能は、PDOおよびOCI8ドライバーを提供し、Oracleデータベースに接続し、操作するために必要です。