Oracle + PHP + এক ঢঙের এক্সটেনশন—ম্যানুয়ালি সেটআপ করলে যে frustration, সেটা একবার করলেই মনে থাকে। এখানে একটা রিয়েল স্টোরি: ইউনিতে PL/SQL প্রোজেক্ট; বেশিরভাগই PHP / Java / .NET নিয়ে যায়। আমি Laravel 5 + Oracle নিয়ে গিয়েছিলাম—আর তখনই বুঝলাম, এনভায়রনমেন্ট রিপিটেবল না হলে টিমওয়ার্ক যন্ত্রণা।
Dockerfile = স্ক্রিপ্ট যা ইঞ্জিন মানে
Dockerfile হলো ডকার ইঞ্জিনের জন্য ধাপগুলো লেখা—কী বেস ইমেজ, কী ইন্সটল, কী কপি। নিচেরটা আমার সেই যুগের সেটআপ (PHP 7, Apache, Oracle instant client, oci8)—আজ ভার্সন আপডেট করলেও ধারণা একই।
পুরো রেপো আগেই খোলা ছিল: laravel5-oracle-docker — ক্লোন করে Dockerfile দেখলেই বুঝবে।
FROM php:7-apache
MAINTAINER Fahim Shariar <[email protected]>
# installing required stuff
RUN apt-get update \
&& apt-get install -y unzip libaio-dev libmcrypt-dev git \
&& apt-get clean -y
# PHP extensions
RUN \
docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
&& docker-php-ext-configure mysqli --with-mysqli=mysqlnd \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mbstring \
&& docker-php-ext-install mcrypt
# xdebug, if you want to debug
RUN pecl install xdebug
# PHP composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
# apache configurations, mod rewrite
RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
# Oracle instantclient
ADD oracle/instantclient-basic-linux.x64-12.1.0.2.0.zip /tmp/
ADD oracle/instantclient-sdk-linux.x64-12.1.0.2.0.zip /tmp/
ADD oracle/instantclient-sqlplus-linux.x64-12.1.0.2.0.zip /tmp/
RUN 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/ \
&& unzip /tmp/instantclient-sqlplus-linux.x64-12.1.0.2.0.zip -d /usr/local/
RUN curl -O http://pear.php.net/go-pear.phar \
; /usr/local/bin/php -d detect_unicode=0 go-pear.phar
RUN ln -s /usr/local/instantclient_12_1 /usr/local/instantclient \
&& ln -s /usr/local/instantclient/libclntsh.so.12.1 /usr/local/instantclient/libclntsh.so \
&& ln -s /usr/local/instantclient/sqlplus /usr/bin/sqlplus \
&& echo 'instantclient,/usr/local/instantclient' | pecl install oci8
সংক্ষেপে কী হচ্ছে
- FROM php:7-apache — PHP 7 + Apache বেস।
- apt + এক্সটেনশন — Laravel/DB কানেকশনের জন্য প্রয়োজনীয় প্যাকেজ।
- Composer + mod_rewrite — PHP ডিপেন্ডেন্সি আর রাউটিং।
- Oracle ZIP → /usr/local — instant client আনজিপ, তারপর symlink + pecl oci8 — এখানেই বেশিরভাগ ম্যানুয়াল সেটআপে হোঁচট খায়।
তারপর docker build . — ইন্টারনেট থেকে লেয়ার টেনে ইমেজ বানায়। ম্যানুয়ালি করলে দেখা যায়: SDK ভার্সন মিলছে না, PHP 7-তে এক্সটেনশন সাপোর্ট, oci8 কম্পাইল ফেল—চেনা গল্প।

ডাটাবেসও কনটেইনারে
PHP কনটেইনার চললেও Oracle DB তো লাগবে। ৩ GB+ ইন্সটলার ডাউনলোড না করে Docker Hub এ খুঁজলেই পাওয়া যায়—আমি তখন sath89/oracle-xe-11g ব্যবহার করেছিলাম।
একটা কনটেইনার আরেকটার সাথে লিঙ্ক করতে গিয়ে কমান্ডের ঝাঁপ ধরা পড়ে। সেখানে Docker Compose—এক YAML-এ ওয়েব + DB, পোর্ট, ভলিউম, links।
web:
container_name: php7_apache_oci8
build: .
ports:
- "80:8888"
volumes:
- ./src:/var/www/html/
- ./conf/apache:/etc/apache2/sites-enabled/
- ./conf/php:/usr/local/etc/php/
links:
- oracle
oracle:
image: sath89/oracle-xe-11g
hostname: oracle-php
container_name: oracle-php
ports:
- "1521:1521"
volumes:
- /home/fahim/oracle_data:/u01/app/oracle
docker-compose build && docker-compose up — এক কমান্ডে পুরো স্ট্যাক। নতুন ডেভের জন্য: ডকার + কম্পোজ ইন্সটল, রেপো পুল, আপ—আর কনফিগ ডকুমেন্টেশন ধরে বসে থাকতে হয় না।
আজকের দিনে
PHP 7, পুরনো pear URL, নির্দিষ্ট Oracle ZIP—সব আপডেট করলে Dockerfile বদলাতে হবে। কিন্তু মেসেজটা অপরিবর্তিত: জটিল স্ট্যাককে কোডের মতো ভার্সন করা যায়—সেটাই টিমে টাকা।
Oracle লাইসেন্স/সাপোর্ট প্রোডে অফিসিয়াল ইমেজ দেখুন; শিক্ষামূলক সেটআপে হাবের ইমেজ বুঝে ব্যবহার করবে।
