- 1 ১. ভূমিকা
- 2 ২. Dockerfile-এর মৌলিক গঠন
- 3 ৩. অনুশীলন: Ubuntu-ভিত্তিক Dockerfile তৈরি করা
- 4 ৪. Docker ইমেজ তৈরি এবং যাচাই করা
- 5 5. প্রয়োগ: একটি Python পরিবেশ তৈরি করা
- 6 6. সাধারণ সমস্যাবলী এবং সমাধান
- 7 ৭. উপসংহার
- 8 ৮. FAQ (প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী)
- 8.1 প্রশ্ন ১. আমার Dockerfile-এ কোন উবুন্টু সংস্করণটি বেছে নেব?
- 8.2 Q2. Why do I get “Package not found” when using apt-get install?
- 8.3 Q3. How do I set environment variables in a Dockerfile?
- 8.4 Q4. What is the difference between CMD and ENTRYPOINT in a Dockerfile?
- 8.5 Q5. I edited my Dockerfile, but the changes are not reflected. Why?
১. ভূমিকা
Docker এবং Dockerfile কী?
সাম্প্রতিক বছরগুলোতে, Docker দ্রুত জনপ্রিয়তা অর্জন করেছে ডেভেলপমেন্ট পরিবেশের সেটআপ এবং অ্যাপ্লিকেশন ডিপ্লয়মেন্টকে সহজ করার উপায় হিসেবে। Docker-এ একটি অ্যাপ্লিকেশন এবং তার নির্ভরশীলতাগুলোকে একক “কন্টেইনার”-এ প্যাকেজ করার অনন্য ক্ষমতা রয়েছে, যা পরে যেকোনো জায়গায় একই পরিবেশে চালানো যায়।
এই Docker কন্টেইনার তৈরি করতে, “Dockerfile” নামে একটি নকশা প্রয়োজন। Dockerfile হল একটি টেক্সট ফাইল যা বেস OS ইমেজ, ইনস্টল করতে হবে এমন সফটওয়্যার, পরিবেশ ভেরিয়েবল সেটিংস ইত্যাদি নির্ধারণ করে। ডেভেলপাররা এই ফাইলটি ব্যবহার করে স্বয়ংক্রিয়ভাবে কাস্টমাইজড পরিবেশ তৈরি করতে পারেন।
বেস হিসেবে Ubuntu বেছে নেওয়ার কারণ
একটি Dockerfile তৈরি করার সময়, প্রথম ধাপ হল বেস OS ইমেজ নির্ধারণ করা। অনেক বিকল্পের মধ্যে, Ubuntu বিশেষভাবে জনপ্রিয়। Ubuntu হল একটি Debian-ভিত্তিক লিনাক্স ডিস্ট্রিবিউশন, যা ব্যবহার সহজতা এবং এর বিশাল প্যাকেজ রেপোজিটরির কারণে বিভিন্ন পরিবেশ গড়ে তোলার নমনীয়তার জন্য পরিচিত।
Ubuntu-ভিত্তিক Dockerfile নিম্নলিখিত সুবিধা প্রদান করে:
- প্রচুর অফিসিয়াল এবং কমিউনিটি ডকুমেন্টেশন উপলব্ধ, ফলে শেখার বাঁক কমে যায়।
- APT (Advanced Package Tool) ব্যবহার করে অনেক প্যাকেজ এবং টুল সহজে ইনস্টল করা যায়।
- হালকা ওজনের মিনিমাল ইমেজ (যেমন
ubuntu:20.04,ubuntu:24.04) অফিসিয়ালি সরবরাহ করা হয়।
এই প্রবন্ধের উদ্দেশ্য এবং লক্ষ্য পাঠকগণ
এই প্রবন্ধে, আমরা “Dockerfile Ubuntu” কীওয়ার্ডের উপর ফোকাস করব এবং নবাগতদের জন্য Ubuntu-ভিত্তিক Dockerfile কীভাবে তৈরি করবেন তা সহজবোধ্যভাবে ব্যাখ্যা করব।
বিশেষভাবে, আমরা Dockerfile-এর মৌলিক গঠন থেকে শুরু করে Ubuntu পরিবেশ বাস্তবে গড়ে তোলার ধাপ, Python-এর মতো অ্যাপ্লিকেশন পরিবেশ ইনস্টল করার উদাহরণ, এবং সাধারণ ত্রুটি ও তাদের সমাধান পর্যন্ত ব্যাপকভাবে আলোচনা করব।
এই প্রবন্ধটি নিম্নলিখিত পাঠকদের জন্য সুপারিশ করা হয়:
- প্রথমবার Dockerfile ব্যবহার করে পরিবেশ তৈরি করতে ইচ্ছুক ব্যক্তিরা।
- Ubuntu-তে পুনরুৎপাদনযোগ্য ডেভেলপমেন্ট পরিবেশ তৈরি করতে ইচ্ছুক ব্যক্তিরা।
- সমস্যার সমাধানসহ তাদের জ্ঞান গভীর করতে ইচ্ছুক ব্যক্তিরা।
২. Dockerfile-এর মৌলিক গঠন
Dockerfile কী? এর ভূমিকা বোঝা
একটি Dockerfile হল Docker ইমেজ তৈরি করার রেসিপির মতো। বিশেষভাবে, এটি একটি টেক্সট ফাইল যা কোন বেস OS ব্যবহার করতে হবে, কোন সফটওয়্যার ইনস্টল করতে হবে, এবং কোন কনফিগারেশন প্রয়োগ করতে হবে তা বর্ণনা করে।
এই ফাইলটি ব্যবহার করে docker build কমান্ড চালিয়ে আপনি সহজেই অত্যন্ত পুনরুৎপাদনযোগ্য ডেভেলপমেন্ট এবং অ্যাপ্লিকেশন এক্সিকিউশন পরিবেশ তৈরি করতে পারেন।
Dockerfile ব্যবহারের সুবিধা:
- পরিবেশ সেটআপের স্বয়ংক্রিয়তা (ম্যানুয়াল ধাপ পুনরায় করার দরকার নেই)।
- একাধিক টিম সদস্যের সাথে ডেভেলপ করার সময় পরিবেশের অসামঞ্জস্যতা দূর করে।
- CI/CD পাইপলাইনে সহজে ইন্টিগ্রেট করা যায়।
Dockerfile-এ সাধারণত ব্যবহৃত মৌলিক নির্দেশনা (ডিরেক্টিভ)
একটি Dockerfile-এ বেশ কিছু নির্দেশনা (ডিরেক্টিভ) থাকে, যার মধ্যে নিম্নলিখিতগুলো সবচেয়ে প্রতিনিধিত্বশীল। আমরা এগুলোকে যথাযথভাবে সংযুক্ত করে একটি Ubuntu-ভিত্তিক Dockerfile তৈরি করব।
| Instruction | Description |
|---|---|
FROM | Specifies the base Docker image. Example: FROM ubuntu:24.04 |
RUN | Executes shell commands. Used for package installation, etc. |
COPY | Copies local files into the image. |
ADD | Similar to COPY, but also allows fetching from URLs and extracting archives. |
WORKDIR | Sets the working directory. |
ENV | Sets environment variables. |
CMD | Defines the command to be executed when the container starts (can be overridden). |
ENTRYPOINT | Similar to CMD, but defines a command that is always executed. |
Ubuntu-ভিত্তিক Dockerfile-এর ন্যূনতম উদাহরণ
নিচে Ubuntu-ভিত্তিক Dockerfile-এর একটি খুবই মৌলিক উদাহরণ দেওয়া হল।
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y
curl
vim
CMD ["/bin/bash"]
এই Dockerfile-টি Ubuntu 24.04-কে বেস হিসেবে ব্যবহার করতে, দুটি ইউটিলিটি (curl এবং vim) ইনস্টল করতে, এবং শেষে bash শেল চালু করতে কনফিগার করা হয়েছে।
Ubuntu ট্যাগ নির্বাচন সম্পর্কে
Ubuntu Docker ইমেজগুলি অফিসিয়াল Docker Hub রেপোজিটরি-এ উপলব্ধ। ubuntu:latest নির্দিষ্ট করলে সর্বশেষ সংস্করণ ব্যবহার হবে, তবে সংস্করণ স্পষ্টভাবে নির্ধারণ করা সুপারিশ করা হয়।
উদাহরণস্বরূপ:
ubuntu:22.04(LTS: লং টার্ম সাপোর্ট সংস্করণ, স্থায়িত্বের ওপর জোর দেয়)ubuntu:24.04(সর্বশেষ LTS প্রার্থী, ফিচারগুলোর ওপর জোর দেয়)
আপনার উদ্দেশ্যের উপর নির্ভর করে স্থায়িত্ব নাকি নতুন ফিচারকে অগ্রাধিকার দেবেন তা বিবেচনা করুন।
৩. অনুশীলন: Ubuntu-ভিত্তিক Dockerfile তৈরি করা
Ubuntu পরিবেশের জন্য প্রয়োজনীয় প্যাকেজ ইনস্টল করা
যখন Dockerfile ব্যবহার করে একটি Ubuntu পরিবেশ তৈরি করা হয়, তখন প্রায়ই আপনাকে অতিরিক্ত প্যাকেজ ইনস্টল করতে হয়। উদাহরণস্বরূপ, নিম্নলিখিত ইউটিলিটিগুলি ডেভেলপমেন্ট পরিবেশ সেটআপের জন্য সাধারণত ব্যবহৃত হয়:
curl: ফাইল ডাউনলোড এবং API পরীক্ষা করার জন্য।vim: একটি সহজ টেক্সট এডিটর।git: একটি ভার্সন কন্ট্রোল টুল।build-essential: C/C++ প্রোগ্রাম তৈরি করার জন্য প্রয়োজনীয় মৌলিক টুলের সংগ্রহ।
এইগুলো Dockerfile-এ ইনস্টল করতে, RUN নির্দেশনা ব্যবহার করুন।
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y
curl
vim
git
build-essential
প্রথমে apt-get update চালিয়ে, আপনি ইনস্টলেশনের আগে সর্বশেষ প্যাকেজ তালিকা পেতে নিশ্চিত হন।
নন-ইন্টারেক্টিভ ইনস্টলেশন সেটআপ করা
Ubuntu-এ apt-get install ব্যবহার করার সময় ব্যবহারকারীর ইনপুটের প্রয়োজন হতে পারে, তবে Docker বিল্ড প্রক্রিয়ার সময় ইন্টারেক্টিভ অপারেশন সম্ভব নয়। তাই, নন-ইন্টারেক্টিভ মোডে ইনস্টলেশন সম্পন্ন করার জন্য নিম্নরূপ পরিবেশ ভেরিয়েবল সেট করা সুপারিশ করা হয়।
ENV DEBIAN_FRONTEND=noninteractive
এটি প্যাকেজ কনফিগারেশনের সময় দেখা যায় এমন “রিজিওনাল সেটিংস” ইত্যাদি প্রম্পটগুলোকে বাদ দেবে, ফলে ইনস্টলেশন মসৃণভাবে চলবে।
অপ্রয়োজনীয় ক্যাশ মুছে ইমেজ সাইজ কমানো
APT ব্যবহার করার সময়, ডাউনলোড করা অস্থায়ী ফাইল (ক্যাশ) ইমেজে থেকে যেতে পারে, যা চূড়ান্ত Docker ইমেজকে বড় করে তুলবে। নিম্নরূপ এই ক্যাশ মুছে ইমেজের সাইজ কমানো যায়:
RUN apt-get update && apt-get install -y
curl
vim
&& rm -rf /var/lib/apt/lists/*
এভাবে একটি RUN স্টেটমেন্টে একাধিক কমান্ড একত্রিত করে অপ্রয়োজনীয় লেয়ার তৈরি হওয়া রোধ করা যায়।
সেরা অনুশীলন: আপনার Dockerfile সংগঠিত করা
বাস্তব ডেভেলপমেন্ট পরিবেশে, নিম্নলিখিত Dockerfile লেখার সেরা অনুশীলনগুলো অনুসরণ করা সুপারিশ করা হয়:
- লেয়ারের সংখ্যা কমাতে সম্ভব হলে
RUNনির্দেশনাগুলো একত্রিত করুন। ENVব্যবহার করে সংস্করণ এবং কনফিগারেশন স্পষ্টভাবে নির্ধারণ করুন।- প্রতিটি অপারেশনের উদ্দেশ্য স্পষ্টভাবে উল্লেখ করতে মন্তব্য ব্যবহার করুন।
- অপ্রয়োজনীয় ফাইল রেখে না যাওয়ার জন্য
rmএবং--no-install-recommendsব্যবহার করুন।
উদাহরণ:
RUN apt-get update && apt-get install -y --no-install-recommends
curl
git
&& rm -rf /var/lib/apt/lists/*
এভাবে আপনি আরও হালকা এবং রক্ষণাবেক্ষণযোগ্য Dockerfile তৈরি করতে পারবেন।
৪. Docker ইমেজ তৈরি এবং যাচাই করা
Dockerfile থেকে Docker ইমেজ তৈরি করা
আপনার Dockerfile লিখে নিলে, পরবর্তী ধাপ হল Docker ইমেজ তৈরি করা। এটি docker build কমান্ড ব্যবহার করে করা হয়। আপনার Dockerfile থাকা ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান:
docker build -t my-ubuntu-image .
-tঅপশনটি ইমেজকে একটি নাম (ট্যাগ) দিতে ব্যবহৃত হয়। এই উদাহরণে আমরা এটিকেmy-ubuntu-imageনাম দিচ্ছি।.বর্তমান ডিরেক্টরিকে নির্দেশ করে, যেখানে Dockerfile অবস্থিত।
এই কমান্ডটি চালালে, Docker ধারাবাহিকভাবে Dockerfile‑এর নির্দেশনাগুলো পড়ে এবং একটি নতুন ইমেজ তৈরি করবে।
তৈরি করা Docker ইমেজ যাচাই করা
ইমেজ তৈরি সম্পন্ন হলে, নিম্নলিখিত কমান্ড দিয়ে তা যাচাই করা যায়:
docker images
এটি লোকালভাবে বিদ্যমান Docker ইমেজের তালিকা প্রদর্শন করবে, এবং আপনি নিম্নলিখিত তথ্যগুলো পরীক্ষা করতে পারবেন:
- REPOSITORY (ইমেজের নাম)
- TAG (ট্যাগ)
- IMAGE ID (অনন্য শনাক্তকারী)
- CREATED (সৃষ্টি তারিখ ও সময়)
- SIZE (আকার)
উদাহরণ:
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ubuntu-image latest abcd1234abcd 5 minutes ago 189MB
এটি নিশ্চিত করে যে আপনি যে ইমেজটি তৈরি করেছেন তা সফলভাবে রেজিস্টার হয়েছে।
Docker কন্টেইনার শুরু করা এবং অপারেশন যাচাই করা
তৈরি করা ইমেজটি সঠিকভাবে কাজ করছে কিনা যাচাই করতে, চলুন একটি Docker কন্টেইনার শুরু করি। নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
docker run -it my-ubuntu-image
-itঅপশন নির্দিষ্ট করা হলে আপনি ইন্টারেক্টিভ মোডে একটি টার্মিনাল শুরু করতে পারেন।- যদি এটি সফলভাবে শুরু হয়, কন্টেইনারের মধ্যে একটি bash প্রম্পট দেখা যাবে, এবং আপনি যেন Ubuntu পরিবেশে লগইন করেছেন এমন অবস্থায় থাকবেন।
কন্টেইনারের ভিতরে, আপনি নিম্নলিখিত কমান্ডগুলো চালিয়ে দেখতে পারেন যে ইনস্টল করা টুলগুলো সঠিকভাবে কাজ করছে কিনা:
curl --version
vim --version
কোনো সমস্যা না থাকলে, Dockerfile সফলভাবে লেখা হয়েছে।
অপ্রয়োজনীয় ইমেজ এবং কন্টেইনার পরিষ্কার করা
আপনি যখন বারবার বিল্ড এবং পরীক্ষা করেন, তখন অপ্রয়োজনীয় Docker ইমেজ এবং কন্টেইনার স্থানীয়ভাবে জমা হতে পারে। নিম্নলিখিত কমান্ডগুলো ব্যবহার করে সময়ে সময়ে সেগুলো পরিষ্কার করা সুপারিশ করা হয়:
- বন্ধ করা কন্টেইনার মুছে ফেলা:
docker container prune
- অপ্রয়োজনীয় ইমেজ মুছে ফেলা:
docker image prune
- সব অপ্রয়োজনীয় ডেটা মুছে ফেলা (সতর্কতা!):
docker system prune
এই অপারেশনগুলো ডিস্ক স্পেস সাশ্রয় করে এবং সমস্যাগুলি প্রতিরোধ করে।
5. প্রয়োগ: একটি Python পরিবেশ তৈরি করা
Ubuntu-ভিত্তিক Dockerfile-এ Python ব্যবহারযোগ্য করা
Dockerfile ব্যবহার করে Ubuntu পরিবেশ তৈরি করার সময় একটি Python এক্সিকিউশন পরিবেশ যোগ করে, আপনি ডেভেলপমেন্ট, টেস্টিং এবং মেশিন লার্নিং সহ বিস্তৃত ব্যবহার সমর্থন করতে পারেন। যদিও Ubuntu-তে Python পূর্বেই ইনস্টল থাকতে পারে, সংস্করণ এবং প্যাকেজ ম্যানেজমেন্টের দৃষ্টিকোণ থেকে নিজে স্পষ্টভাবে এটি তৈরি করা সাধারণ প্র্যাকটিস।
apt ব্যবহার করে Python ইনস্টল করার পদ্ধতি
সবচেয়ে সহজ উপায় হল APT প্যাকেজ ব্যবহার করে Python ইনস্টল করা। নিচে একটি উদাহরণ দেওয়া হল:
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y
python3
python3-pip
&& rm -rf /var/lib/apt/lists/*
এই পদ্ধতিতে, আপনি সিস্টেমে ইনস্টল করা স্থিতিশীল Python সংস্করণ (সাধারণত Python 3.10 বা 3.12 ইত্যাদি) ব্যবহার করতে পারেন। এছাড়াও, আপনি pip কমান্ড ব্যবহার করে Python প্যাকেজ যোগ করতে পারেন।
pyenv দিয়ে Python সংস্করণ পরিচালনা করা
যদি আপনি নির্দিষ্ট একটি Python সংস্করণ ব্যবহার করতে চান বা একাধিক সংস্করণের মধ্যে সুইচ করতে চান, তবে pyenv ব্যবহার করা সুবিধাজনক। নিচে Dockerfile-এ pyenv ব্যবহার করে Python 3.11.6 ইনস্টল করার একটি উদাহরণ দেওয়া হল:
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y
git
curl
make
build-essential
libssl-dev
zlib1g-dev
libbz2-dev
libreadline-dev
libsqlite3-dev
wget
llvm
libncurses5-dev
libncursesw5-dev
xz-utils
tk-dev
libffi-dev
liblzma-dev
&& rm -rf /var/lib/apt/lists/*
# Install pyenv
RUN git clone [https://github.com/pyenv/pyenv.git](https://github.com/pyenv/pyenv.git) ~/.pyenv
ENV PYENV_ROOT="$HOME/.pyenv"
ENV PATH="$PYENV_ROOT/bin:$PATH"
RUN echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
# Install a specific Python version
RUN pyenv install 3.11.6 && pyenv global 3.11.6
এটি আপনাকে আপনার Python পরিবেশ আরও নমনীয়ভাবে তৈরি এবং পরিচালনা করতে সহায়তা করে।
requirements.txt ব্যবহার করে প্যাকেজ ম্যানেজমেন্ট
বাস্তব প্রকল্পে, আপনাকে প্রায়শই একাধিক Python লাইব্রেরি দরকার হয়। এদের পরিচালনার জন্য requirements.txt ব্যবহার করা হয়।
প্রথমে, আপনার প্রকল্পের রুট ডিরেক্টরিতে একটি requirements.txt ফাইল প্রস্তুত করুন:
flask==2.3.2
requests>=2.25.1
pandas
এরপর, Dockerfile-এ নিম্নরূপ এটি উল্লেখ করুন:
COPY requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
এটি আপনাকে একসাথে প্রয়োজনীয় লাইব্রেরিগুলো ইনস্টল করতে দেয়, ফলে আপনার ডেভেলপমেন্ট পরিবেশের পুনরুত্পাদনযোগ্যতা বৃদ্ধি পায়।
সেরা চর্চা
- Python ব্যবহার করার সময়,
virtualenvবাvenvদিয়ে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করা ডিপেনডেন্সি সংঘাত প্রতিরোধে সহায়তা করে। - ক্যাশ মুছে (
--no-cache-dir) আপনার Docker ইমেজের আকার কম যায়। - Python প্যাকেজ ইনস্টল করার আগে
pip install --upgrade pipদিয়ে pip-এর সর্বশেষ সংস্করণ ইনস্টল করা ত্রুটি প্রতিরোধে সহায়তা করে।
6. সাধারণ সমস্যাবলী এবং সমাধান
অনুমতি ত্রুটি
উদাহরণ:
Permission denied
This occurs when the copied file does not have execute permissions or when the file owner/executing user is not appropriate.
Solutions:
- Make the file executable:
RUN chmod +x script.sh
- Change the user if necessary:
RUN chown root:root /path/to/file
প্যাকেজ পাওয়া যায়নি বা ইনস্টল করা যায় না
উদাহরণ:
E: Unable to locate package xxx
এই ত্রুটি ঘটে যখন apt-get update চালানো হয়নি অথবা নির্দিষ্ট প্যাকেজের নাম ভুল।
সমাধানসমূহ:
- Always write
apt-get updatebeforeinstall:RUN apt-get update && apt-get install -y curl
- Check the package name for typos and ensure it is correct.
নেটওয়ার্ক-সম্পর্কিত ত্রুটি
উদাহরণ:
Temporary failure resolving 'deb.debian.org'
এই ধরনের ত্রুটি ঘটে যখন বিল্ড প্রক্রিয়ার সময় DNS রেজোলিউশন ব্যর্থ হয়।
সমাধানসমূহ:
- Restarting the Docker daemon may resolve the issue:
sudo systemctl restart docker
- Review the Docker DNS settings (add DNS specifications to
/etc/docker/daemon.json):{ "dns": ["8.8.8.8", "8.8.4.4"] }
ক্যাশের প্রভাবের কারণে বিল্ড পুরনো অবস্থায় থাকে
Docker uses a layer-by-layer cache for speed. As a result, even if you modify the Dockerfile, it may not build as intended because cached layers are being reused.
সমাধান:
- Rebuild without using the cache:
docker build --no-cache -t my-image .
কন্টেইনারের স্টার্টআপ কমান্ড চালু না হওয়া বা সঙ্গে সঙ্গে এক্সিট করা
কারণসমূহ:
- The command specified in
CMDorENTRYPOINTis encountering an error. - Even if you specify
["/bin/bash"]inCMD, it will exit immediately if not run interactively.
সমাধানসমূহ:
- Start the container for debugging and check:
docker run -it my-image /bin/bash
- Understand the difference between
CMDandENTRYPOINTand use them appropriately for your purpose.
By experiencing these issues, your Dockerfile design skills will definitely improve. When you encounter a problem, calmly read the error message and carefully trace which layer or instruction is the cause.
৭. উপসংহার
উবুন্টু-ভিত্তিক Dockerfile তৈরির মূল পয়েন্টগুলো পুনরায় নিশ্চিত করা
In this article, we have explained step-by-step from basic to applied methods on how to build an Ubuntu environment using Dockerfile. Let’s reiterate the important points here.
- Dockerfile-এর মৌলিক গঠন বোঝা প্রথম ধাপ।
আপনিFROM,RUN,CMD, এবংENVএর মতো নির্দেশনা একত্রিত করে পরিবেশ সেটআপ স্বয়ংক্রিয় করতে পারেন। - উবুন্টু একটি স্থিতিশীল এবং অত্যন্ত নমনীয় বেস ইমেজ। Its rich package repository, large user base, and the availability of LTS versions make it suitable as a foundation for development environments.
- You can install necessary tools and libraries through practical package management .
apt-getব্যবহার করা, ক্যাশ মুছে ফেলা, এবং নন-ইন্টারেক্টিভ ইনস্টলেশন করা কীভাবে হয় তা জানা গুরুত্বপূর্ণ। - Python-এর মতো ব্যবহারিক পরিবেশ তৈরি করা Dockerfile দিয়ে সম্ভব।
pyenv,pip, এবংrequirements.txtএর মতো টুলগুলো আপনাকে অত্যন্ত পুনরুত্পাদনযোগ্য ডেভেলপমেন্ট পরিবেশ তৈরি করতে সহায়তা করে। - ট্রাবলশুটিং দক্ষতা সরাসরি স্থিতিশীল অপারেশনের দিকে নিয়ে যায়। Understanding common pitfalls such as permissions, network issues, and build cache can significantly improve development efficiency.
Dockerfile শিখতে পরবর্তী ধাপগুলো
Being able to handle Dockerfiles allows you to support a wide range of uses, not only in development but also in testing and deploying to production environments. For future learning, it would be beneficial to move on to the following topics:
- Managing multi-container configurations using Docker Compose .
- Integration with CI/CD tools (GitHub Actions, GitLab CI, etc.) .
- Interoperation with container orchestration tools such as Kubernetes .
৮. FAQ (প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী)
প্রশ্ন ১. আমার Dockerfile-এ কোন উবুন্টু সংস্করণটি বেছে নেব?
A1. মূলত, যদি আপনি স্থিতিশীলতা এবং দীর্ঘমেয়াদী সমর্থনকে অগ্রাধিকার দেন, তবে সাধারণত LTS (Long Term Support) সংস্করণ বেছে নেন। উদাহরণস্বরূপ, ubuntu:22.04 এবং ubuntu:20.04 অনেক ডেভেলপমেন্ট পরিবেশে ব্যবহার হয় এবং তাদের ৫ বছরের সমর্থন সময়ের কারণে আত্মবিশ্বাসের সঙ্গে ব্যবহার করা যায়। অন্যদিকে, যদি আপনি সর্বশেষ প্যাকেজ এবং ভাষা সংস্করণ ব্যবহার করতে চান, তবে ubuntu:24.04 এর মতো নতুন রিলিজ বেছে নিতে পারেন, তবে আমরা পূর্বে পরীক্ষা করার পরামর্শ দিই।
Q2. Why do I get “Package not found” when using apt-get install?
A2. সর্বাধিক সাধারণ কারণ হল আপনি পূর্বে apt-get update চালাননি। প্যাকেজ তালিকা আপডেট না করে ইনস্টল করার চেষ্টা করলে ত্রুটি পাবেন, কারণ পুরনো তালিকায় সংশ্লিষ্ট প্যাকেজ পাওয়া যায় না।
সঠিক ব্যবহার উদাহরণ:
RUN apt-get update && apt-get install -y curl
এছাড়াও, প্যাকেজের নামের টাইপো এবং অব্যবহৃত প্যাকেজের নাম (যেমন, python এর পরিবর্তে python3) সম্পর্কে সতর্ক থাকুন।
Q3. How do I set environment variables in a Dockerfile?
A3. আপনি ENV নির্দেশনা ব্যবহার করে পরিবেশ ভেরিয়েবল সেট করেন। এই পরিবেশ ভেরিয়েবলটি বিল্ড এবং কন্টেইনার রানটাইম উভয় সময়েই বৈধ থাকবে।
উদাহরণ:
ENV DEBIAN_FRONTEND=noninteractive
এটি APT ইনস্টলেশনের সময় ইন্টারেক্টিভ প্রম্পট দমন করার জন্য একটি সাধারণ সেটিং। এছাড়াও Dockerfile-এ অ্যাপ্লিকেশন কনফিগারেশন এবং API কী সেট করতে এটি ব্যবহার করা হয়।
Q4. What is the difference between CMD and ENTRYPOINT in a Dockerfile?
A4. উভয়ই কন্টেইনার শুরু হলে চালানোর কমান্ড নির্ধারণ করে, তবে তাদের ব্যবহার এবং আচরণে পার্থক্য রয়েছে।
| Item | CMD | ENTRYPOINT |
|---|---|---|
| Overridable | Can be overridden by the docker run command | Basically not overridden (treated as arguments) |
| Usage | Sets the default execution command | Defines a command that should always be executed |
উদাহরণ:
CMD ["python3", "app.py"]
# vs
ENTRYPOINT ["python3"]
CMD ["app.py"]
পরেের ক্ষেত্রে, আপনি docker run my-image another_script.py রূপে CMD কে আর্গুমেন্ট হিসেবে পাস করতে পারেন।
Q5. I edited my Dockerfile, but the changes are not reflected. Why?
A5. Docker বিল্ড প্রক্রিয়ার সময় ক্যাশ ব্যবহার করে, তাই Dockerfile-এ ছোট পরিবর্তন করলেও ক্যাশড লেয়ারগুলো এখনও ব্যবহার হতে পারে।
সমাধান:
docker build --no-cache -t my-image .
এটি ক্যাশ ব্যবহার না করে একটি নতুন বিল্ড সম্পন্ন করবে, এবং সব পরিবর্তন প্রতিফলিত হবে।



