Docker নামটির সাথে আমরা অনেকেই পরিচিত, বিশেষ করে যাদের কার্গো জাহাজ সম্পর্কে ধারণা আছে। বিশেষ করে মালবাহী জাহাজ (Cargo) গুলা তাদের বিশাল বড় বড় সাইজের কন্টেইনার (Container) গুলা যে স্থানে সাজিয়ে নিয়ে আসে সেই স্থানকে বলা হয় ‘Dock’, আর এখান থেকেই ‘Docker’ ধারণার শুরু। বর্তমানে আইটি (IT) প্রফেশনালদের কাছে ‘Docker & Container’ একটি অতি সাধারণ নাম, যার উপরের ভিত্তি করে ক্লাউড ভিত্তিক অ্যাপ্লিকেশন সমুহের (ওয়েব, ডেটাবেজ, একাউন্টিং, ক্যাশিং, মেসেজিং, মনিটরিং ইত্যাদি) ব্যবহার দিন দিন বৃদ্ধি পাচ্ছে। Docker এক ধরনের এন্টারপ্রাইজ গ্রেডের সফটওয়্যার প্ল্যাটফর্ম (Container Runtime Engine) যেটা, ফিজিক্যাল, ভার্চুয়াল, ক্লাউড যে কোনো প্ল্যাটফর্মের অপারেটিং সিস্টেমের উপরে রান করা যায় এবং বিভিন্ন কন্টেইনার ভিত্তিক অ্যাপ্লিকেশন খুব দ্রুততার সাথে Build, Start, Stop, Troubleshoot করা যায়।

Container কিভাবে কাজ করে?
কার্গো জাহাজে যেভাবে কন্টেইনার সাজানো হয়, যেখানে একটির সাথে আরেকটির কোনো সম্পর্ক থাকে না। ঠিক একই ভাবে কন্টেইনার ইঞ্জিনের (Like Docker) উপরে বিভিন্ন কন্টেইনার ভিত্তিক অ্যাপ্লিকেশন রান করানো হয়। একটি কন্টেইনার প্ল্যাটফর্মের (Like Docker) উপরে অনেকগুলা কন্টেইনার তৈরি করা যায় এবং এক একটি কন্টেইনার আলাদা সার্ভিস/অ্যাপ্লিকেশন হিসেবে ব্যবহার করা যায়। কন্টেইনার টেকনোলজি প্রসেস লেভেলে ‘isolation’ করে ফলে, এক কন্টেইনারের প্রেসেসের সাথে আরেক কন্টেইনারের প্রেসেস অথবা কন্টেইনার প্রসেসের সাথে হোস্ট (Host) সিস্টেমের প্রসেসের মধ্যে কোনো সম্পর্ক থাকে না। কন্টেইনার ইমেজ (Code+Binaries+Libraries) থেকে মূলত কন্টেইনার রান করা হয় এবং একটি কন্টেইনার ইমেজ থেকে ইচ্ছামত কন্টেইনার রান করা যায়। প্রতিটি কন্টেইনার সরাসরি অপারেটিং সিস্টেম (OS) হতে প্রয়োজনীয় রিসোর্স (Kernel, Memory, Storage, Network, etc.) ব্যবহার করে। এক একটি কন্টেইনার ইমেজ মূলত নির্দিষ্ট অ্যাপ্লিকেশন/সার্ভিসের (Like Apache, mySQL, nginx) জন্য ব্যবহার করা হয় এবং এক একটি কন্টেইনার একটি পূর্ণাঙ্গ (Complete) প্যাকেজ, যার মধ্যে শুধুমাত্র নির্দিষ্ট অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় কোড, বাইনারী (Binaries), সিস্টেম লাইব্রেরী (Libraries) থাকে। ফলে, এটার সাইজ খুবই ছোট (MBs) হয় এবং ভার্চুয়াল মেশিন (VM) থেকে অনেক দ্রুত রান করে এবং কাজ করে। বিভিন্ন অ্যাপ্লিকেশন/সার্ভিসের জন্য ব্যবহৃত কন্টেইনার ইমেজ ইন্টারনেটে বিভিন্ন রেজিট্রিতে (Docker Hub, GitHub, Amazon ECR, Azure CR, Redhat) পাওয়া যায়, পাশাপাশি নিজেও নিজের মত কন্টেইনার ইমেজ তৈরি (Build) করে রান করা যায় বা রেজিস্ট্রেতেও আপলোড করে রাখা যায়।
Container Technology & Virtualization এর মধ্যে পার্থক্য কি?
Container টেকনোলজি অনেকটাই ভার্চুয়ালাইজেশনের (Virtualization) মত কাজ করে। ভার্চুয়াল আর্কিটেকচারে যেখানে হোস্ট (Host) সিস্টেমের উপরে ‘Hypervisor’ ব্যবহার করে একাধিক ভার্চুয়াল মেশিন (VMs) বা গেস্ট মেশিন তৈরি করা হয়, অর্থাৎ ফিজিক্যাল রিসোর্সকে (CPU, Memory, Storage, Network) ভার্চুয়ালাইজ (Virtualize) একাধিক ভার্চুয়াল প্ল্যাটফর্ম (VMs) তৈরি করা হচ্ছে। এক একটি ভার্চুয়াল অ্যাপ্লায়েন্স (VMs) আলাদা আলদা অপারেটিং সিস্টেম, অ্যাপ্লিকেশন বা সার্ভিস রান করতে পারে। তেমনি কন্টেইনার টেকনোলজিতে ‘Hypervisor’ এর পরিবর্তে ‘Container Runtime Engine’ ব্যবহার করা হয়। কন্টেইনার টেকনোলজি মূলত অপারেটিং সিস্টেম/অ্যাপ্লিকেশন লেভেলে ভার্চুয়ালাইজ (Virtualize) করে এবং একটি অপারেটিং সিস্টেমের উপরে একাধিক কন্টেইনার একই সাথে রান করা যায়। Docker, Podman, LXC ইত্যাদি বহুল ব্যবহৃত কন্টেইনার রানটাইম ইঞ্জিন।

