目次

১. ভূমিকা

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 তৈরি করব।

InstructionDescription
FROMSpecifies the base Docker image. Example: FROM ubuntu:24.04
RUNExecutes shell commands. Used for package installation, etc.
COPYCopies local files into the image.
ADDSimilar to COPY, but also allows fetching from URLs and extracting archives.
WORKDIRSets the working directory.
ENVSets environment variables.
CMDDefines the command to be executed when the container starts (can be overridden).
ENTRYPOINTSimilar 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 update before install :
    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 CMD or ENTRYPOINT is encountering an error.
  • Even if you specify ["/bin/bash"] in CMD , 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 CMD and ENTRYPOINT and 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. উভয়ই কন্টেইনার শুরু হলে চালানোর কমান্ড নির্ধারণ করে, তবে তাদের ব্যবহার এবং আচরণে পার্থক্য রয়েছে।

ItemCMDENTRYPOINT
OverridableCan be overridden by the docker run commandBasically not overridden (treated as arguments)
UsageSets the default execution commandDefines 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 .

এটি ক্যাশ ব্যবহার না করে একটি নতুন বিল্ড সম্পন্ন করবে, এবং সব পরিবর্তন প্রতিফলিত হবে।

年収訴求