Tag: ডকার

3Jul

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

ডকার (Docker) নিয়ে আলোচনা করার আগে এই পর্বে একটা উদাহারন দিয়ে বুঝানোর চেষ্টা করব যে ডকার ডেভেলপমেন্ট ও প্রোডাকশন এনভাইরনমেন্ট এর জন্য কতটা সুবিধাজনক হতে পারে । উদাহরনের জন্য ওয়েব ডেভেলপমেন্ট  নিয়ে কথা বলি কারণ আমারা মোটামটি সবাই ওয়েব ডেভেলপমেন্টের সাথে পরিচিত এবং প্রোফেসনাল নয়ত ইউনিভার্সিটির জীবনে একবার না একবার একটা না একটা ওয়েব ডেভেলপমেন্ট প্রোজেক্ট তো করতেই হয়েছে ।

ইউনিভার্সিটিতে আমাদের ৩য় বর্ষে ২য় সেমিস্টারে Oracle ডাটাবেস এর PL/SQL দিয়ে একটা প্রোজেক্ট করতে বলা হয়েছিল । অনেকেই অনেক ল্যাঙ্গুয়েজ পছন্দ করে , তবে বেশিভাগই PHP , JAVA , .NET etc.. এর দিকে যায় প্রোজেক্ট করার সুবিধার জন্য ।  এখানে অমি PHP & Oracle PL/SQL নিয়ে আলোচনা করব ।

শুরুতেই একটা বিষয় বলে ফেলি সেটা হল ডকারফাইল (Dockerfile) । ডকারফাইল নিয়ে বিস্তারিত আমরা পরের পর্বে দেখব , এখন শুধু মাথায় এটা রাখলেই চলবে যে ডকারফাইল হল অনেকটা Script এর মত । মানে এখানে যা কিছু লিখা থাকবে ডকার ইঞ্জিন তাই করবে । এটাকে ডকার ইঞ্জিনের ইন্সট্রাকশন বলতে পারেন । নিচে একটা  ডকারফাইল (Dockerfile) দেওয়া আছে যেখানে ধাপে ধাপে বলা আছে যে  PL/SQL দিয়ে PHP ডেভেলপমেন্ট করতে হলে আপনাকে কি কি করতে হতে পারে ।

যেহেতু অমি আরও Laravel 5 Framework ব্যবহার করেছিলাম তাই আমাকে কিছু অতিরিক্ত PHP Extension ও ইন্সটল করতে হয়েছিল ।

পুরো প্রোজেক্ট টা  Github এ দেওয়া আছে  ডাউনলোড করে  নিলে ভাল হয়  ।  ডাউনলোড করার পরে দেখবেন ফোল্ডারে Dockerfile  নামে  একটা ফাইল আছে  । এটা খুলুন ,  নীচের Script গুলো দেখতে পারবেন

পুরো জিনিসটা একটু একটু করে বুঝানোর চেষ্টা করি ,  প্রথমে,

লাইন ১ঃ   FROM php:7-apache এখানে বলা হয়েছে আমরা php এর 7 Apache ভার্সনের একটা Image দিয়ে পুরো জিনিসটা বানানো হবে । আর একটু বিস্তারিত বললে বলা যায় যে  আমরা php 7 & apache ইন্সটল করা আছে এরকম একটা ছোট্ট Image/Container ব্যবহার করব পুরো Environment টা বানানোর জন্য । অর্থাৎ ধরে নেই আমাদের PHP ইন্সটল করাই আছে ।

লাইন ৭ঃ  libaio-dev, libmcrypt-dev, git কিছু প্রয়োজনীয় Library ইন্সটল করা হচ্ছে লারাভেলের জন্য ।

লাইন ১২- ১৬ঃ  PHP Extension – pdo , mysqli , mbstring , mcrypt  ইন্সটল করা হচ্ছে যেগুলো আমাদের PHP প্রোজেক্ট ডেভেলপমেন্ট করার সময় ডাটাবেসের সাথে কানেক্ট করার সময় লাগবে ।

লাইন ২২ ও ২৫ঃ  লারাভেলের জন্য PHP Dependency Management Tool Composer ও Apache mod_rewrite Extension চালু করা হচ্ছে ।

লাইন ৩০ – ৩৬ঃ  ADD oracle/instantclient-basic-linux.x64-12.1.0.2.0.zip /tmp/ আমরা বলে দিচ্ছি যে আমাদের ডাউনলোড করা
Oracle এর instantclient SDK যেন /temp এ কপি করে তারপরে /use/local এ আনজিপ করা হয় ।