Virtual Machine এবং Container এর মধ্যে পার্থক্য কি?
ভার্চুয়ালাইজেশন পদ্ধতিতে ফিজিক্যাল (Host) হার্ডওয়ারকে ভার্চুয়ালাইজেশনের মাধ্যমে ভার্চুয়াল মেশিন বা গেস্ট মেশিন (VMs) তৈরি করা হয় এবং এক একটি ভার্চুয়াল মেশিনের (VM) জন্য আলাদা আলাদা ভার্চুয়াল হার্ডওয়ার রিসোর্স (CPU, Memory, Storage, Network), অপারেটিং সিস্টেম, ইউজার ইন্টারফেস, কার্নেল মডিউলস, বিভিন্ন ধরনের অ্যাপ্লিকেশন, ডিভাইস ড্রাইভার, বিভিন্ন ধরনের বাইনারী (Binaries) এবং লাইব্রেরীর (Libraries) প্রয়োজন হয়। ফলে, প্রতিটি ভার্চুয়াল মেশিনের (VM) সাইজ কয়েক গিগাবাইট (GBs) হয়ে থাকে এবং ভার্চুয়াল মেশিনের (VM) রান (Boot) হতে বা লোড হতে অনেক সময় লেগে যায়। এছাড়া আমরা যদি একই ধরণের অ্যাপ্লিকেশন/সার্ভিস (Like web) একই সাথে একাধিক রান করতে চাই, তাহলে আমাদের আলাদা আলাদা ভার্চুয়াল মেশিনের (VM) দরকার হবে। কারণ, একই অপারেটিং সিস্টেমের উপরে একই ধরনের অ্যাপ্লিকেশন/সার্ভিস (Like web) একাধিক রান করা বেশ কঠিন এবং ঝামেলার। যেমনঃ আমরা যদি একটা অপারেটিং সিস্টেমের উপরে ওয়েব সার্ভিস চালাতে চাই, এবং সেটা একটাই চালানো যাবে। অর্থাৎ, আলাদা আলাদা ওয়েব সার্ভিসের জন্য আলাদা আলাদা ভার্চুয়াল মেশিনের (VM) রান করতে হবে। Container টেকনোলজির মূল সুবিধা এইখানেই, কন্টেইনার টেকনোলজি প্রসেস লেভেলে ‘isolation’ করে থাকে, ফলে একই সময়ে একাধিক এবং একই ধরণের সার্ভিস/অ্যাপ্লিকেশন চালানো যায়, যেখানে একটি কন্টেইনারের প্রসেসের সাথে অন্য কন্টেইনারের প্রসেসের কোনো সম্পর্ক থাকে না। কন্টেইনার ইমেজ যেহেতু খুবই ছোট সাইজের (MBs) প্যাকেজ (Code+Binaries+Libraries), সুতরাং বিভিন্ন মাইক্রো-সার্ভিস ভিত্তিক অ্যাপ্লিকেশনের ক্ষেত্রে ব্যবহার করলে ভার্চুয়াল মেশিন (VMs) থেকে অনেক বেশি সুবিধা পাওয়া যায়।

