Fahim Shariar Shoumik

Backend Engineer | Golang Specialist | Distributed Systems Architect

Dhaka, Bangladesh
Fahim Shariar Shoumik

About

Tech entrepreneur and backend specialist with 10+ years of experience building scalable systems using Golang, gRPC, and Docker-based microservices. Proven leadership in startups and developer platforms. Passionate about API-first design, plugin-based extensibility, and headless CMS architectures. Currently building Apito.io, an API development platform. Past projects include FHIR-compliant EHR systems, DevOps consulting, and open-source tooling.

Back to Blog

ওয়েব ডেভেলপমেন্ট ও ডকার (Docker) | পিএইচপি | ওরাকল | পর্ব ২.১

DockerWeb DevelopmentPHPOracleBengali

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 লাইসেন্স/সাপোর্ট প্রোডে অফিসিয়াল ইমেজ দেখুন; শিক্ষামূলক সেটআপে হাবের ইমেজ বুঝে ব্যবহার করবে।