লাইন ৩৮-৩৯ঃ PHP Extension Manager PECL ইন্সটল করা হল ।  কারণ PHP তে Oracle PL/SQL কোড কম্পাইল করার জন্য oci8 lib সাপোর্ট লাগে ।

লাইন ৪১-৪৪ঃ কিছু Symlink তৈরি করা হল কারণ লাইব্রেরি ইন্সটল করার সময় এসব Symlink থাকতে হবে নয়ত oci8 lib কম্পাইল হবে না । শেষের লাইন এ oci8 lib ইন্সটল করা হল ।

উপরের লাইন গুলিতে অমি জিনিসগুলো একটু সোজা করে বোঝানোর চেষ্টা করলাম , আপনারা একটু পড়ে দেখলেই বুঝতে পারবেন । যারা Linux / Unix ব্যবহার করেন তাঁদের কাছে লাইন গুলো অপরিচিত নয় । তাঁদের বুঝতে অসুবিধা হবে না আশা করি । মুল কথা হল আপনি যেই মেশিনেই Oracle PL/SQL with PHP ডেভেলপমেন্ট করেন না কেন আপনাকে এসব সেটআপ করতে হবে বিশেষ করে Linux/Unix দের

এরপরে Docker cli দিয়ে docker build . অথবা docker build -f Dockerfile কমান্ড  লিখলেই সব ইন্টারনেট থেকে ডকার নামিয়ে কনফিগার করে একটা Image/Container বানাবে ।

 

এই সব কিছু ম্যানুয়ালি করতে গিয়ে দেখবেন অনেক যায়গায় মিলছে না , বিশেষ করে যারা নতুন করে করছেন বা আগে কখনও করেন নি , হয়ত SDK ভার্সন মিলছে না , PHP বলছে এই Extension আমরা নতুন 7 ভার্সনে সাপোর্ট করি না , এরপরে Mysqli, PDO বলছে যে ঠিকমত oci8 কম্পাইল হয়নি আবার করতে হবে ইত্যাদি ইত্যাদি ।

compile error !!

যদিও সব কিছু ঠিক থাক মত হয়ে গেল তারপরে পিসি কোন কারণে ক্রাশ করল , নয়ত বন্ধুদের মধ্যে কেউ বলল যে এবার আমার পিসিতেও করে দে !! অথবা আপনার বস বলল এই VPS এ পুরো Environment টা সেটআপ কর । তখন কি আবার থেকে করবেন ? উত্তরটা আপনি নিজেই ভাল করে জানেন ।

ডকারের আর একটা ভাল জিনিস হলো ডকারের ডেভেলপমেন্ট এখন অনেক পপুলার এবং ডেভেলপার কমেউনিটিতে এর সাপোর্ট অনেক ভাল । আপনি যা বানানোর কথা ভাবছেন গুগল করে দেখেন কেউ না কেউ সেই Dockerfile দিয়ে Image বানিয়ে রেখেছে। ওসব কালেকশন খুঁজতে সার্চ করুন ডকারহাব  । ওখানে সব ইন্সট্রাকশন দেওয়া আছে , শুধু আপনার পিসিতে ডকার ইন্সটল করা থাকলে চলবে আর আপনাকে কিছু নতুন করে ইন্সটল করা লাগবে না ।

এখন কাজ শেষ হয়নি , আমরা শুধুমাত্র পিএইচপি ডেভেলপমেন্ট এনভাইরনমেন্ট সেটআপ করলাম এখন ডাটাবেসের সাথে সংযোগ বাকি !! । এটাও আমরা ডকারের মাধ্যমে করব , এখন আমরা আর Oracle এর ওয়েবসাইট থেকে 3 GB এর ফাইল ডাউনলোড করব না । আমরা ডকারহাবে খুঁজব যে Oracle Database এর কোন Container পাওয়া যায় কি না ।

sath89/oracle-xe-11g একজন একটা এর ডকার Container বানিয়েছেন , ওটা এখন আমরা ব্যাবহার করব পুরো প্রোজেক্ট টা সেটআপ করানোর জন্য । এখন এই Container টা আমরা নামিয়ে নিব ও চালু করব । এর জন্যে লিখব docker run –name oracle-db sath89/oracle-xe-11g এখন কিছুক্ষণ আগে বানানো php-oracle-container টি এর সাথে লিঙ্ক করব । কাজ কিছুটা বেড়ে গেল মনে হচ্ছে !

