Docker কী? নন-ডেভেলপারদের জন্য Container ব্যাখ্যা
Docker একটি টুল, যা একটি অ্যাপকে তার চালানোর জন্য দরকারি সবকিছু — সঠিক ভাষার সংস্করণ, লাইব্রেরি, সিস্টেম টুল ও সেটিংস — সহ একটি আদর্শ একককে container বলে। একটি container ডেভেলপারের ল্যাপটপে, একটি টেস্ট সার্ভারে বা ক্লাউড হোস্টে একইভাবে চলে, যা চিরাচরিত “আমার মেশিনে তো চলছিল” সমস্যার অবসান ঘটায়। একটি container বানানোর রেসিপি একটি ছোট টেক্সট ফাইলে থাকে, যার নাম Dockerfile।
AI দিয়ে অ্যাপ বানালে Docker কেন গুরুত্বপূর্ণ
আপনার অ্যাপের যদি একটি ব্যাকএন্ড থাকে — Python, Node, C# বা Java-র একটি API — তাহলে সেটিকে এমন একটি জায়গায় চালাতে হবে যেখানে ঠিক সঠিক সফটওয়্যার ইনস্টল আছে। সেটি বারবার একইভাবে করার সবচেয়ে সাধারণ উপায় Docker।
- ব্যাকএন্ড ডিপ্লয় করা। Mythex-সহ অনেক হোস্ট একটি Dockerfile থেকে container বানিয়ে ব্যাকএন্ড ডিপ্লয় করে। Mythex-এ “একটি C# Web API” বা “একটি Java ব্যাকএন্ড” চাইলে আপনি অ্যাপ ও একটি Dockerfile পান, এবং Publish image বানিয়ে ডিপ্লয় করে (API backends)।
- একটি প্ল্যাটফর্ম ছাড়া। আপনি একটি AI-তৈরি অ্যাপ এক্সপোর্ট করলে একটি Dockerfile অন্য হোস্টে চালানো অনেক সহজ করে। দেখুন AI-তৈরি অ্যাপ এক্সপোর্ট করে নিজে হোস্ট করার উপায়।
- ডেভেলপারদের সাথে কাজ করা। আপনার প্রজেক্টে যোগ দেওয়া একজন ডেভেলপার একদিন ইনস্টল করার বদলে এক বা দুটি কমান্ডে পুরো অ্যাপ চালাতে পারেন।
একটি দৈনন্দিন উপমা: শিপিং কন্টেনার
প্রমিত শিপিং কন্টেইনারের আগে কার্গো টুকরো টুকরো করে তোলা হতো — বস্তা, ড্রাম, ক্রেট — এবং প্রতিটি বন্দর তা আলাদাভাবে সামলাত। প্রমিত স্টিল কন্টেইনার সেটি বদলে দেয়: একবার প্যাক করুন, এবং যেকোনো জাহাজ, ক্রেন, ট্রেন বা ট্রাক ভেতরে কী আছে তা না দেখেই সেটি সরাতে পারে।
Docker সফটওয়্যারের জন্য একই কাজ করে:
- Dockerfile হলো প্যাকিং তালিকা ও নির্দেশনা।
- Image হলো সিল করা, প্যাক করা কন্টেইনার।
- একটি চলমান container হলো সেই বাক্স, যা একটি জাহাজে কাজে লাগানো হয়েছে — এখানে একটি সার্ভার।
- Docker Engine হলো ক্রেন ও জাহাজ: একটি সার্ভারের সফটওয়্যার, যা যেকোনো container কীভাবে চালাতে হয় জানে।
Docker কীভাবে কাজ করে
| অংশ | এটি কী |
|---|---|
| Dockerfile | একটি টেক্সট ফাইল, যাতে image বানানোর ধাপে ধাপে নির্দেশনা থাকে। |
| Image | একটি শুধু-পঠনযোগ্য প্যাকেজ: অপারেটিং সিস্টেমের মূল অংশ, রানটাইম, লাইব্রেরি ও আপনার কোড। |
| Container | একটি image-এর চলমান উদাহরণ, একই মেশিনের অন্য অ্যাপ থেকে আলাদা। |
| Registry | image সংরক্ষণ ও শেয়ার করার একটি জায়গা, যেমন Docker Hub বা একটি ক্লাউড প্রোভাইডারের registry। |
| Docker Engine | একটি পটভূমির সার্ভিস, যা image বানায় ও container চালায়। বিনামূল্যে ও ওপেন সোর্স। |
| Docker Desktop | Mac, Windows ও Linux-এর একটি অ্যাপ, যা engine-এর সাথে একটি গ্রাফিক্যাল ইন্টারফেস দেয়। |
Container বনাম virtual machine: একটি virtual machine নিজস্ব অপারেটিং সিস্টেমসহ একটি আলাদা পূর্ণ কম্পিউটারের ভান করে, তাই এটি ভারী ও শুরু হতে ধীর। একটি container হোস্টের অপারেটিং সিস্টেম কার্নেল ভাগ করে এবং শুধু অ্যাপ ও তার ফাইলগুলো আলাদা রাখে, তাই সাধারণত কয়েক সেকেন্ডে শুরু হয় এবং অনেক কম মেমরি লাগে। একটি সার্ভারে অনেক container পাশাপাশি চলতে পারে।
একটি বাস্তব উদাহরণ: একটি ছোট Python API
ধরুন আপনার AI বিল্ডার একটি বুকিং অ্যাপের জন্য একটি Python FastAPI ব্যাকএন্ড বানিয়েছে। Dockerfile হয়তো এমন দেখাবে:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
প্রতি লাইন ধরে:
| লাইন | এটি কী করে |
|---|---|
FROM python:3.12-slim | Python 3.12 আগে থেকে ইনস্টল করা একটি অফিশিয়াল image থেকে শুরু। |
WORKDIR /app | container-এর ভেতরে /app ফোল্ডারে কাজ করা। |
COPY requirements.txt . ও RUN pip install ... | লাইব্রেরির তালিকা কপি করে ইনস্টল করা। |
COPY . . | অ্যাপের নিজের কোড কপি করা। |
EXPOSE 8000 | উল্লেখ করা যে অ্যাপ পোর্ট 8000-এ শোনে। |
CMD [...] | container চালু হলে ওয়েব সার্ভার শুরু করার কমান্ড। |
সাধারণ ভাষায়: “Python 3.12 দিয়ে শুরু করো। requirements.txt-এ থাকা লাইব্রেরিগুলো ইনস্টল করো। কোড কপি করো। পোর্ট 8000-এ ওয়েব সার্ভার চালাও।”
এরপর একজন ডেভেলপার (বা একটি হোস্টিং প্ল্যাটফর্ম) দুটি কমান্ড চালায়:
docker build -t booking-api .
docker run -p 8000:8000 booking-api
প্রথমটি image বানায় এবং তার নাম দেয় booking-api। দ্বিতীয়টি একটি container শুরু করে এবং মেশিনের 8000 পোর্টকে container-এর ভেতরের 8000 পোর্টের সাথে যুক্ত করে। API এখন চলছে — ঠিক একইভাবে যেকোনো সার্ভারে যেখানে Docker আছে, সেখানে এটি চলবে।
লক্ষ্য করুন image-এর ভেতরে কী নেই: পাসওয়ার্ড ও API কী। সেগুলো container শুরুর সময় পাস করা হয়, এনভায়রনমেন্ট ভেরিয়েবল হিসেবে, যাতে একই image বিভিন্ন সেটিংসে পরীক্ষা ও প্রোডাকশনে চলতে পারে।
মূল শব্দ
| শব্দ | অর্থ |
|---|---|
| Container | একটি অ্যাপ ও তার ডিপেন্ডেন্সির আলাদা, চলমান প্যাকেজ। |
| Image | যে টেমপ্লেট থেকে একটি container শুরু হয়। |
| Base image | Dockerfile-এর FROM লাইনের শুরুর বিন্দু, যেমন python:3.12-slim বা node:22। |
| Layer | Dockerfile-এর প্রতিটি ধাপ একটি ক্যাশ করা layer যোগ করে, যা পুনর্নির্মাণ দ্রুত করে। |
| Port mapping | হোস্টের একটি পোর্টকে container-এর ভেতরের একটি পোর্টের সাথে যুক্ত করা। |
| Volume | স্টোরেজ, যা container বদলালেও টিকে থাকে। Container নিজে ফেলনাযোগ্য। |
| Docker Compose | একসাথে চলা কয়েকটি container বর্ণনাকারী একটি ফাইল, যেমন একটি API ও একটি ডেটাবেস। |
| Kubernetes | অনেক সার্ভারে অনেক container চালানোর একটি সিস্টেম। বেশিরভাগ ছোট অ্যাপের এটি লাগে না। |
সাধারণ ভুল ধারণা
- “Docker একটি virtual machine।” এটি হালকা: container হোস্টের কার্নেল ভাগ করে।
- “Container-এর ভেতরে সংরক্ষিত ডেটা নিরাপদ।” Container ফেলে দিয়ে নতুন দিয়ে বদলানোর জন্যই তৈরি। যা টিকে থাকতে হবে — ব্যবহারকারীর ডেটা, আপলোড — তা একটি ডেটাবেস, ফাইল স্টোরেজ বা একটি volume-এ থাকা উচিত।
- “Dockerfile-এ সিক্রেট রাখা ঠিক, কারণ এটি ব্যক্তিগত।” Image শেয়ার ও registry-তে পুশ করা হয়। রানটাইমে সিক্রেট পাস করুন।
- “Docker একটি অ্যাপকে নিরাপদ করে।” আইসোলেশন সাহায্য করে, কিন্তু পুরোনো সফটওয়্যার ও দুর্বল সেটিংসের একটি container এখনও দুর্বল।
- “প্রতিটি অ্যাপের Docker দরকার।” একটি স্ট্যাটিক সাইট বা সহজ ফ্রন্টএন্ড সাধারণত শুধু ফাইল হিসেবে হোস্ট হয়, কোনো container ছাড়াই।
- “Docker Desktop সবার জন্য বিনামূল্যে।” Engine বিনামূল্যে; Docker-এর শর্ত অনুযায়ী বড় কোম্পানির জন্য Docker Desktop-এ পেইড সাবস্ক্রিপশন লাগে।
আপনার AI বিল্ডারকে কী জিজ্ঞেস করবেন
- “এই অ্যাপের কি Dockerfile দরকার? দরকার হলে সহজ ভাষায় প্রতিটি লাইন ব্যাখ্যা করো।”
- “ছোট, অফিশিয়াল base image ব্যবহার করো এবং ভাষার সংস্করণ পিন করো।”
- “সিক্রেট image-এর বাইরে রাখো। রানটাইমে এনভায়রনমেন্ট ভেরিয়েবল থেকে পড়ো।”
- “আপলোড ও ডেটা যেন ডেটাবেস বা ফাইল স্টোরেজে থাকে, container-এর ভেতরে নয়, তা নিশ্চিত করো।”
- “একটি Docker Compose ফাইল যোগ করো, যাতে একজন ডেভেলপার একটি কমান্ডে স্থানীয়ভাবে ফ্রন্টএন্ড, API ও ডেটাবেস চালাতে পারে।”
- “একটি health-check endpoint যোগ করো, যাতে হোস্ট বুঝতে পারে API চালু আছে কি না।”
Mythex-এ Docker
Mythex ব্যবহার করতে আপনার Docker ইনস্টল বা চালানোর দরকার নেই। আপনার প্রজেক্ট একটি ব্যক্তিগত ক্লাউড স্যান্ডবক্সে চলে, এবং যখন আপনি এমন একটি ব্যাকএন্ড চান যার container দরকার — যেমন C#, Java, বা একটি কাস্টম Node বা Python সার্ভিস — Mythex অ্যাপ ও একটি Dockerfile লেখে, স্যান্ডবক্সে প্রিভিউ করে এবং আপনি প্রকাশ করলে ডিপ্লয় করে, কোনো হোস্টিং সেটআপ ছাড়াই (প্রযুক্তি কীভাবে বাছা হয়)। Pro-তে আপনি প্রজেক্ট এক্সপোর্ট করতে বা GitHub-এ সিঙ্ক করতে পারেন এবং Dockerfile সঙ্গে নিয়ে যেতে পারেন। ফ্রন্টএন্ড ও ব্যাকএন্ড কীভাবে একসাথে কাজ করে তা জানতে দেখুন ফ্রন্টএন্ড বনাম ব্যাকএন্ড।
প্রশ্নোত্তর
সহজ ভাষায় Docker কী?
Docker একটি টুল, যা একটি অ্যাপকে তার চালানোর জন্য দরকারি সবকিছু — ভাষার রানটাইম, লাইব্রেরি ও সেটিংস — সহ একটি আদর্শ একক বা “container”-এ প্যাক করে। Container একটি ল্যাপটপে, একটি টেস্ট সার্ভারে বা একটি ক্লাউড হোস্টে একইভাবে চলে।
Docker image ও container-এর মধ্যে পার্থক্য কী?
Image হলো প্যাক করা, শুধু-পঠনযোগ্য টেমপ্লেট: অ্যাপ ও তার ডিপেন্ডেন্সি, যা একটি Dockerfile থেকে তৈরি। Container হলো সেই image-এর একটি চলমান কপি। একটি image থেকে অনেক container চালানো যায়।
Docker কি একটি virtual machine?
না। একটি virtual machine নিজস্ব অপারেটিং সিস্টেমসহ পুরো একটি কম্পিউটারকে অনুকরণ করে। Container হোস্ট মেশিনের অপারেটিং সিস্টেম কার্নেল ভাগ করে নেয় এবং শুধু অ্যাপটিকে আলাদা রাখে, তাই এরা দ্রুত শুরু হয় ও কম মেমরি ব্যবহার করে।
Docker কি বিনামূল্যে?
Docker Engine, যা container চালায়, বিনামূল্যে ও ওপেন সোর্স। Docker-এর শর্ত অনুযায়ী, সেপ্টেম্বর ২০২৬ পর্যন্ত, Docker Desktop অ-বাণিজ্যিক ওপেন সোর্স প্রজেক্ট এবং ২৫০-এর কম কর্মী ও বার্ষিক ১ কোটি ডলারের কম আয়ের কোম্পানির জন্য বিনামূল্যে; বড় কোম্পানিকে পেইড সাবস্ক্রিপশন নিতে হয়।
AI দিয়ে অ্যাপ বানাতে কি Docker শিখতে হবে?
সাধারণত না। অনেক AI বিল্ডার container নিজেই সামলায়। Dockerfile কী জানা থাকলে বোঝা যায় একটি ব্যাকএন্ড কীভাবে প্যাক করা হয়েছে, এবং অ্যাপটি এক্সপোর্ট করলে অন্য কোথাও চালানো বা হোস্ট করা সহজ হয়।