Docker কি এবং কেন?
Docker এক ধরনের কন্টেইনার টেকনোলজির রান টাইম ইঞ্জিন এবং 2013 সালের দিকে প্রথম ‘Docker’ এর ব্যবহার শুরু হয়। ‘Docker’ ওপেন সোর্স এবং লিনাক্স, উইন্ডোজ এবং ম্যাক (macOS) অপারেটিং সিস্টেমের উপরে কাজ করতে পারে। লিনাক্স এবং উইন্ডোজ উভয়ের প্রোগ্রাম/অ্যাপ্লিকেশন সমূহ ‘Docker’ কন্টেইনার কর্তৃক রান করা যায়। ‘Docker’ যেহেতু কন্টেইনার টেকনোলজির মূল ভিত্তি, সুতরাং ‘Docker’ এর উপরেই সকল কন্টেইনার ইমেজ রান করা হয়। ‘Docker’ মূলত ক্লায়েন্ট-সার্ভার আর্কিটেকচার পদ্ধতিতে কাজ করে, অর্থাৎ ক্লাউডে, ফিজিক্যাল সিস্টেমে, ভার্চুয়াল মেশিনের (VM) মধ্যে ‘Docker Engine’ সার্ভার ডেমন (Daemon) হিসেবে রান করে এবং ‘Docker’ এনভায়রনমেন্ট ম্যানেজ (Run, start, stop, monitor, push, pull) করার জন্য ‘Docker’ ক্লায়েন্ট (Docker cli) ব্যবহার করা হয়। এছাড়াও ‘Docker’ এনভায়রনমেন্টে কাজ করার জন্য বা অ্যাডভান্স লেভেলের ডেভলপমেন্টের ক্ষেত্রে ‘Docker’ এর আরো কিছু টুলস, যেমনঃ Docker Swarm, Docker Compose, Docker SBOM, Docker Build ব্যবহার করা হয়।
Docker এর সাথে Kubernetes এর সম্পর্ক কি?
Kubernetes বর্তমানে ক্লাউড কম্পিউটিং প্লাটফর্মে এমন একটি ট্রেন্ডিং টেকনোলজি, ক্লাউড-নেটিভ (like microservices) অ্যাপ্লিকেশন সমূহ ‘Kubernetes’ দিয়ে ম্যানেজ করা যায়। Kubernetes একটি ওপেন সোর্স প্রডাকশন-গ্রেডের কন্টেইনার অর্কেস্ট্রেশন (Orchestration) টুলস যেটা কন্টেইনার (Docker/podman) ভিত্তিক অ্যাপ্লিকেশন সমূহ সহজে ‘Deploy’, স্কেলিং (Scaling), নেটওয়ার্কিং, ম্যানেজ এবং মনিটরিং করার জন্য ব্যবহার করা হয়। এটা মূলত Google Inc. কর্তৃক ডিজাইন করা হয়েছিল, বর্তমানে Cloud Native Computing Foundation কর্তৃক পরিচালিত হয়।
কেন Docker শিখবেন?
আপনি যদি ‘DevOps’ ক্যারিয়ারের দিকে পা বাড়িয়ে থাকেন, তাহলে সেটার প্রথামিক ধাপ হচ্ছে ‘Docker’ নিয়ে কাজ করা, অর্থাৎ আপনি যখন ‘DevOps’ এর বিভিন্ন টুলস/অ্যাপ্লিকেশন নিয়ে কাজ শুরু করবেন, তখন আপনার বিভিন্ন অ্যাপ্লিকেশনের বিভিন্ন ভার্সন ডেভেলপমেন্ট, টেস্টিং, ইমপ্লিমেন্ট, ম্যানেজমেন্ট এবং মনিটরিং সম্পর্কিত কাজ করার জন্য ‘Docker’ সম্পর্কে জানতে হবে। পাশাপাশি নিজের মত কোড লিখে বিভিন্ন কাস্টম কন্টেইনার ইমেজ তৈরি করতে পারবেন। ‘Docker’ বা কন্টেইনার টেকনোলজি সম্পর্কে ভাল ধারণা থাকলেই আপনি ‘DevOps’ এর অন্যান্য টুলস সমূহ, যেমনঃ Kubernetes, Ansible, Chef, jenkins, prometheus, grafana ইত্যাদির ব্যবহার সম্পর্কে বিস্তারিত জানতে বা বুঝতে পারবেন।
কিভাবে Docker শেখা শুরু করবেন?
আপনার যদি ভার্চুয়াল মেশিন (Virtualization) সম্পর্কিত বিষয় সমূহ নিয়ে কাজ করার অভিজ্ঞতা থাকে, পাশাপাশি সফটওয়্যার/অ্যাপ্লিকেশন আর্কিটেকচার সম্পর্কে বেসিক ধারণা থাকে, তাহলে আপনি অতি সহজেই কন্টেইনার টেকনোলজি এবং সেই সাথে Docker’ এর ব্যবহার বুঝতে পারবেন। এছাড়া ‘google’ বা ‘youtube’ থেকে ‘Docker’ বা কন্টেইনার টেকনোলজির উপরে নানা ধরণের টিউটোরিয়াল পেয়ে যাবেন।
Docker শেখার পুর্বে কি জানতে হবে?
আইটি প্রফেশনালদের জন্য ‘Docker’ শিখতে তেমন কিছু জানা লাগবে না, শুধু মাত্র সিস্টেম অ্যাডমিনিস্ট্রেশন স্কিল থাকলেই হবে। তবে, প্রফেশনাল ভাবে Docker’ শিখতে চাইলে লিনাক্স অ্যাডমিনিস্ট্রেশন স্কিল, যেমনঃ Text Editor, Storage Management, Package Management, Networking ইত্যাদি সম্পর্কে নলেজ থাকলেই হবে। পাশাপাশি বিভিন্ন অ্যাপ্লিকেশন সমূহ, যেমনঃ ওয়েব, ডেটাবেজ, একাউন্টিং, ক্যাশ (cache), মেসেজিং ইত্যাদি সম্পর্কে বেসিক ধারণা থাকলে সহজেই এই প্লাটফর্মে রাজত্ব করতে পারবেন।