এবার অনেকগুলো কাজ একসাথে করতে হচ্ছে , অনেক কমান্ড , সব মনে রাখা কষ্টকর আর যারা কমান্ড লিখতে অভ্যস্থ না তাদের জন্য একটু কঠিন ।  সুতরাং সব গুলো কাজকে একসাথে করার জন্য ডকারের আর একটা টুলস আছে যার নাম Docker Compose  । এটা সাধারনত ডকারের অনেকগুলো কাজ একসাথে করে । নিচে এই প্রোজেক্টটের একটা docker-compose.yml ফাইল দেওয়া হল । এখানে সব গুলো কাজের একসাথে ইন্সট্রাকশন দেওয়া আছে , যেমন

লাইন ১ – ১১ঃ  আমরা Docker Build করার সময় যেসব স্টেপ / আর্গুমেন্ট কমান্ড হিসাবে লিখতে হয়েছিল , সেসব আর্গুমেন্ট এখানে একটা YML ফাইল সিনট্যাক্স হিসাবে লিখতে হয়েছে , প্রথমে নাম তারপর ডকার ফাইলটা কোথায় , কোন পোর্টে সার্ভিসটি রান হবে , কোন ফাইলগুলো Host to Guest এ মাউন্ট হবে , আর শেষে এর সাথে আর অন্য কোন ডকার লিঙ্ক হবে ।

লাইন ১৩ – ২০ঃ Oracle Database  এর জন্য কনফিগারেশন  , কোন Docker Image ব্যবহার করব , নামে কি হবে , পোর্ট কত আর সব শেষে কোথায় ডাটা গুলো থাকবে ।

সব শেষে শুধুমাত্র একটা কমান্ড( docker-compose build && docker-compose up ) লিখলেই সব কাজ একসাথে হবে ।

অর্থাৎ যারা নতুন করে প্রোজেক্ট সেটআপ করতে চাবে তাঁদেরকে শুধু Docker & Docker Compose ইন্সটল করতে হবে ।

4Apr

ডকার (Docker) কি | পর্ব – ১

ডকার হল একধরনের লিনাক্স কন্টেইনার টেকনোলজি । এর কাজ হল ডেভেলপমেন্ট এর জন্য আপনার অ্যাপ্লিকেশান লেয়ার কে সিস্টেম লেয়ার থেকে আলাদা করা । এটা একটা Cross Platform টুল যেটা উইন্ডোজ , লিনাক্স , ম্যাক , পাওয়ার পিসি সহ অনেক অনেক অপারেটিং সিস্টেম এ চলে ।

উপরের দুই লাইন এ হইত তেমন কিছু বোঝা গেল না , তাই একটু সহজ করে বলি । মনে করা যাক একটা ওয়েব অ্যাপ্লিকেশান  ডেভেলপ করা শুরু করা হল । তাহলে প্রথম কাজটা  হবে যে,  আগে ডেভেলপমেন্ট  এর উপযোগী পরিবেশ বানাতে হবে সেই মেশিনে অথবা কম্পিউটারে যেখানে অ্যাপ্লিকেশানটি চলবে। অর্থাৎ ওয়েব অ্যাপ্লিকেশান ডেভেলপ করার জন্য যা যা লাগে সেসব সফটওয়্যার পিসি তে ইন্সটল থাকতে হবে । এটাই স্বাভাবিক । হুম , যারা  উইন্ডোজ  ইউজার  তারা হয়ত Xampp ডাউনলোড কোরে ইন্সটল কোরে  কাজ করার চেষ্টা করবে।  ভাল উপায় , কম সময়ে একটা পিএইচপি ফাইল রান করারা জন্য ।

কিন্তু পরিস্থিতিটা যদি এমন হয় যে প্রোজেক্ট রান করাতে গিয়ে অনেক কিছু কনফিগার করতে হয়েছে , পিএইচপি এর অনেক এক্সট্রা Extension ইন্সটল করতে হয়েছে, এপাচে সার্ভারেও কিছু পাল্টাতে হয়েছে। এখন যদি পিসি কোন কারণে ক্রাশ করে অথবা সিস্টেম নষ্ট হয়ে যায় তাহলে অবশই সেসব কিছু আবার করতে হবে। ঠিক একই কাজ করতে হবে যদি রিমোট সার্ভার কোন কারণে ঝামেলা করে এবং সার্ভিস এক যায়গা থেকে অন্যও যায়গায় সরাতে হয় নতুন একটা মেশিনে , তখন সেই নতুন মাশিনে আবার সব কিছু শুরু থেকে কনফিগার করা লাগবে !!

