ডেভেলপারদের জীবনে একটি চিরচেনা এবং বিরক্তিকর সমস্যা হলো - আমার local-এ তো ঠিকঠাক কাজ করছে, কিন্তু server-এ বা খুব কাছের বন্ধুর কম্পিউটারে কাজ করছে না। কী বিপদ! আজ কাছের বন্ধুটাও আমার পাশে নেই… ☹️
সমস্যার মূলে কী?
আমরা যখন কোনো অ্যাপ্লিকেশন তৈরি করি, তখন সেটি একা চলে না। এর সাথে জড়িয়ে থাকে বিভিন্ন Programming Language, Tools, এবং Dependency Packages। এগুলোর প্রত্যেকটির আবার আলাদা আলাদা ভার্সন (Version) থাকে। সবার কম্পিউটারে সবকিছুর ভার্সন হুবহু এক থাকবে—এমনটা আশা করা কঠিন। আর এই ভার্সনের সামান্য অমিল হলেই উদয় হয় সেই অনাকাঙ্ক্ষিত ভূতের, যা আমাদের বলতে বাধ্য করে— "It works on my machine!" ☹️
এই 'ভার্সন সমস্যার ভূত' তাড়ানোর জন্য আমাদের একজন 'ওঝা' দরকার। আর আধুনিক সফটওয়্যার ইঞ্জিনিয়ারিংয়ের সেই ওঝা বা মুশকিল আসান হলো Docker (ডকার)।
Docker আসলে কী?
'ডকার' (Docker) একটি ব্রিটিশ শব্দ, যার বাংলা অর্থ হলো 'ডকশ্রমিক'। আমেরিকান ইংরেজিতে একে বলা হয় 'Longshoreman'। তাদের কাজ হলো মূলত জাহাজের মালামাল লোড-আনলোড (Load/Unload) করা।
আগে জাহাজে আলগা মালামাল তোলা-নামানো ছিল বেশ সময়সাপেক্ষ ও ঝামেলার কাজ। ১৯৫০ সালে Malcolm McLean নামক একজন আমেরিকান ব্যক্তি 'Container' আবিষ্কার করেন। এই কন্টেইনার আসার পর মালামাল পরিবহন যেমন নিরাপদ হয়েছে, তেমনি লোড-আনলোড করাও অনেক সহজ হয়ে গেছে।
টেকনিক্যাল দিক থেকে Docker-এর ভূমিকা
সফটওয়্যার জগতের ডকারও ঠিক একই কাজ করে। এটি মূলত একটি ইকোসিস্টেম বা প্ল্যাটফর্ম, যা আমাদের অ্যাপ্লিকেশনের জন্য 'কন্টেইনার' ম্যানেজ করে। জাহাজের কন্টেইনারে যেমন পণ্য থাকে, তেমনি ডকার কন্টেইনারে থাকে আমাদের অ্যাপ্লিকেশনের:
- সোর্স কোড (Code)
- ডিপেন্ডেন্সি প্যাকেজ (Dependency Packages)
- অপারেটিং সিস্টেমের প্রয়োজনীয় অংশ (OS)
- এবং অন্যান্য কনফিগারেশন। এই সবকিছু একসাথে একটি প্যাকেজ হিসেবে থাকে, যাকে আমরা Docker Image বলি।
একটি সহজ উদাহরণ
ধরা যাক—
একটি application-এ ব্যবহার করা হচ্ছে Python 3.7
আরেকটি application-এ দরকার Python 3.12
Docker ব্যবহার করলে—
দুটি application দুইটি আলাদা container-এ
একদম কোনো ঝামেলা ছাড়াই
একই machine-এ একসাথে run করা যায়
পরবর্তীতে এই container-কে Docker image (snapshot) হিসেবে তৈরি করে অন্য যেকোনো PC বা server-এ খুব সহজেই run করা সম্ভব।
সংক্ষেপে Docker কী কী করে?
- Docker মূলত container load এবং unload করার কাজ করে
- Container-এর ভেতরে আমার application বা service-এর সবকিছু isolated অবস্থায় থাকে
- প্রতিটি container আলাদা আলাদা software বা project-এর জন্য হতে পারে
- Docker খুবই efficient এবং lightweight
- আগে এই সমস্যা সমাধানে Virtual Machine (VM) ব্যবহার করা হতো, যা ছিল ভারী ও ধীরগতির
- Docker-এ প্রতিটি container আলাদাভাবে (isolated) কাজ করতে পারে
- Docker image ব্যবহার করে deployment হয় খুব সহজ ও দ্রুত
শেষ কথা
সহজ কথায় বলতে গেলে, ডকার আমাদের অ্যাপ্লিকেশনকে একটি নির্দিষ্ট ফ্রেমওয়ার্ক বা বক্সের মধ্যে আটকে দেয়, যাতে বাইরের পরিবেশ পরিবর্তনের কোনো প্রভাব ওই অ্যাপ্লিকেশনের ওপর না পড়ে। ফলে "It Works on My Machine" — এই অজুহাত দেওয়ার দিন এখন শেষ!
Top comments (0)