এর থেকে ভাল একটা উদাহরন হল ধরুন একটা প্রোজেক্ট রেভিউ করার জন্য বস/ সিনিয়র ডেভেলপার কে জমা দিতে হবে । ধরলাম সে Xampp এর নতুন ভার্সন চালায় অথবা অনেক পুরনো, আবার যে পিসি তে অ্যাপটি ডেভেলপ করা হল সেটা PHP এর একটা নিরদিষ্ঠ ভার্সন দিয়ে বানানো যেখানে  অ্যাপটি চালানোর জন্য অনেক কিছু কাস্টম কনফিগার করা আছে , যার জন্য প্রোজেক্ট টা ঠিকমত চলছে , কিন্তু যাকে প্রোজেক্টটা হস্তান্তর করা হল তার পিসি তে সেসব করা নেই ! তিনি যখন প্রোজেক্ট রান করার চেষ্টা করবে তখন সেটা ঠিকমত চলবে না ।

তখন একটা কথাই  মুখে আসে যে , “আমার পিসি তে তো ঠিক মত চলল !“। কিন্তু যদি প্রোজেক্টের সোর্স কোড এবং সব সফটওয়্যার , কনফিগার এবং ডাটাবেস  সহ একসাথে  দিয়ে দেওয়া যেত ! যেগুলো অ্যাপ ডেভেলপ করার সময় এসব ব্যবহার করা হয়েছিল এবং কনফিগার করা হয়েছিল। অর্থাৎ প্রোজেক্ট টা কি ল্যাঙ্গুয়েজ দিয়ে বানানো হয়েছিল আর কোন ডাটাবেস ব্যবহার করা হয়েছিল বানানোর সময় সব কিছুই একটা ফাইল এর মদ্ধে লিখে দেওয়া থাকবে আর প্ররজেক্ট  চালু করার সময় আপনা আপনি সব ডাউনলোড হয়ে  অটো কনফিগার হয়ে যেত !! তাহলে চিন্তা করতে হত না যে তার পিসি তে যদি না চলে অথবা লোকাল মেশিন এ তো ঠিকঠাক চলল , যদি প্রোডাকশন সার্ভারে ঠিকমত না কাজ করে ?

জাভার উদাহরণ দিয়ে বলি,  আপনি যখন একটা জাভা কোড নয়তবা প্রোজেক্ট অন্য একজনকে দেন তখন অবশ্যই চিন্তা করেন না যে সেটা তার কম্পিউটারে ঠিক মত কাজ করবে কি না , সে যে অপারেটিং সিস্টেম ই ব্যবহার করুক না কেন সেটা কাজ করবে , কারণ জাভার JVM কোড কে বুজতে দেই না যে সে কোন প্লাটফরম এ রান হচ্ছে। তাই অনেকেই বলে যে , “একবার কোড করে অনেক সিস্টেম এ রান করা যায় জাভাতে” , ঠিক তেমনি একবার Docker Environment সেটআপ করে ডেভেলপমেন্ট করলে এবং একবার একটা প্রোজেক্ট এর জন্য একবার একটা ডক্যার ফাইল লিখলে সেই প্রোজেক্ট নিশ্চিন্তে হস্তান্তর করা যাবে যে কাউকেই আর যেকোনো মেশিনে।

ডকার ফাইল এ যা লিখা থাকবে, ডকার তার হাব/রেজিস্ট্রি থেকে সেসব সফটওয়্যার আপনা আপনি নামিয়ে , আপনার কনফিগার ফাইল নিয়ে পুরো প্রোজেক্টের সাথে লিঙ্কআপ করবে কিন্তু একটা সফটওয়্যার ও আপনার পিসি তে ইন্সটল হবে না ! এবং কাজ শেষে আপনার সব ডাটা সংরক্ষিত থাকবে ।

লোকাল মেশিন থেকে ডেভেলপমেন্ট/প্রোডাকশন সার্ভার অথবা যদি কারো কাছে প্রোজেক্ট ট্রান্সফার করতে হয় তাহলে সোর্স কোডের সাথে Dockerfile টি দিয়ে দিলেই আর কিছু কনফিগার করা লাগবে না । তাকে চিন্তাও করতে হবে না Dependency নিয়ে । শুধু তার কম্পিউটারে ডকার ইন্সটল থাকলে আর ইন্টারনেটের সাথে কানেক্ট থাকতে হবে ।

ডকারের আরও অনেক সুবিধা আছে , আস্তে আস্তে আমরা সব নিয়ে আলোচনা করব ।  এর পরের পর্বে ডকার দিয়ে Web Development Environment সেটআপ করা নিয়ে আলোচনা করব ।

© Copyright 2017 shoumik.me, All Rights Reserved