<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ragib Hasan</title>
    <description>The latest articles on DEV Community by Ragib Hasan (@ragibcs).</description>
    <link>https://dev.to/ragibcs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2183421%2F137d865a-22ca-4061-9f28-2928374de8ff.jpg</url>
      <title>DEV Community: Ragib Hasan</title>
      <link>https://dev.to/ragibcs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ragibcs"/>
    <language>en</language>
    <item>
      <title>ডকারফাইল বিল্ডের ভেতরের জাদু: ইন্টারমিডিয়েট লেয়ার ও ক্যাশিং মেকানিজম (Building Magic Behind Dockerfile)</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 30 Aug 2026 12:14:47 +0000</pubDate>
      <link>https://dev.to/ragibcs/ddkaarphaail-bildder-bhetrer-jaadu-inttaarmiddiyyett-leyyaar-o-kyaashin-mekaanijm-building-magic-behind-159c</link>
      <guid>https://dev.to/ragibcs/ddkaarphaail-bildder-bhetrer-jaadu-inttaarmiddiyyett-leyyaar-o-kyaashin-mekaanijm-building-magic-behind-159c</guid>
      <description>&lt;p&gt;ডকারে কমান্ড লিখে ইমেজ তৈরি করা সহজ হলেও, &lt;strong&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/strong&gt; ব্যাকগ্রাউন্ডে কীভাবে কাজ করে এবং কেন কিছু বিল্ড চোখের পলকে হয়ে যায় আর কিছু বিল্ডে দীর্ঘ সময় লাগে—তা জানা একজন দক্ষ ইঞ্জিনিয়ার বা DevOps প্রফেশনালের জন্য অত্যন্ত জরুরি।&lt;/p&gt;

&lt;p&gt;এই ব্লগে আমরা ডকারফাইল বিল্ডের অভ্যন্তরীণ জীবনচক্র, টেম্পোরারি কন্টেইনার মেকানিজম, ইন্টারমিডিয়েট লেয়ার এবং ডকার ক্যাশিংয়ের আসল কৌশল বিস্তারিতভাবে উন্মোচন করব।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১. ডকার বিল্ডের অভ্যন্তরীণ জীবনচক্র (Internal Execution Lifecycle)
&lt;/h2&gt;

&lt;p&gt;যখন টার্মিনালে &lt;code&gt;docker build -t go_server:1.0.0 .&lt;/code&gt; কমান্ড দেওয়া হয়, ডকার প্রতিটি লাইনের জন্য নিচের ৪টি ধাপ চক্রাকারে সম্পন্ন করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────────────────────┐
│                        প্রতিটি লাইনের এক্সিকিউশন সাইকেল                │
├────────────────────────────────────────────────────────────────────────┤
│  ধাপ ১: পূর্ববর্তী লেয়ারের ইমেজ থেকে টেম্পোরারি কন্টেইনার তৈরি করা    │
│  ধাপ ২: বর্তমান ইনস্ট্রাকশনটি সেই কন্টেইনারের ভেতর এক্সিকিউট করা       │
│  ধাপ ৩: কন্টেইনারের পরিবর্তনগুলো কমিট করে নতুন ইন্টারমিডিয়েট ইমেজ তৈরি │
│  ধাপ ৪: টেম্পোরারি কন্টেইনারটি স্বয়ংক্রিয়ভাবে মুছে ফেলা (Remove)       │
└────────────────────────────────────────────────────────────────────────┘

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ২. ডকারফাইলের প্রতিটি লাইনের লেয়ার আর্কিটেকচার
&lt;/h2&gt;

&lt;p&gt;একটি সাধারণ ডকারফাইলের প্রতিটি লাইন কীভাবে একেকটি পৃথক লেয়ার তৈরি করে, তা নিচের ডায়াগ্রামে লক্ষ্য করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile Instruction                         Internal State &amp;amp; Layer Creation
───────────────────────────────────────────────────────────────────────────────
FROM ubuntu:24.04           ──▶ [Layer 0 (Base Image)] ──▶ উবুন্টু বেজ ইমেজ পুল/লোড হয়
                                           │
RUN apt update              ──▶ [Layer 1 Image] ───────▶ টেম্পোরারি কন্টেইনার ──▶ apt update ──▶ Commit ──▶ Delete Container
                                           │
RUN apt install -y golang   ──▶ [Layer 2 Image] ───────▶ টেম্পোরারি কন্টেইনার ──▶ Go Install ──▶ Commit ──▶ Delete Container
                                           │
WORKDIR /app                ──▶ [Layer 3 Image] ───────▶ টেম্পোরারি কন্টেইনার ──▶ /app সেট ───▶ Commit ──▶ Delete Container
                                           │
COPY ./server.go ./         ──▶ [Layer 4 Image] ───────▶ টেম্পোরারি কন্টেইনার ──▶ ফাইল কপি ────▶ Commit ──▶ Delete Container
                                           │
CMD ["go", "run", "server.go"] ────────────┴───────────▶ CMD মেটাডাটা বাইন্ড হয়ে ফাইনাল ইমেজ তৈরি

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  লেয়ারভিত্তিক বিস্তারিত বিশ্লেষণ:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Layer 0 (&lt;code&gt;FROM ubuntu:24.04&lt;/code&gt;):&lt;/strong&gt; ডকার হাব থেকে উবুন্টু ইমেজ পুল করে লোকাল ক্যাশে রাখে এবং বিল্ডের প্রাথমিক রেফারেন্স পয়েন্ট হিসেবে নেয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 1 (&lt;code&gt;RUN apt update&lt;/code&gt;):&lt;/strong&gt; Layer 0 থেকে একটি টেম্পোরারি কন্টেইনার বানায়, তার ভেতর &lt;code&gt;apt update&lt;/code&gt; কমান্ড চালায়, পরিবর্তিত স্টেটকে কমিট করে &lt;strong&gt;Layer 1 ইমেজ&lt;/strong&gt; তৈরি করে এবং কন্টেইনারটি ডিলিট করে দেয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 2 (&lt;code&gt;RUN apt install -y golang&lt;/code&gt;):&lt;/strong&gt; Layer 1 থেকে নতুন কন্টেইনার খুলে Golang ইনস্টল করে, আবার কমিট করে &lt;strong&gt;Layer 2 ইমেজ&lt;/strong&gt; তৈরি করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 3 (&lt;code&gt;WORKDIR /app&lt;/code&gt;):&lt;/strong&gt; Layer 2 থেকে কন্টেইনার খুলে &lt;code&gt;/app&lt;/code&gt; ডিরেক্টরি সেট ও তৈরি করে &lt;strong&gt;Layer 3 ইমেজ&lt;/strong&gt; তৈরি করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 4 (&lt;code&gt;COPY ./server.go ./&lt;/code&gt;):&lt;/strong&gt; হোস্ট মেশিন থেকে কোড এনে কন্টেইনারে রেখে কমিট করে &lt;strong&gt;Layer 4 ইমেজ&lt;/strong&gt; তৈরি করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final Image:&lt;/strong&gt; সবার শেষে &lt;code&gt;CMD&lt;/code&gt; নির্দেশিকাটি Layer 4-এর সাথে বাইন্ড হয়ে আমাদের কাঙ্ক্ষিত ট্যাগযুক্ত ইমেজ (যেমন: &lt;code&gt;go_server:1.0.0&lt;/code&gt;) হিসেবে প্রস্তুত হয়।&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ৩. ডকার লেয়ার ক্যাশিংয়ের ম্যাজিক (Docker Layer Caching)
&lt;/h2&gt;

&lt;p&gt;ডকার বিল্ডের সবচেয়ে বড় শক্তি হলো এর &lt;strong&gt;লেয়ার ক্যাশিং (Layer Caching)&lt;/strong&gt;। প্রতিবার পুরো ডকারফাইল প্রথম থেকে বিল্ড করার পরিবর্তে ডকার অপরিবর্তিত লেয়ারগুলোকে লোকাল ক্যাশ থেকে পুনরায় ব্যবহার করে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────────────────────┐
│                        ডকারফাইল ক্যাশিং আচরণ                            │
├────────────────────────────────────────────────────────────────────────┤
│  FROM ubuntu:24.04         [কোনো পরিবর্তন নেই] ──▶ CACHED (0.0s)       │
│  RUN apt update            [কোনো পরিবর্তন নেই] ──▶ CACHED (0.0s)       │
│  RUN apt install -y golang [কোনো পরিবর্তন নেই] ──▶ CACHED (0.0s)       │
│                                                                        │
│  ───────▶ [ এখানে পরিবর্তন ঘটলে (Cache Invalidation) ] ◀────────       │
│                                                                        │
│  WORKDIR /habib            [পরিবর্তিত লাইন]    ──▶ NEW BUILD (কন্টেইনার)│
│  COPY ./server.go ./       [পরবর্তী সব লাইন]   ──▶ NEW BUILD (পুনরায়)   │
└────────────────────────────────────────────────────────────────────────┘

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ক্যাশ ইনভ্যালিডেশনের মূল নীতি:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ডকার উপর থেকে নিচ পর্যন্ত প্রতিটি লাইন যাচাই করে।&lt;/li&gt;
&lt;li&gt;যতক্ষণ পর্যন্ত কোনো পরিবর্তন না পাওয়া যায়, ততক্ষণ সব লেয়ার সরাসরি ক্যাশ থেকে গ্রহণ করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;যে লাইনে পরিবর্তন শনাক্ত হয়, ঠিক সেই লাইন এবং তার নিচের সমস্ত ইনস্ট্রাকশনের ক্যাশ বাতিল হয়ে যায়&lt;/strong&gt; এবং সেগুলো নতুন করে সম্পূর্ণ প্রক্রিয়ার মাধ্যমে বিল্ড হয়।&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ৪. প্রোডাকশন ডকারফাইল অপ্টিমাইজেশন স্ট্র্যাটেজি
&lt;/h2&gt;

&lt;p&gt;প্রোডাকশন এনভায়রনমেন্টে একটি ডকারফাইল শত শত লাইনের হতে পারে। ভুলভাবে ডকারফাইল সাজালে একটি সাধারণ কোড পরিবর্তনের কারণেও ৪০-৫০ মিনিট পর্যন্ত অপ্রয়োজনীয় বিল্ড টাইম লাগতে পারে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────┐
│               ডকারফাইল সাজানোর মূল নিয়ম                │
├────────────────────────────────────────────────────────┤
│  [উপরে]   অপরিবর্তনশীল ও ভারী লেয়ার (OS, Runtime, SDK) │
│    │                                                   │
│    ▼                                                   │
│  [মাঝখানে] ডিপেন্ডেন্সি তালিকা (package.json / go.mod)  │
│    │                                                   │
│    ▼                                                   │
│  [নিচে]   ঘনঘন পরিবর্তিত সোর্স কোড (server.go / src/)   │
└────────────────────────────────────────────────────────┘

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  বেস্ট প্র্যাকটিস:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ওএস ও ভারী প্যাকেজ উপরে রাখুন:&lt;/strong&gt; যেমন &lt;code&gt;RUN apt update&lt;/code&gt; বা রানটাইম ইনস্টলেশন একদম উপরে রাখা উচিত, কারণ এগুলোতে ঘনঘন হাত দেওয়ার প্রয়োজন হয় না।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;সোর্স কোড নিচে রাখুন:&lt;/strong&gt; অ্যাপ্লিকেশন কোড (&lt;code&gt;COPY . .&lt;/code&gt;) ডেভেলপাররা প্রতিনিয়ত পরিবর্তন করেন। তাই কোড কপি করার লাইনটি ডকারফাইলের নিচের দিকে রাখা উচিত, যেন উপরের ভারী ডিপেন্ডেন্সিগুলোর ক্যাশ অক্ষত থাকে এবং বিল্ড কয়েক সেকেন্ডের মধ্যে শেষ হয়।&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  সংক্ষেপ চিত্র (Cheat Sheet)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ইন্টারমিডিয়েট ইমেজ:&lt;/strong&gt; প্রতিটি &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;COPY&lt;/code&gt;, &lt;code&gt;WORKDIR&lt;/code&gt; ব্যাকগ্রাউন্ডে একটি করে ইন্টারমিডিয়েট ইমেজ লেয়ার তৈরি করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;টেম্পোরারি কন্টেইনার:&lt;/strong&gt; লেয়ারের কমান্ড এক্সিকিউট করতে ডকার ক্ষণস্থায়ী কন্টেইনার তৈরি করে এবং কাজ শেষে তা নিজে থেকেই ডিলিট করে দেয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ক্যাশ সেভ:&lt;/strong&gt; যে লাইনে পরিবর্তন আসে, তার নিচের সব লেয়ার নতুন করে বিল্ড হয়; উপরের লেয়ারগুলো অক্ষত থাকে।&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>automation</category>
      <category>devops</category>
      <category>docker</category>
    </item>
    <item>
      <title>ডকারফাইলে WORKDIR-এর গভীর বিশ্লেষণ (WORKDIR Deep Dive)</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 30 Aug 2026 11:37:00 +0000</pubDate>
      <link>https://dev.to/ragibcs/ddkaarphaaile-workdir-er-gbhiir-bishlessnn-workdir-deep-dive-2nce</link>
      <guid>https://dev.to/ragibcs/ddkaarphaaile-workdir-er-gbhiir-bishlessnn-workdir-deep-dive-2nce</guid>
      <description>&lt;p&gt;ডকারফাইলে (Dockerfile) কনটেইনারের ভেতরের ফাইল ও পাথ ব্যবস্থাপনার জন্য &lt;strong&gt;&lt;code&gt;WORKDIR&lt;/code&gt;&lt;/strong&gt; একটি অত্যন্ত গুরুত্বপূর্ণ ইনস্ট্রাকশন। পূর্ববর্তী পর্বে আমরা &lt;code&gt;CMD&lt;/code&gt; কমান্ডের কাজ বিস্তারিত দেখেছি। আজকের পর্বে আমরা জানব: &lt;strong&gt;&lt;code&gt;WORKDIR&lt;/code&gt; ব্যবহার না করলে কী সমস্যা হয়&lt;/strong&gt;, এটি কীভাবে ডিরেক্টরি পাথ সরল করে এবং কনটেইনারের ভেতরে এক্সিকিউশন কনটেক্সট সেট করে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১. ডিফল্ট আচরণ: WORKDIR ছাড়া কী ঘটে?
&lt;/h2&gt;

&lt;p&gt;একটি লিনাক্স বেজ ইমেজে (যেমন: &lt;code&gt;ubuntu:24.04&lt;/code&gt;) ডিফল্টভাবে সক্রিয় ওয়ার্কিং ডিরেক্টরি থাকে একদম মূল &lt;strong&gt;রুট ডিরেক্টরি (&lt;code&gt;/&lt;/code&gt;)&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;যদি আমরা &lt;code&gt;WORKDIR&lt;/code&gt; ব্যবহার না করে সাধারণ &lt;code&gt;RUN mkdir /app&lt;/code&gt; কমান্ড দিয়ে একটি ফোল্ডার তৈরি করি, তবে ডকার শুধুমাত্র ফোল্ডারটি তৈরি করে কিন্তু সক্রিয় পাথ পরিবর্তন করে না। ফলে পরবর্তী সকল ইনস্ট্রাকশন রুট ডিরেক্টরিতেই (&lt;code&gt;/&lt;/code&gt;) চলতে থাকে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────────────────────┐
│                        ১. WORKDIR ছাড়া প্রক্রিয়া                       │
│                                                                        │
│  ডিফল্ট পাথ: / (Root)                                                  │
│  ├── RUN mkdir /app       ──▶ ফোল্ডার তৈরি হলো, কিন্তু কারেন্ট পাথ '/' │
│  ├── COPY server.go /app/ ──▶ কপি করতে পুরো পাথ উল্লেখ করতে হয়         │
│  └── CMD ["go", "run", "/app/server.go"] ──▶ এবসলিউট পাথ বাধ্যতামূলক    │
└────────────────────────────────────────────────────────────────────────┘

                                   VS

┌────────────────────────────────────────────────────────────────────────┐
│                        ২. WORKDIR সহ প্রক্রিয়া                        │
│                                                                        │
│  WORKDIR /app                                                          │
│  ├── স্বয়ংক্রিয়ভাবে '/app' ফোল্ডার তৈরি হয় (যদি না থাকে)              │
│  ├── পরবর্তী সকল নির্দেশের কারেন্ট পাথ '/app' এ সেট হয়ে যায়            │
│  ├── COPY server.go ./    ──▶ সরাসরি কারেন্ট পাথে কপি                 │
│  └── CMD ["go", "run", "server.go"] ──▶ কোনো পাথ প্রিফিক্স লাগে না     │
└────────────────────────────────────────────────────────────────────────┘

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ২. কেস স্টাডি ১: &lt;code&gt;WORKDIR&lt;/code&gt; ছাড়া ডকারফাইল কনফিগারেশন
&lt;/h2&gt;

&lt;p&gt;যদি আমরা &lt;code&gt;WORKDIR&lt;/code&gt; ব্যবহার না করি, তাহলে ডকারফাইলটি দেখতে এমন হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# বেজ ইমেজ ও Golang ইনস্টলেশন&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="c"&gt;# ম্যানুয়ালি ফোল্ডার তৈরি&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app

&lt;span class="c"&gt;# রুট কনটেক্সট থেকে /app পাথে কোড কপি&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go /app/server.go&lt;/span&gt;

&lt;span class="c"&gt;# এবসলিউট পাথ উল্লেখ করে কমান্ড রান&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "/app/server.go"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  এর সীমাবদ্ধতাসমূহ:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;পাথের পুনরাবৃত্তি:&lt;/strong&gt; প্রতিটি ফাইলে &lt;code&gt;/app/&lt;/code&gt; বা সম্পূর্ণ পাথ বারবার টাইপ করতে হয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;কমান্ড ফেইল হওয়ার ঝুঁকি:&lt;/strong&gt; &lt;code&gt;CMD&lt;/code&gt; বা &lt;code&gt;RUN&lt;/code&gt;-এ সরাসরি ফাইলের নাম দিলে তা রুটে (&lt;code&gt;/&lt;/code&gt;) খোঁজার চেষ্টা করবে এবং &lt;code&gt;No such file&lt;/code&gt; এরর দেবে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ডিবাগিংয়ের অসুবিধা:&lt;/strong&gt; &lt;code&gt;docker exec&lt;/code&gt; দিয়ে কন্টেইনারে প্রবেশ করলে ডিফল্টভাবে রুটে (&lt;code&gt;/&lt;/code&gt;) ল্যান্ড করতে হয়, ফলে বারবার &lt;code&gt;cd /app&lt;/code&gt; করতে হয়।&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ৩. কেস স্টাডি ২: &lt;code&gt;WORKDIR&lt;/code&gt; দিয়ে আদর্শ ডকারফাইল কনফিগারেশন
&lt;/h2&gt;

&lt;p&gt;ডকারফাইলে &lt;code&gt;WORKDIR /app&lt;/code&gt; ইনস্ট্রাকশন দিলে এটি একাধারে ফোল্ডার তৈরি এবং ভেতরে প্রবেশের কাজটি স্বয়ংক্রিয়ভাবে সম্পন্ন করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="c"&gt;# ওয়ার্কিং ডিরেক্টরি নির্ধারণ&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# কারেন্ট ডিরেক্টরিতে (./) কোড কপি&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;

&lt;span class="c"&gt;# সরাসরি ফাইলনেম দিয়ে অ্যাপ্লিকেশন চালু&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ৪. &lt;code&gt;WORKDIR&lt;/code&gt; ব্যবহারের মূল সুবিধাসমূহ
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│                    WORKDIR-এর প্রধান সুবিধাসমূহ             │
├─────────────────────────────────────────────────────────────┤
│ 1. Auto-Directory Creation : ফোল্ডার না থাকলে নিজে তৈরি করে │
│ 2. Context Switching       : পরবর্তী কমান্ডের পাথ নির্ধারণ করে │
│ 3. Clean Syntax            : অপ্রয়োজনীয় এবসলিউট পাথ দূর করে │
│ 4. Direct Container Entry  : docker exec সরাসরি পাথে খোলে   │
└─────────────────────────────────────────────────────────────┘

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;স্বয়ংক্রিয় ডিরেক্টরি তৈরি:&lt;/strong&gt; যদি নির্ধারিত ডিরেক্টরি আগে থেকে বিদ্যমান না থাকে, ডকার নিজে থেকেই সেটি তৈরি করে নেয় (আলাদা করে &lt;code&gt;RUN mkdir&lt;/code&gt; দেওয়ার দরকার নেই)।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;সাবসিকুয়েন্ট কমান্ড কনটেক্সট:&lt;/strong&gt; &lt;code&gt;WORKDIR&lt;/code&gt;-এর পরবর্তী সব &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;COPY&lt;/code&gt;, &lt;code&gt;ADD&lt;/code&gt;, &lt;code&gt;CMD&lt;/code&gt; এবং &lt;code&gt;ENTRYPOINT&lt;/code&gt; ওই নির্দিষ্ট ডিরেক্টরির ভেতর কার্যকর হয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ক্লিন টার্মিনাল সেশন:&lt;/strong&gt; &lt;code&gt;docker exec -it &amp;lt;container_id&amp;gt; bash&lt;/code&gt; দিয়ে কন্টেইনারে প্রবেশ করলে সরাসরি &lt;code&gt;/app&lt;/code&gt; ডিরেক্টরিতে নিয়ে যায়।&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ৫. হ্যান্ডস-অন প্র্যাকটিস: বিল্ড, রান ও ভেরিফিকেশন
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ১. ইমেজ বিল্ড করা
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.3 &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বিল্ড চলাকালীন ডকার স্বয়ংক্রিয়ভাবে &lt;code&gt;/app&lt;/code&gt; ডিরেক্টরি সেট করে এবং &lt;code&gt;server.go&lt;/code&gt; ফাইলটি কপি করে।&lt;/p&gt;




&lt;h3&gt;
  
  
  ২. কন্টেইনার রান করা
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.3

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;আউটপুট:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on port 8080

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ৩. কন্টেইনারে প্রবেশ ও পাথ যাচাই
&lt;/h3&gt;

&lt;p&gt;অন্য একটি টার্মিনাল ওপেন করে কন্টেইনারের অভ্যন্তরীণ অবস্থা পরীক্ষা করা যাক:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# কন্টেইনারের ভেতর প্রবেশ&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;CONTAINER_ID&amp;gt; bash

&lt;span class="c"&gt;# বর্তমান লোকেশন যাচাই&lt;/span&gt;
&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;span class="c"&gt;# আউটপুট: /app&lt;/span&gt;

&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;span class="c"&gt;# আউটপুট: server.go&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কার্ল (curl) দিয়ে রিকোয়েস্ট পাঠালে সার্ভার রেসপন্স পাওয়া যাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;span class="c"&gt;# আউটপুট: Hello World!&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ডকারফাইল কমান্ড সারসংক্ষেপ
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ইনস্ট্রাকশন&lt;/th&gt;
&lt;th&gt;কাজ&lt;/th&gt;
&lt;th&gt;ব্যবহারের উদাহরণ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FROM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;বেজ ইমেজ নির্বাচন করে&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FROM ubuntu:24.04&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RUN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;বিল্ড টাইমে সিস্টেম কমান্ড চালায়&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RUN apt update&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WORKDIR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;সক্রিয় ডিরেক্টরি তৈরি ও সেট করে&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WORKDIR /app&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;COPY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;হোস্ট ফাইল কন্টেইনারে কপি করে&lt;/td&gt;
&lt;td&gt;&lt;code&gt;COPY ./server.go ./server.go&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CMD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;কন্টেইনার শুরুর ডিফল্ট কমান্ড নির্ধারণ করে&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CMD ["go", "run", "server.go"]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




</description>
      <category>devops</category>
      <category>docker</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Dockerfile CMD Explained: Build-Time vs Runtime and How CMD Override Works</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 30 Aug 2026 08:52:04 +0000</pubDate>
      <link>https://dev.to/ragibcs/dockerfile-cmd-explained-build-time-vs-runtime-and-how-cmd-override-works-6hd</link>
      <guid>https://dev.to/ragibcs/dockerfile-cmd-explained-build-time-vs-runtime-and-how-cmd-override-works-6hd</guid>
      <description>&lt;p&gt;Dockerfile শেখার সময় &lt;code&gt;FROM&lt;/code&gt;, &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;WORKDIR&lt;/code&gt;, এবং &lt;code&gt;COPY&lt;/code&gt; নিয়ে কাজ করার পর খুব স্বাভাবিকভাবেই একটি প্রশ্ন আসে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Container start হলে application automatically কীভাবে run করবে?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আমরা যদি শুধু এই ধরনের Dockerfile লিখি—&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে image তৈরি হবে ঠিকই।&lt;/p&gt;

&lt;p&gt;Go-ও install হবে।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server.go&lt;/code&gt;-ও image-এর মধ্যে চলে যাবে।&lt;/p&gt;

&lt;p&gt;কিন্তু container start করলে কি আমাদের Go server automatically চালু হবে?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;না।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;আমাদের আবার container-এর ভিতরে ঢুকে manually লিখতে হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই সেই জায়গা যেখানে Dockerfile-এর একটি অত্যন্ত গুরুত্বপূর্ণ instruction সামনে আসে:&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;code&gt;CMD&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; আমাদের image-এর &lt;strong&gt;default runtime command&lt;/strong&gt; নির্ধারণ করে।&lt;/p&gt;

&lt;p&gt;এই article-এ আমরা দেখব:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;কেন container immediately exit করতে পারে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CMD&lt;/code&gt; কী&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RUN&lt;/code&gt; এবং &lt;code&gt;CMD&lt;/code&gt;-এর পার্থক্য&lt;/li&gt;
&lt;li&gt;build time বনাম runtime&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CMD&lt;/code&gt; কীভাবে Docker image-এর সঙ্গে থাকে&lt;/li&gt;
&lt;li&gt;কীভাবে &lt;code&gt;CMD&lt;/code&gt; override করা যায়&lt;/li&gt;
&lt;li&gt;এবং একটি real Go server দিয়ে পুরো বিষয়টি hands-onভাবে বোঝা&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এই distinction বোঝা Docker-এর fundamental concepts-এর একটি।&lt;/p&gt;




&lt;h1&gt;
  
  
  1. The Problem: Why Does the Container Exit?
&lt;/h1&gt;

&lt;p&gt;ধরুন আমাদের image তৈরি হয়ে গেছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new_go_server:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আমরা চালালাম:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু কিছুক্ষণ পরেই container বন্ধ হয়ে গেল।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker ps&lt;/code&gt;-এ কিছু নেই।&lt;/p&gt;

&lt;p&gt;তখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে দেখা যাবে container-এর status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Exited
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কেন?&lt;/p&gt;

&lt;p&gt;কারণ container কোনো GUI application নয় যে শুধু "open" হয়ে থাকবে।&lt;/p&gt;

&lt;p&gt;একটি Docker container-এর lifecycle মূলত তার &lt;strong&gt;primary process&lt;/strong&gt;-এর সঙ্গে সম্পর্কিত।&lt;/p&gt;

&lt;p&gt;যে process container-এর প্রধান process হিসেবে চলছে সেটি শেষ হয়ে গেলে container-ও শেষ হয়ে যায়। Reference material-এও এই কারণেই default command/process না থাকলে container start হয়ে immediately exit করার বিষয়টি দেখানো হয়েছে।&lt;/p&gt;

&lt;p&gt;আমাদের Go application-এর ক্ষেত্রে আমরা চাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
     ↓
Container starts
     ↓
Go server starts
     ↓
Server keeps running
     ↓
Container stays alive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু Docker-কে তো আমরা বলিইনি যে server কীভাবে start করবে।&lt;/p&gt;

&lt;p&gt;এখানেই &lt;code&gt;CMD&lt;/code&gt; প্রয়োজন।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. What Does &lt;code&gt;CMD&lt;/code&gt; Actually Do?
&lt;/h1&gt;

&lt;p&gt;সহজ ভাষায়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;CMD&lt;/code&gt; বলে দেয়—কোনো image থেকে container start হলে default হিসেবে কোন command চালানো হবে।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আমাদের ক্ষেত্রে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর অর্থ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Container starts
       ↓
Run:
go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ফলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলেই Go server automatically start হবে।&lt;/p&gt;

&lt;p&gt;আর manually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;লিখতে হবে না।&lt;/p&gt;

&lt;p&gt;এটাই &lt;code&gt;CMD&lt;/code&gt;-এর মূল purpose।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Our Complete Dockerfile
&lt;/h1&gt;

&lt;p&gt;এখন আগের Dockerfile-এ &lt;code&gt;CMD&lt;/code&gt; যোগ করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update

&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আমাদের Dockerfile-এর responsibilities পরিষ্কার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
 ↓
Base Image

RUN
 ↓
Install Dependencies

WORKDIR
 ↓
Set Working Directory

COPY
 ↓
Bring Application Code

CMD
 ↓
Define Default Runtime Command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি Dockerfile-এর একটি very useful mental model।&lt;/p&gt;




&lt;h1&gt;
  
  
  4. The Most Important Concept: &lt;code&gt;RUN&lt;/code&gt; vs &lt;code&gt;CMD&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Dockerfile শেখার সময় সবচেয়ে common confusion:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;code&gt;RUN&lt;/code&gt; আর &lt;code&gt;CMD&lt;/code&gt;—দুটোই তো command চালায়। তাহলে difference কী?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Difference হলো &lt;strong&gt;কখন&lt;/strong&gt; এবং &lt;strong&gt;কেন&lt;/strong&gt; command চালানো হচ্ছে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;RUN&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;RUN&lt;/code&gt; execute হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর সময়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;CMD&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; execute হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর সময়।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 docker build
                      │
                      ▼
               ┌─────────────┐
               │     RUN     │
               └─────────────┘
                      │
                      ▼
                   IMAGE
                      │
                      │ docker run
                      ▼
               ┌─────────────┐
               │     CMD     │
               └─────────────┘
                      │
                      ▼
                 CONTAINER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference material-এও &lt;code&gt;RUN&lt;/code&gt;-কে build phase এবং &lt;code&gt;CMD&lt;/code&gt;-কে run phase-এর instruction হিসেবে আলাদা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  5. What Happens During &lt;code&gt;docker build&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;ধরুন আমরা চালালাম:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build-এর সময় Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM ubuntu:24.04
        ↓
RUN apt update
        ↓
RUN apt install -y golang
        ↓
WORKDIR /app
        ↓
COPY server.go
        ↓
Create Image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু এখানে একটি গুরুত্বপূর্ণ বিষয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;এই command build-এর সময় execute হয় না।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি image-এর configuration/metadata-এর অংশ হিসেবে রাখা হয়।&lt;/p&gt;

&lt;p&gt;Reference build flow-এও &lt;code&gt;CMD&lt;/code&gt; build step হিসেবে execute না হয়ে image-এর সঙ্গে default runtime instruction হিসেবে সংরক্ষিত হওয়ার বিষয়টি দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Then What Happens During &lt;code&gt;docker run&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;Build শেষ।&lt;/p&gt;

&lt;p&gt;আমাদের image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালাম।&lt;/p&gt;

&lt;p&gt;Docker image থেকে একটি container তৈরি করবে।&lt;/p&gt;

&lt;p&gt;তারপর image-এর মধ্যে থাকা default &lt;code&gt;CMD&lt;/code&gt; দেখবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং container-এর ভিতরে সেটি execute করবে।&lt;/p&gt;

&lt;p&gt;ফলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
     ↓
Create Container
     ↓
Start Container
     ↓
Execute CMD
     ↓
go run server.go
     ↓
Go Server :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন container আর সঙ্গে সঙ্গে exit করবে না, কারণ Go server foreground-এ চলমান process হিসেবে container-কে active রাখছে। Reference hands-on test-এও &lt;code&gt;docker run new_go_server:1.0.1&lt;/code&gt;-এর পর &lt;code&gt;CMD&lt;/code&gt; থেকে Go server automatically start হওয়ার বিষয়টি দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Understanding the Exec Form
&lt;/h1&gt;

&lt;p&gt;আমরা লিখেছি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাকে বলা হয় &lt;strong&gt;Exec Form&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;এখানে প্রতিটি argument আলাদা string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"go"
"run"
"server.go"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং comma দিয়ে আলাদা করা হয়েছে।&lt;/p&gt;

&lt;p&gt;Conceptually এটি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;command-টির equivalent।&lt;/p&gt;

&lt;p&gt;Reference material-এ Dockerfile-এর জন্য এই JSON-array/Exec Form syntax-টিকেই ব্যবহার করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. A Critical Mental Model
&lt;/h1&gt;

&lt;p&gt;এখন এই দুইটি statement মনে রাখুন:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;RUN&lt;/code&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build the image.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;CMD&lt;/code&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Run the application when the container starts.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আরও সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RUN
→ Image তৈরির সময়

CMD
→ Container চালুর সময়
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই একটি distinction Dockerfile-এর অনেক confusion দূর করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  9. &lt;code&gt;CMD&lt;/code&gt; Does NOT Run During Build
&lt;/h1&gt;

&lt;p&gt;এটি beginner-দের একটি common misunderstanding।&lt;/p&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;লিখেছি।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; go-server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালাম।&lt;/p&gt;

&lt;p&gt;এখানে Go server start হবে না।&lt;/p&gt;

&lt;p&gt;আপনি build output-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখবেন না।&lt;/p&gt;

&lt;p&gt;কারণ &lt;code&gt;CMD&lt;/code&gt; তখন execute হয়নি।&lt;/p&gt;

&lt;p&gt;Image তৈরি হয়েছে এবং default command হিসেবে &lt;code&gt;CMD&lt;/code&gt; image-এর সঙ্গে সংরক্ষিত হয়েছে।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run go-server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে &lt;code&gt;CMD&lt;/code&gt; execute হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  10. The Magic of Default Commands
&lt;/h1&gt;

&lt;p&gt;এখন সবচেয়ে useful part।&lt;/p&gt;

&lt;p&gt;আমাদের image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর default command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে effectively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run container
+
Use the image's default command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ফলে server automatically start হয়।&lt;/p&gt;

&lt;p&gt;এটাই containerized application-এর expected behaviour:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run image
        ↓
Application starts
        ↓
Application keeps running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User-কে container-এর ভিতরে ঢুকে application manually start করতে হয় না।&lt;/p&gt;




&lt;h1&gt;
  
  
  11. But What If I Want Another Command?
&lt;/h1&gt;

&lt;p&gt;এখানে Docker-এর আরেকটি powerful feature আছে।&lt;/p&gt;

&lt;p&gt;ধরুন image-এর default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু debugging-এর জন্য আমরা container-এর ভিতরে &lt;code&gt;bash&lt;/code&gt; shell চাই।&lt;/p&gt;

&lt;p&gt;তাহলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে কী হলো?&lt;/p&gt;

&lt;p&gt;আমরা &lt;code&gt;bash&lt;/code&gt; command দিয়েছি।&lt;/p&gt;

&lt;p&gt;Docker default &lt;code&gt;CMD&lt;/code&gt; ব্যবহার না করে এই command execute করবে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile CMD
      │
      │ override
      ▼
docker run ... bash
      │
      ▼
bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference material-এ এই exact behaviour দেখানো হয়েছে—&lt;code&gt;docker run &amp;lt;image&amp;gt; &amp;lt;custom_command&amp;gt;&lt;/code&gt; ব্যবহার করলে Dockerfile-এর &lt;code&gt;CMD&lt;/code&gt; override হয়ে custom command execute হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  12. CMD Override: A Practical Example
&lt;/h1&gt;

&lt;p&gt;Default behaviour:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ &lt;code&gt;CMD&lt;/code&gt; override হয়েছে।&lt;/p&gt;

&lt;p&gt;এটি বিশেষ করে debugging-এর সময় useful।&lt;/p&gt;

&lt;p&gt;ধরুন application start হচ্ছে না।&lt;/p&gt;

&lt;p&gt;তখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে container-এর ভিতরে ঢুকে manually inspect করতে পারি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls
&lt;/span&gt;go version
go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ production-এ default command ব্যবহার করা হবে, আর troubleshooting-এর সময় custom command দিয়ে override করা যেতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. CMD Override মানে Image পরিবর্তন নয়
&lt;/h1&gt;

&lt;p&gt;এখানে আরেকটি subtle point আছে।&lt;/p&gt;

&lt;p&gt;যখন আমরা:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিই, তখন আমরা Docker image-এর &lt;code&gt;CMD&lt;/code&gt; permanently পরিবর্তন করছি না।&lt;/p&gt;

&lt;p&gt;শুধু &lt;strong&gt;এই particular container-এর জন্য&lt;/strong&gt; default command-এর পরিবর্তে &lt;code&gt;bash&lt;/code&gt; চালাচ্ছি।&lt;/p&gt;

&lt;p&gt;পরেরবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে আবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;execute হবে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Image
│
├── Default CMD → go run server.go
│
├── Container A → default CMD
│
└── Container B → bash override
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image-এর default configuration unchanged থাকে।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Hands-On: Build the New Image
&lt;/h1&gt;

&lt;p&gt;এখন complete Dockerfile দিয়ে নতুন image build করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build-এর সময়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
RUN
RUN
WORKDIR
COPY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর instructions process হবে।&lt;/p&gt;

&lt;p&gt;কিন্তু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;run হবে না।&lt;/p&gt;

&lt;p&gt;এটি image-এর default runtime command হিসেবে save হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Run Without &lt;code&gt;-it&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;এবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কোনো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নেই।&lt;/p&gt;

&lt;p&gt;কোনো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নেই।&lt;/p&gt;

&lt;p&gt;শুধু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
+
image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং তারপরও Go server start হয়ে যাবে।&lt;/p&gt;

&lt;p&gt;কারণ Docker image-এর মধ্যে আমরা already define করেছি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই আমাদের desired behaviour।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Verify the Running Container
&lt;/h1&gt;

&lt;p&gt;অন্য terminal খুলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে running container দেখা যাবে।&lt;/p&gt;

&lt;p&gt;তারপর container-এর ভিতরে প্রবেশ করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;CONTAINER_ID&amp;gt; bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference hands-on workflow-এ &lt;code&gt;docker exec&lt;/code&gt; দিয়ে running container-এ ঢুকে &lt;code&gt;curl http://localhost:8080&lt;/code&gt; ব্যবহার করে &lt;code&gt;Hello World!&lt;/code&gt; response verify করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  17. &lt;code&gt;docker run&lt;/code&gt; বনাম &lt;code&gt;docker exec&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;এই example-এ আরেকটি important distinction পাওয়া যায়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;docker run&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;নতুন container তৈরি করে এবং তার default command বা supplied command চালায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;docker exec&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Already running container-এর ভিতরে নতুন command চালায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;CONTAINER_ID&amp;gt; bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
→ Start a new container

docker exec
→ Execute inside an existing container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই distinction debugging-এর সময় খুব গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Complete Lifecycle
&lt;/h1&gt;

&lt;p&gt;এখন পুরো lifecycle-টা একসঙ্গে দেখি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Dockerfile
                     │
                     │ docker build
                     ▼
              Docker Image
                     │
              ┌──────┴──────┐
              │             │
              │ docker run  │
              │             │
              ▼             ▼
        Default CMD      Custom Command
              │             │
              ▼             ▼
     go run server.go      bash
              │
              ▼
       Go HTTP Server
              │
              ▼
          :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Dockerfile থেকে image, image থেকে container, এবং container start হওয়ার সময় &lt;code&gt;CMD&lt;/code&gt; execution—পুরো chain-টি পরিষ্কার হয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  19. &lt;code&gt;RUN&lt;/code&gt; vs &lt;code&gt;CMD&lt;/code&gt;: Final Comparison
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;বিষয়&lt;/th&gt;
&lt;th&gt;&lt;code&gt;RUN&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;CMD&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;কখন execute হয়?&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;মূল উদ্দেশ্য&lt;/td&gt;
&lt;td&gt;Image তৈরি/configure করা&lt;/td&gt;
&lt;td&gt;Default runtime command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image layer তৈরি করে?&lt;/td&gt;
&lt;td&gt;হ্যাঁ&lt;/td&gt;
&lt;td&gt;Command নিজে build layer তৈরি করে না&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build-এর সময় application চালায়?&lt;/td&gt;
&lt;td&gt;হতে পারে&lt;/td&gt;
&lt;td&gt;না&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Container start হলে automatically execute?&lt;/td&gt;
&lt;td&gt;না&lt;/td&gt;
&lt;td&gt;হ্যাঁ, যদি override না করা হয়&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Override করা যায়?&lt;/td&gt;
&lt;td&gt;Runtime command হিসেবে নয়&lt;/td&gt;
&lt;td&gt;হ্যাঁ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RUN apt install -y golang&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CMD ["go", "run", "server.go"]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Reference material-এও execution phase, purpose এবং image-এর সঙ্গে persistence-এর ভিত্তিতে &lt;code&gt;RUN&lt;/code&gt; ও &lt;code&gt;CMD&lt;/code&gt;-কে এভাবেই আলাদা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  20. The Three Most Important Commands
&lt;/h1&gt;

&lt;p&gt;এই lesson-এর core workflow মাত্র কয়েকটি command-এ:&lt;/p&gt;

&lt;h3&gt;
  
  
  Build
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Normal Run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;code&gt;CMD&lt;/code&gt; automatically execute হবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Debug / Override
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;code&gt;CMD&lt;/code&gt; override হয়ে &lt;code&gt;bash&lt;/code&gt; execute হবে।&lt;/p&gt;

&lt;p&gt;এই তিনটি command-এর relationship বুঝলেই &lt;code&gt;CMD&lt;/code&gt; অনেক সহজ হয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  21. The Most Important Mental Model
&lt;/h1&gt;

&lt;p&gt;Dockerfile-এর ক্ষেত্রে এই flow-টি মনে রাখুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 BUILD TIME
                     │
                     ▼
        ┌────────────────────────┐
        │ FROM                   │
        │ RUN                    │
        │ WORKDIR                │
        │ COPY                   │
        └────────────────────────┘
                     │
                     ▼
                Docker Image
                     │
                     │ docker run
                     ▼
                 RUNTIME
                     │
                     ▼
                   CMD
                     │
                     ▼
             Application Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;RUN&lt;/code&gt; prepares the image. &lt;code&gt;CMD&lt;/code&gt; starts the application.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এই এক লাইনের mental model-টি Dockerfile-এর অনেক confusion দূর করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Why This Matters Beyond This Example
&lt;/h1&gt;

&lt;p&gt;আমাদের example একটি simple Go server।&lt;/p&gt;

&lt;p&gt;কিন্তু একই principle practically সব ধরনের containerized application-এর ক্ষেত্রে দেখা যায়।&lt;/p&gt;

&lt;p&gt;একটি application image তৈরি করার সময়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dependencies
Configuration
Application Files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;image-এর মধ্যে prepare করা হয়।&lt;/p&gt;

&lt;p&gt;আর container start হওয়ার সময়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;start করা হয়।&lt;/p&gt;

&lt;p&gt;তাই একটি well-designed container-এর ক্ষেত্রে user experience ideally এমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &amp;lt;image&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং application নিজে থেকেই start করবে।&lt;/p&gt;

&lt;p&gt;User-কে container-এর ভিতরে গিয়ে manually setup করতে হবে না।&lt;/p&gt;

&lt;p&gt;এটাই containerization-এর বড় সুবিধাগুলোর একটি।&lt;/p&gt;




&lt;h1&gt;
  
  
  23. One Last Look at Our Go Server
&lt;/h1&gt;

&lt;p&gt;আমাদের &lt;code&gt;server.go&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Server is running on :8080"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Debug:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই ছোট example-এর মধ্যেই Dockerfile-এর একটি complete lifecycle দেখা যাচ্ছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Takeaway
&lt;/h1&gt;

&lt;p&gt;আজকের lesson-এ মূলত একটি প্রশ্নের উত্তর খুঁজেছি:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do we make a Docker container automatically start our application?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;উত্তর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু শুধু syntax মনে রাখলে হবে না।&lt;/p&gt;

&lt;p&gt;বোঝা দরকার &lt;strong&gt;কখন&lt;/strong&gt; এটি execute হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;docker build&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
RUN
WORKDIR
COPY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো image তৈরি করে।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; তখন execute হয় না।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;docker run&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Container Created
      ↓
CMD Executed
      ↓
Go Server Started
      ↓
Container Keeps Running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর যদি debugging করতে চাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে default &lt;code&gt;CMD&lt;/code&gt; override হয়ে &lt;code&gt;bash&lt;/code&gt; চালু হবে।&lt;/p&gt;

&lt;p&gt;শেষ পর্যন্ত Docker-এর এই simple mental model-টি মনে রাখুন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build the environment with &lt;code&gt;RUN&lt;/code&gt;.&lt;br&gt;
Define the default application process with &lt;code&gt;CMD&lt;/code&gt;.&lt;br&gt;
Start it with &lt;code&gt;docker run&lt;/code&gt;.&lt;br&gt;
Override it when you need to debug.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;একটি ছোট &lt;code&gt;CMD&lt;/code&gt; instruction আসলে Docker image-কে একটি static filesystem থেকে একটি &lt;strong&gt;runnable application environment&lt;/strong&gt;-এ পরিণত করার গুরুত্বপূর্ণ অংশ।&lt;/p&gt;

&lt;p&gt;আর Docker শেখার পরবর্তী ধাপে এই concept থেকেই naturally আসে &lt;code&gt;ENTRYPOINT&lt;/code&gt;, &lt;code&gt;CMD&lt;/code&gt; বনাম &lt;code&gt;ENTRYPOINT&lt;/code&gt;, environment variables, ports, volumes এবং production-grade container design।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand the lifecycle, not just the command.&lt;/strong&gt; 🐳&lt;/p&gt;

</description>
      <category>backend</category>
      <category>devops</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Dockerfile CMD Explained: Build-Time vs Runtime and How CMD Override Works</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 30 Aug 2026 08:37:10 +0000</pubDate>
      <link>https://dev.to/ragibcs/dockerfile-cmd-explained-build-time-vs-runtime-and-how-cmd-override-works-l4h</link>
      <guid>https://dev.to/ragibcs/dockerfile-cmd-explained-build-time-vs-runtime-and-how-cmd-override-works-l4h</guid>
      <description>&lt;p&gt;Dockerfile শেখার সময় &lt;code&gt;FROM&lt;/code&gt;, &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;WORKDIR&lt;/code&gt;, এবং &lt;code&gt;COPY&lt;/code&gt; নিয়ে কাজ করার পর খুব স্বাভাবিকভাবেই একটি প্রশ্ন আসে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Container start হলে application automatically কীভাবে run করবে?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আমরা যদি শুধু এই ধরনের Dockerfile লিখি—&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে image তৈরি হবে ঠিকই।&lt;/p&gt;

&lt;p&gt;Go-ও install হবে।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server.go&lt;/code&gt;-ও image-এর মধ্যে চলে যাবে।&lt;/p&gt;

&lt;p&gt;কিন্তু container start করলে কি আমাদের Go server automatically চালু হবে?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;না।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;আমাদের আবার container-এর ভিতরে ঢুকে manually লিখতে হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই সেই জায়গা যেখানে Dockerfile-এর একটি অত্যন্ত গুরুত্বপূর্ণ instruction সামনে আসে:&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;code&gt;CMD&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; আমাদের image-এর &lt;strong&gt;default runtime command&lt;/strong&gt; নির্ধারণ করে।&lt;/p&gt;

&lt;p&gt;এই article-এ আমরা দেখব:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;কেন container immediately exit করতে পারে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CMD&lt;/code&gt; কী&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RUN&lt;/code&gt; এবং &lt;code&gt;CMD&lt;/code&gt;-এর পার্থক্য&lt;/li&gt;
&lt;li&gt;build time বনাম runtime&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CMD&lt;/code&gt; কীভাবে Docker image-এর সঙ্গে থাকে&lt;/li&gt;
&lt;li&gt;কীভাবে &lt;code&gt;CMD&lt;/code&gt; override করা যায়&lt;/li&gt;
&lt;li&gt;এবং একটি real Go server দিয়ে পুরো বিষয়টি hands-onভাবে বোঝা&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এই distinction বোঝা Docker-এর fundamental concepts-এর একটি।&lt;/p&gt;




&lt;h1&gt;
  
  
  1. The Problem: Why Does the Container Exit?
&lt;/h1&gt;

&lt;p&gt;ধরুন আমাদের image তৈরি হয়ে গেছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new_go_server:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আমরা চালালাম:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু কিছুক্ষণ পরেই container বন্ধ হয়ে গেল।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker ps&lt;/code&gt;-এ কিছু নেই।&lt;/p&gt;

&lt;p&gt;তখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে দেখা যাবে container-এর status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Exited
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কেন?&lt;/p&gt;

&lt;p&gt;কারণ container কোনো GUI application নয় যে শুধু "open" হয়ে থাকবে।&lt;/p&gt;

&lt;p&gt;একটি Docker container-এর lifecycle মূলত তার &lt;strong&gt;primary process&lt;/strong&gt;-এর সঙ্গে সম্পর্কিত।&lt;/p&gt;

&lt;p&gt;যে process container-এর প্রধান process হিসেবে চলছে সেটি শেষ হয়ে গেলে container-ও শেষ হয়ে যায়। Reference material-এও এই কারণেই default command/process না থাকলে container start হয়ে immediately exit করার বিষয়টি দেখানো হয়েছে।&lt;/p&gt;

&lt;p&gt;আমাদের Go application-এর ক্ষেত্রে আমরা চাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
     ↓
Container starts
     ↓
Go server starts
     ↓
Server keeps running
     ↓
Container stays alive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু Docker-কে তো আমরা বলিইনি যে server কীভাবে start করবে।&lt;/p&gt;

&lt;p&gt;এখানেই &lt;code&gt;CMD&lt;/code&gt; প্রয়োজন।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. What Does &lt;code&gt;CMD&lt;/code&gt; Actually Do?
&lt;/h1&gt;

&lt;p&gt;সহজ ভাষায়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;CMD&lt;/code&gt; বলে দেয়—কোনো image থেকে container start হলে default হিসেবে কোন command চালানো হবে।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আমাদের ক্ষেত্রে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর অর্থ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Container starts
       ↓
Run:
go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ফলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলেই Go server automatically start হবে।&lt;/p&gt;

&lt;p&gt;আর manually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;লিখতে হবে না।&lt;/p&gt;

&lt;p&gt;এটাই &lt;code&gt;CMD&lt;/code&gt;-এর মূল purpose।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Our Complete Dockerfile
&lt;/h1&gt;

&lt;p&gt;এখন আগের Dockerfile-এ &lt;code&gt;CMD&lt;/code&gt; যোগ করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update

&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আমাদের Dockerfile-এর responsibilities পরিষ্কার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
 ↓
Base Image

RUN
 ↓
Install Dependencies

WORKDIR
 ↓
Set Working Directory

COPY
 ↓
Bring Application Code

CMD
 ↓
Define Default Runtime Command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি Dockerfile-এর একটি very useful mental model।&lt;/p&gt;




&lt;h1&gt;
  
  
  4. The Most Important Concept: &lt;code&gt;RUN&lt;/code&gt; vs &lt;code&gt;CMD&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Dockerfile শেখার সময় সবচেয়ে common confusion:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;code&gt;RUN&lt;/code&gt; আর &lt;code&gt;CMD&lt;/code&gt;—দুটোই তো command চালায়। তাহলে difference কী?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Difference হলো &lt;strong&gt;কখন&lt;/strong&gt; এবং &lt;strong&gt;কেন&lt;/strong&gt; command চালানো হচ্ছে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;RUN&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;RUN&lt;/code&gt; execute হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর সময়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;CMD&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; execute হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর সময়।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 docker build
                      │
                      ▼
               ┌─────────────┐
               │     RUN     │
               └─────────────┘
                      │
                      ▼
                   IMAGE
                      │
                      │ docker run
                      ▼
               ┌─────────────┐
               │     CMD     │
               └─────────────┘
                      │
                      ▼
                 CONTAINER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference material-এও &lt;code&gt;RUN&lt;/code&gt;-কে build phase এবং &lt;code&gt;CMD&lt;/code&gt;-কে run phase-এর instruction হিসেবে আলাদা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  5. What Happens During &lt;code&gt;docker build&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;ধরুন আমরা চালালাম:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build-এর সময় Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM ubuntu:24.04
        ↓
RUN apt update
        ↓
RUN apt install -y golang
        ↓
WORKDIR /app
        ↓
COPY server.go
        ↓
Create Image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু এখানে একটি গুরুত্বপূর্ণ বিষয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;এই command build-এর সময় execute হয় না।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি image-এর configuration/metadata-এর অংশ হিসেবে রাখা হয়।&lt;/p&gt;

&lt;p&gt;Reference build flow-এও &lt;code&gt;CMD&lt;/code&gt; build step হিসেবে execute না হয়ে image-এর সঙ্গে default runtime instruction হিসেবে সংরক্ষিত হওয়ার বিষয়টি দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Then What Happens During &lt;code&gt;docker run&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;Build শেষ।&lt;/p&gt;

&lt;p&gt;আমাদের image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালাম।&lt;/p&gt;

&lt;p&gt;Docker image থেকে একটি container তৈরি করবে।&lt;/p&gt;

&lt;p&gt;তারপর image-এর মধ্যে থাকা default &lt;code&gt;CMD&lt;/code&gt; দেখবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং container-এর ভিতরে সেটি execute করবে।&lt;/p&gt;

&lt;p&gt;ফলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
     ↓
Create Container
     ↓
Start Container
     ↓
Execute CMD
     ↓
go run server.go
     ↓
Go Server :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন container আর সঙ্গে সঙ্গে exit করবে না, কারণ Go server foreground-এ চলমান process হিসেবে container-কে active রাখছে। Reference hands-on test-এও &lt;code&gt;docker run new_go_server:1.0.1&lt;/code&gt;-এর পর &lt;code&gt;CMD&lt;/code&gt; থেকে Go server automatically start হওয়ার বিষয়টি দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Understanding the Exec Form
&lt;/h1&gt;

&lt;p&gt;আমরা লিখেছি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাকে বলা হয় &lt;strong&gt;Exec Form&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;এখানে প্রতিটি argument আলাদা string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"go"
"run"
"server.go"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং comma দিয়ে আলাদা করা হয়েছে।&lt;/p&gt;

&lt;p&gt;Conceptually এটি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;command-টির equivalent।&lt;/p&gt;

&lt;p&gt;Reference material-এ Dockerfile-এর জন্য এই JSON-array/Exec Form syntax-টিকেই ব্যবহার করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. A Critical Mental Model
&lt;/h1&gt;

&lt;p&gt;এখন এই দুইটি statement মনে রাখুন:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;RUN&lt;/code&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build the image.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;CMD&lt;/code&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Run the application when the container starts.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আরও সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RUN
→ Image তৈরির সময়

CMD
→ Container চালুর সময়
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই একটি distinction Dockerfile-এর অনেক confusion দূর করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  9. &lt;code&gt;CMD&lt;/code&gt; Does NOT Run During Build
&lt;/h1&gt;

&lt;p&gt;এটি beginner-দের একটি common misunderstanding।&lt;/p&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;লিখেছি।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; go-server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালাম।&lt;/p&gt;

&lt;p&gt;এখানে Go server start হবে না।&lt;/p&gt;

&lt;p&gt;আপনি build output-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখবেন না।&lt;/p&gt;

&lt;p&gt;কারণ &lt;code&gt;CMD&lt;/code&gt; তখন execute হয়নি।&lt;/p&gt;

&lt;p&gt;Image তৈরি হয়েছে এবং default command হিসেবে &lt;code&gt;CMD&lt;/code&gt; image-এর সঙ্গে সংরক্ষিত হয়েছে।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run go-server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে &lt;code&gt;CMD&lt;/code&gt; execute হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  10. The Magic of Default Commands
&lt;/h1&gt;

&lt;p&gt;এখন সবচেয়ে useful part।&lt;/p&gt;

&lt;p&gt;আমাদের image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর default command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে effectively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run container
+
Use the image's default command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ফলে server automatically start হয়।&lt;/p&gt;

&lt;p&gt;এটাই containerized application-এর expected behaviour:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run image
        ↓
Application starts
        ↓
Application keeps running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User-কে container-এর ভিতরে ঢুকে application manually start করতে হয় না।&lt;/p&gt;




&lt;h1&gt;
  
  
  11. But What If I Want Another Command?
&lt;/h1&gt;

&lt;p&gt;এখানে Docker-এর আরেকটি powerful feature আছে।&lt;/p&gt;

&lt;p&gt;ধরুন image-এর default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু debugging-এর জন্য আমরা container-এর ভিতরে &lt;code&gt;bash&lt;/code&gt; shell চাই।&lt;/p&gt;

&lt;p&gt;তাহলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে কী হলো?&lt;/p&gt;

&lt;p&gt;আমরা &lt;code&gt;bash&lt;/code&gt; command দিয়েছি।&lt;/p&gt;

&lt;p&gt;Docker default &lt;code&gt;CMD&lt;/code&gt; ব্যবহার না করে এই command execute করবে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile CMD
      │
      │ override
      ▼
docker run ... bash
      │
      ▼
bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference material-এ এই exact behaviour দেখানো হয়েছে—&lt;code&gt;docker run &amp;lt;image&amp;gt; &amp;lt;custom_command&amp;gt;&lt;/code&gt; ব্যবহার করলে Dockerfile-এর &lt;code&gt;CMD&lt;/code&gt; override হয়ে custom command execute হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  12. CMD Override: A Practical Example
&lt;/h1&gt;

&lt;p&gt;Default behaviour:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ &lt;code&gt;CMD&lt;/code&gt; override হয়েছে।&lt;/p&gt;

&lt;p&gt;এটি বিশেষ করে debugging-এর সময় useful।&lt;/p&gt;

&lt;p&gt;ধরুন application start হচ্ছে না।&lt;/p&gt;

&lt;p&gt;তখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে container-এর ভিতরে ঢুকে manually inspect করতে পারি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls
&lt;/span&gt;go version
go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ production-এ default command ব্যবহার করা হবে, আর troubleshooting-এর সময় custom command দিয়ে override করা যেতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. CMD Override মানে Image পরিবর্তন নয়
&lt;/h1&gt;

&lt;p&gt;এখানে আরেকটি subtle point আছে।&lt;/p&gt;

&lt;p&gt;যখন আমরা:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিই, তখন আমরা Docker image-এর &lt;code&gt;CMD&lt;/code&gt; permanently পরিবর্তন করছি না।&lt;/p&gt;

&lt;p&gt;শুধু &lt;strong&gt;এই particular container-এর জন্য&lt;/strong&gt; default command-এর পরিবর্তে &lt;code&gt;bash&lt;/code&gt; চালাচ্ছি।&lt;/p&gt;

&lt;p&gt;পরেরবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে আবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;execute হবে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Image
│
├── Default CMD → go run server.go
│
├── Container A → default CMD
│
└── Container B → bash override
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image-এর default configuration unchanged থাকে।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Hands-On: Build the New Image
&lt;/h1&gt;

&lt;p&gt;এখন complete Dockerfile দিয়ে নতুন image build করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build-এর সময়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
RUN
RUN
WORKDIR
COPY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর instructions process হবে।&lt;/p&gt;

&lt;p&gt;কিন্তু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;run হবে না।&lt;/p&gt;

&lt;p&gt;এটি image-এর default runtime command হিসেবে save হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Run Without &lt;code&gt;-it&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;এবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কোনো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নেই।&lt;/p&gt;

&lt;p&gt;কোনো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নেই।&lt;/p&gt;

&lt;p&gt;শুধু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
+
image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং তারপরও Go server start হয়ে যাবে।&lt;/p&gt;

&lt;p&gt;কারণ Docker image-এর মধ্যে আমরা already define করেছি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই আমাদের desired behaviour।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Verify the Running Container
&lt;/h1&gt;

&lt;p&gt;অন্য terminal খুলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে running container দেখা যাবে।&lt;/p&gt;

&lt;p&gt;তারপর container-এর ভিতরে প্রবেশ করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;CONTAINER_ID&amp;gt; bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference hands-on workflow-এ &lt;code&gt;docker exec&lt;/code&gt; দিয়ে running container-এ ঢুকে &lt;code&gt;curl http://localhost:8080&lt;/code&gt; ব্যবহার করে &lt;code&gt;Hello World!&lt;/code&gt; response verify করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  17. &lt;code&gt;docker run&lt;/code&gt; বনাম &lt;code&gt;docker exec&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;এই example-এ আরেকটি important distinction পাওয়া যায়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;docker run&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;নতুন container তৈরি করে এবং তার default command বা supplied command চালায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;docker exec&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Already running container-এর ভিতরে নতুন command চালায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;CONTAINER_ID&amp;gt; bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
→ Start a new container

docker exec
→ Execute inside an existing container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই distinction debugging-এর সময় খুব গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Complete Lifecycle
&lt;/h1&gt;

&lt;p&gt;এখন পুরো lifecycle-টা একসঙ্গে দেখি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Dockerfile
                     │
                     │ docker build
                     ▼
              Docker Image
                     │
              ┌──────┴──────┐
              │             │
              │ docker run  │
              │             │
              ▼             ▼
        Default CMD      Custom Command
              │             │
              ▼             ▼
     go run server.go      bash
              │
              ▼
       Go HTTP Server
              │
              ▼
          :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Dockerfile থেকে image, image থেকে container, এবং container start হওয়ার সময় &lt;code&gt;CMD&lt;/code&gt; execution—পুরো chain-টি পরিষ্কার হয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  19. &lt;code&gt;RUN&lt;/code&gt; vs &lt;code&gt;CMD&lt;/code&gt;: Final Comparison
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;বিষয়&lt;/th&gt;
&lt;th&gt;&lt;code&gt;RUN&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;CMD&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;কখন execute হয়?&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;মূল উদ্দেশ্য&lt;/td&gt;
&lt;td&gt;Image তৈরি/configure করা&lt;/td&gt;
&lt;td&gt;Default runtime command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image layer তৈরি করে?&lt;/td&gt;
&lt;td&gt;হ্যাঁ&lt;/td&gt;
&lt;td&gt;Command নিজে build layer তৈরি করে না&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build-এর সময় application চালায়?&lt;/td&gt;
&lt;td&gt;হতে পারে&lt;/td&gt;
&lt;td&gt;না&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Container start হলে automatically execute?&lt;/td&gt;
&lt;td&gt;না&lt;/td&gt;
&lt;td&gt;হ্যাঁ, যদি override না করা হয়&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Override করা যায়?&lt;/td&gt;
&lt;td&gt;Runtime command হিসেবে নয়&lt;/td&gt;
&lt;td&gt;হ্যাঁ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RUN apt install -y golang&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CMD ["go", "run", "server.go"]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Reference material-এও execution phase, purpose এবং image-এর সঙ্গে persistence-এর ভিত্তিতে &lt;code&gt;RUN&lt;/code&gt; ও &lt;code&gt;CMD&lt;/code&gt;-কে এভাবেই আলাদা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  20. The Three Most Important Commands
&lt;/h1&gt;

&lt;p&gt;এই lesson-এর core workflow মাত্র কয়েকটি command-এ:&lt;/p&gt;

&lt;h3&gt;
  
  
  Build
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Normal Run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;code&gt;CMD&lt;/code&gt; automatically execute হবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Debug / Override
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;code&gt;CMD&lt;/code&gt; override হয়ে &lt;code&gt;bash&lt;/code&gt; execute হবে।&lt;/p&gt;

&lt;p&gt;এই তিনটি command-এর relationship বুঝলেই &lt;code&gt;CMD&lt;/code&gt; অনেক সহজ হয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  21. The Most Important Mental Model
&lt;/h1&gt;

&lt;p&gt;Dockerfile-এর ক্ষেত্রে এই flow-টি মনে রাখুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 BUILD TIME
                     │
                     ▼
        ┌────────────────────────┐
        │ FROM                   │
        │ RUN                    │
        │ WORKDIR                │
        │ COPY                   │
        └────────────────────────┘
                     │
                     ▼
                Docker Image
                     │
                     │ docker run
                     ▼
                 RUNTIME
                     │
                     ▼
                   CMD
                     │
                     ▼
             Application Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;RUN&lt;/code&gt; prepares the image. &lt;code&gt;CMD&lt;/code&gt; starts the application.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এই এক লাইনের mental model-টি Dockerfile-এর অনেক confusion দূর করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Why This Matters Beyond This Example
&lt;/h1&gt;

&lt;p&gt;আমাদের example একটি simple Go server।&lt;/p&gt;

&lt;p&gt;কিন্তু একই principle practically সব ধরনের containerized application-এর ক্ষেত্রে দেখা যায়।&lt;/p&gt;

&lt;p&gt;একটি application image তৈরি করার সময়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dependencies
Configuration
Application Files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;image-এর মধ্যে prepare করা হয়।&lt;/p&gt;

&lt;p&gt;আর container start হওয়ার সময়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;start করা হয়।&lt;/p&gt;

&lt;p&gt;তাই একটি well-designed container-এর ক্ষেত্রে user experience ideally এমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &amp;lt;image&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং application নিজে থেকেই start করবে।&lt;/p&gt;

&lt;p&gt;User-কে container-এর ভিতরে গিয়ে manually setup করতে হবে না।&lt;/p&gt;

&lt;p&gt;এটাই containerization-এর বড় সুবিধাগুলোর একটি।&lt;/p&gt;




&lt;h1&gt;
  
  
  23. One Last Look at Our Go Server
&lt;/h1&gt;

&lt;p&gt;আমাদের &lt;code&gt;server.go&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Server is running on :8080"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run new_go_server:1.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Debug:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই ছোট example-এর মধ্যেই Dockerfile-এর একটি complete lifecycle দেখা যাচ্ছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Takeaway
&lt;/h1&gt;

&lt;p&gt;আজকের lesson-এ মূলত একটি প্রশ্নের উত্তর খুঁজেছি:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How do we make a Docker container automatically start our application?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;উত্তর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["go", "run", "server.go"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু শুধু syntax মনে রাখলে হবে না।&lt;/p&gt;

&lt;p&gt;বোঝা দরকার &lt;strong&gt;কখন&lt;/strong&gt; এটি execute হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;docker build&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
RUN
WORKDIR
COPY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো image তৈরি করে।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; তখন execute হয় না।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;docker run&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Container Created
      ↓
CMD Executed
      ↓
Go Server Started
      ↓
Container Keeps Running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর যদি debugging করতে চাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.1 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে default &lt;code&gt;CMD&lt;/code&gt; override হয়ে &lt;code&gt;bash&lt;/code&gt; চালু হবে।&lt;/p&gt;

&lt;p&gt;শেষ পর্যন্ত Docker-এর এই simple mental model-টি মনে রাখুন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build the environment with &lt;code&gt;RUN&lt;/code&gt;.&lt;br&gt;
Define the default application process with &lt;code&gt;CMD&lt;/code&gt;.&lt;br&gt;
Start it with &lt;code&gt;docker run&lt;/code&gt;.&lt;br&gt;
Override it when you need to debug.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;একটি ছোট &lt;code&gt;CMD&lt;/code&gt; instruction আসলে Docker image-কে একটি static filesystem থেকে একটি &lt;strong&gt;runnable application environment&lt;/strong&gt;-এ পরিণত করার গুরুত্বপূর্ণ অংশ।&lt;/p&gt;

&lt;p&gt;আর Docker শেখার পরবর্তী ধাপে এই concept থেকেই naturally আসে &lt;code&gt;ENTRYPOINT&lt;/code&gt;, &lt;code&gt;CMD&lt;/code&gt; বনাম &lt;code&gt;ENTRYPOINT&lt;/code&gt;, environment variables, ports, volumes এবং production-grade container design।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand the lifecycle, not just the command.&lt;/strong&gt; 🐳&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>From Manual Containers to Dockerfile: Containerizing a Go Server the Right Way</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 30 Aug 2026 08:13:54 +0000</pubDate>
      <link>https://dev.to/ragibcs/from-manual-containers-to-dockerfile-containerizing-a-go-server-the-right-way-1phc</link>
      <guid>https://dev.to/ragibcs/from-manual-containers-to-dockerfile-containerizing-a-go-server-the-right-way-1phc</guid>
      <description>&lt;p&gt;Docker শেখার শুরুতে &lt;code&gt;docker run&lt;/code&gt; করা খুব সহজ।&lt;/p&gt;

&lt;p&gt;একটি Ubuntu image নিন, container চালান, ভিতরে ঢুকুন—তারপর application চালিয়ে দিন।&lt;/p&gt;

&lt;p&gt;কিন্তু software engineering-এর আসল প্রশ্নটা একটু ভিন্ন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can someone else reproduce exactly what you just built?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;যদি উত্তর হয় “না, আমাকে একে একে সব command বলে দিতে হবে”—তাহলে আমাদের workflow-এ এখনও একটি সমস্যা আছে।&lt;/p&gt;

&lt;p&gt;এই article-এ আমরা একটি ছোট &lt;strong&gt;Go HTTP server&lt;/strong&gt;-কে Docker container-এর ভিতরে চালানোর মাধ্যমে সেই সমস্যাটি বুঝব।&lt;/p&gt;

&lt;p&gt;প্রথমে সবকিছু manually করব।&lt;/p&gt;

&lt;p&gt;তারপর &lt;code&gt;docker commit&lt;/code&gt; দিয়ে সেই environment-এর একটি image বানাব।&lt;/p&gt;

&lt;p&gt;এরপর দেখব কেন এই approach দীর্ঘমেয়াদে inconvenient।&lt;/p&gt;

&lt;p&gt;সবশেষে একই process-কে একটি &lt;strong&gt;Dockerfile&lt;/strong&gt;-এ লিখে পুরো setup-টিকে reproducible এবং automated করে তুলব।&lt;/p&gt;

&lt;p&gt;এটাই মূল transition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Manual Configuration
        ↓
docker commit
        ↓
Problem
        ↓
Dockerfile
        ↓
Reproducible Image
        ↓
Containerized Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  1. The Application We Want to Containerize
&lt;/h1&gt;

&lt;p&gt;আমাদের application একটি খুব simple Go HTTP server।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server.go&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Server is running on :8080"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Application-এর কাজ খুব straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP server start করবে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;8080&lt;/code&gt; port-এ listen করবে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; endpoint-এ request এলে &lt;code&gt;Hello World!&lt;/code&gt; response দেবে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;অর্থাৎ আমাদের লক্ষ্য:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser / Client
       │
       │ HTTP Request
       ▼
Go Server
       │
       ▼
:8080
       │
       ▼
"Hello World!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন প্রশ্ন হলো—এই application-টিকে Docker container-এর মধ্যে কীভাবে চালাব?&lt;/p&gt;




&lt;h1&gt;
  
  
  2. First Attempt: Do Everything Manually
&lt;/h1&gt;

&lt;p&gt;শুরু করি Ubuntu দিয়ে।&lt;/p&gt;

&lt;p&gt;প্রথমে image pull:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর interactive container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu:24.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আমরা Ubuntu container-এর ভিতরে।&lt;/p&gt;

&lt;p&gt;Reference workflow-এও প্রথমে Ubuntu image pull করে interactive container চালানো হয়েছে।&lt;/p&gt;

&lt;p&gt;এখন আমাদের container একটি basic Ubuntu environment।&lt;/p&gt;

&lt;p&gt;কিন্তু এখানে Go নেই।&lt;/p&gt;

&lt;p&gt;তাই পরবর্তী কাজ—Go install করা।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Install Go Inside the Container
&lt;/h1&gt;

&lt;p&gt;প্রথমে package index update:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Installation verify করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যদি version output পাওয়া যায়, তাহলে Go environment ready।&lt;/p&gt;

&lt;p&gt;Reference workflow-এও একইভাবে &lt;code&gt;apt update&lt;/code&gt;, &lt;code&gt;apt install -y golang&lt;/code&gt;, এবং &lt;code&gt;go version&lt;/code&gt; ব্যবহার করা হয়েছে।&lt;/p&gt;

&lt;p&gt;এখন আমাদের container-এর ভিতরে Go আছে।&lt;/p&gt;

&lt;p&gt;কিন্তু application কোথায়?&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Create an Application Directory
&lt;/h1&gt;

&lt;p&gt;Application-এর জন্য একটি dedicated directory তৈরি করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app
&lt;span class="nb"&gt;cd&lt;/span&gt; /app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আমাদের container structure conceptually এমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
├── bin/
├── etc/
├── usr/
├── var/
└── app/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আমরা application-এর জন্য &lt;code&gt;/app&lt;/code&gt; ব্যবহার করছি।&lt;/p&gt;

&lt;p&gt;Reference workflow-এও application code রাখার জন্য &lt;code&gt;/app&lt;/code&gt; directory তৈরি করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Move &lt;code&gt;server.go&lt;/code&gt; into the Container
&lt;/h1&gt;

&lt;p&gt;এখন একটি গুরুত্বপূর্ণ বিষয় আছে।&lt;/p&gt;

&lt;p&gt;আমাদের &lt;code&gt;server.go&lt;/code&gt; host machine-এ আছে।&lt;/p&gt;

&lt;p&gt;কিন্তু Go runtime চলছে container-এর ভিতরে।&lt;/p&gt;

&lt;p&gt;তাই host থেকে container-এ file নিতে হবে।&lt;/p&gt;

&lt;p&gt;Docker-এর জন্য এই কাজের একটি command হলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;cp &lt;/span&gt;server.go &amp;lt;CONTAINER_ID&amp;gt;:/app/server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HOST MACHINE
│
│  server.go
│
│ docker cp
▼
DOCKER CONTAINER
│
└── /app/server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;docker cp&lt;/code&gt; host এবং container-এর মধ্যে file copy করার জন্য ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;এখন container-এর ভিতরে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /app
&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আমরা দেখতে পাব:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  6. Run the Go Server
&lt;/h1&gt;

&lt;p&gt;এখন application চালানো যাক:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আমাদের Go server এখন container-এর ভিতরে চলছে।&lt;/p&gt;

&lt;p&gt;Application test করার জন্য container-এর ভিতর থেকেই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;করলে response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference workflow-এও &lt;code&gt;go run server.go&lt;/code&gt; দিয়ে server চালিয়ে &lt;code&gt;curl http://localhost:8080&lt;/code&gt; দিয়ে &lt;code&gt;Hello World!&lt;/code&gt; response verify করা হয়েছে।&lt;/p&gt;

&lt;p&gt;আমরা সফল।&lt;/p&gt;

&lt;p&gt;কিন্তু আমাদের journey এখানেই শেষ নয়।&lt;/p&gt;

&lt;p&gt;বরং এখান থেকেই আসল problem শুরু।&lt;/p&gt;




&lt;h1&gt;
  
  
  7. We Built It. But Can We Rebuild It?
&lt;/h1&gt;

&lt;p&gt;একবার চিন্তা করুন, আমরা কী কী করেছি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Pull Ubuntu
2. Run container
3. Update packages
4. Install Go
5. Create /app
6. Copy server.go
7. Run the server
8. Test the application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন যদি container delete হয়ে যায়?&lt;/p&gt;

&lt;p&gt;আমাদের আবার সব করতে হবে।&lt;/p&gt;

&lt;p&gt;যদি &lt;code&gt;server.go&lt;/code&gt; পরিবর্তন হয়?&lt;/p&gt;

&lt;p&gt;আবার setup করতে হবে।&lt;/p&gt;

&lt;p&gt;যদি আরেকজন developer একই environment চায়?&lt;/p&gt;

&lt;p&gt;তাকে আমাদের সব command দিতে হবে।&lt;/p&gt;

&lt;p&gt;এখানে একটা fundamental engineering problem আছে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The environment exists, but the process used to create the environment is not properly encoded.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এই problem থেকেই Dockerfile-এর প্রয়োজনীয়তা বোঝা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. &lt;code&gt;docker commit&lt;/code&gt;: Take a Snapshot
&lt;/h1&gt;

&lt;p&gt;আমরা চাই আমাদের configured container-এর বর্তমান state preserve করতে।&lt;/p&gt;

&lt;p&gt;এখানে ব্যবহার করা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker commit &amp;lt;CONTAINER_ID&amp;gt; go_server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি container-এর current filesystem state থেকে একটি নতুন image তৈরি করে।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; go_server bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে নতুন container-এর মধ্যে আগের setup পাওয়া যাবে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Configured Container
        │
        │ docker commit
        ▼
    go_server
      Image
        │
        │ docker run
        ▼
New Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;docker commit&lt;/code&gt; দিয়ে configured container থেকে image তৈরি করার এই workflow-টিই reference material-এ দেখানো হয়েছে।&lt;/p&gt;

&lt;p&gt;এটি useful।&lt;/p&gt;

&lt;p&gt;কিন্তু production engineering-এর জন্য এখানেও একটি বড় প্রশ্ন রয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  9. The Problem with &lt;code&gt;docker commit&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;ধরুন &lt;code&gt;server.go&lt;/code&gt;-তে আজ একটি পরিবর্তন এসেছে।&lt;/p&gt;

&lt;p&gt;আমাদের manual workflow আবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubuntu
  ↓
Install Go
  ↓
Create /app
  ↓
Copy new server.go
  ↓
Run application
  ↓
docker commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আবার একই কাজ।&lt;/p&gt;

&lt;p&gt;এটি repetitive।&lt;/p&gt;

&lt;p&gt;আরও গুরুত্বপূর্ণ হলো, image দেখে সহজে বোঝা যায় না &lt;strong&gt;কীভাবে environment-টি তৈরি হয়েছিল&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;কোন base image?&lt;/p&gt;

&lt;p&gt;কোন package?&lt;/p&gt;

&lt;p&gt;কোন directory?&lt;/p&gt;

&lt;p&gt;কোন source file?&lt;/p&gt;

&lt;p&gt;কোন setup command?&lt;/p&gt;

&lt;p&gt;Manual process-এর এই traceability এবং repeatability limitation-ই Dockerfile-এর দিকে যাওয়ার মূল কারণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Enter the Dockerfile
&lt;/h1&gt;

&lt;p&gt;এবার আমরা একটি গুরুত্বপূর্ণ engineering principle ব্যবহার করব:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you have to repeat a process, turn the process into code.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আমরা এতক্ষণ যে কাজগুলো terminal-এ manually করেছি, সেগুলো এখন একটি &lt;code&gt;Dockerfile&lt;/code&gt;-এ লিখব।&lt;/p&gt;

&lt;p&gt;আমাদের project structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-learning/
│
├── Dockerfile
└── server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update

&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই আমাদের manual workflow-এর declarative version।&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Understanding the Dockerfile
&lt;/h1&gt;

&lt;p&gt;Dockerfile-এর প্রতিটি instruction-এর একটি নির্দিষ্ট responsibility আছে।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;FROM&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি আমাদের base image নির্ধারণ করে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Start with Ubuntu 24.04.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Docker image তৈরির foundation এখান থেকেই শুরু হচ্ছে।&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;RUN&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image build-এর সময় package index update হবে।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build-এর সময় Go install হবে।&lt;/p&gt;

&lt;p&gt;Manual workflow-এ আমরা এগুলো নিজের হাতে করেছিলাম।&lt;/p&gt;

&lt;p&gt;Dockerfile-এ আমরা instructions লিখে দিলাম।&lt;/p&gt;

&lt;p&gt;Reference material-এ &lt;code&gt;RUN&lt;/code&gt; instructions-এর মাধ্যমে package update এবং Golang installation automate করার একই workflow দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  12. &lt;code&gt;WORKDIR&lt;/code&gt;: A Better Way to Handle &lt;code&gt;/app&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Manual approach-এ আমাদের লিখতে হয়েছিল:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app
&lt;span class="nb"&gt;cd&lt;/span&gt; /app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dockerfile-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই একটি instruction &lt;code&gt;/app&lt;/code&gt;-কে working directory হিসেবে set করে।&lt;/p&gt;

&lt;p&gt;এর ফলে পরবর্তী instructions-এর relative context &lt;code&gt;/app&lt;/code&gt; হয়ে যায়।&lt;/p&gt;

&lt;p&gt;Reference material-এও উল্লেখ করা হয়েছে যে &lt;code&gt;WORKDIR /app&lt;/code&gt; ব্যবহার করলে আলাদা করে &lt;code&gt;mkdir /app&lt;/code&gt; এবং &lt;code&gt;cd /app&lt;/code&gt; করার প্রয়োজন হয় না।&lt;/p&gt;

&lt;p&gt;এটি Dockerfile-কে অনেক cleaner করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. &lt;code&gt;COPY&lt;/code&gt;: Bring the Application into the Image
&lt;/h1&gt;

&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর মাধ্যমে build context-এর &lt;code&gt;server.go&lt;/code&gt; image-এর working directory-তে copy হবে।&lt;/p&gt;

&lt;p&gt;আমাদের &lt;code&gt;WORKDIR&lt;/code&gt; যেহেতু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই application file পাওয়া যাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/app/server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host
│
└── server.go
       │
       │ COPY
       ▼
Container Image
│
└── /app/server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference workflow-এও &lt;code&gt;COPY&lt;/code&gt; দিয়ে host-এর &lt;code&gt;server.go&lt;/code&gt; application directory-তে অন্তর্ভুক্ত করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Manual Process vs Dockerfile
&lt;/h1&gt;

&lt;p&gt;এখন সবচেয়ে গুরুত্বপূর্ণ comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Manual Process&lt;/th&gt;
&lt;th&gt;Dockerfile&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pull Ubuntu&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FROM ubuntu:24.04&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apt update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RUN apt update&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Install Go&lt;/td&gt;
&lt;td&gt;&lt;code&gt;RUN apt install -y golang&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mkdir /app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WORKDIR /app&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker cp server.go&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;COPY ./server.go ./server.go&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker commit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;খেয়াল করুন কী হয়েছে।&lt;/p&gt;

&lt;p&gt;আমরা শুধু কয়েকটি command replace করিনি।&lt;/p&gt;

&lt;p&gt;আমরা &lt;strong&gt;পুরো environment creation process-টাকে code-এ পরিণত করেছি।&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Build the Image
&lt;/h1&gt;

&lt;p&gt;এখন Dockerfile থেকে একটি image তৈরি করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.0 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ Dockerfile instructions অনুসরণ করে image তৈরি করবে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-t new_go_server:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ image-এর name এবং version tag।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ current directory-কে build context হিসেবে ব্যবহার করবে।&lt;/p&gt;

&lt;p&gt;Reference workflow-এও &lt;code&gt;docker build -t new_go_server:1.0.0 .&lt;/code&gt; ব্যবহার করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. What Happens During &lt;code&gt;docker build&lt;/code&gt;?
&lt;/h1&gt;

&lt;p&gt;আমাদের Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update

&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker build করার সময় conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM ubuntu:24.04
        ↓
Base Image
        ↓
RUN apt update
        ↓
Install Go
        ↓
WORKDIR /app
        ↓
COPY server.go
        ↓
Final Image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker প্রতিটি instruction অনুসরণ করে একটি নতুন image তৈরি করে।&lt;/p&gt;

&lt;p&gt;এখানে সবচেয়ে গুরুত্বপূর্ণ পরিবর্তন হলো:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;আগে আমরা environment তৈরি করছিলাম manually।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এখন Docker environment তৈরি করছে Dockerfile-এর instructions অনুসরণ করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Run the Custom Image
&lt;/h1&gt;

&lt;p&gt;Image তৈরি হয়ে গেছে।&lt;/p&gt;

&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.0 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Container-এর ভিতরে ঢুকলে আমরা &lt;code&gt;/app&lt;/code&gt; directory-তে থাকব।&lt;/p&gt;

&lt;p&gt;কারণ Dockerfile-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেওয়া আছে।&lt;/p&gt;

&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখা যাবে।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server is running on :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ আমাদের image-এর ভিতরে ইতিমধ্যেই:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu আছে&lt;/li&gt;
&lt;li&gt;Go আছে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/app&lt;/code&gt; আছে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;server.go&lt;/code&gt; আছে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;আমাদের শুধু application run করতে হচ্ছে।&lt;/p&gt;

&lt;p&gt;Reference workflow-এও custom image run করার পর &lt;code&gt;/app&lt;/code&gt;-এ &lt;code&gt;server.go&lt;/code&gt; পাওয়া এবং &lt;code&gt;go run server.go&lt;/code&gt; দিয়ে application চালানোর বিষয়টি দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  18. The Workflow Has Completely Changed
&lt;/h1&gt;

&lt;p&gt;আগের workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Manual Setup
     ↓
Manual Configuration
     ↓
Manual Copy
     ↓
Manual Testing
     ↓
docker commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile
     ↓
docker build
     ↓
Image
     ↓
docker run
     ↓
Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই Docker-এর real engineering advantage।&lt;/p&gt;




&lt;h1&gt;
  
  
  19. What If the Code Changes?
&lt;/h1&gt;

&lt;p&gt;ধরুন &lt;code&gt;server.go&lt;/code&gt;-তে আমরা পরিবর্তন করলাম।&lt;/p&gt;

&lt;p&gt;Manual approach-এ আবার পুরো environment setup করতে হতে পারে।&lt;/p&gt;

&lt;p&gt;Dockerfile approach-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নতুন image তৈরি করা যায়।&lt;/p&gt;

&lt;p&gt;Version tag-ও পরিবর্তন করা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new_go_server:1.0.0
new_go_server:1.0.1
new_go_server:1.0.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে application image-এর version track করা সহজ হয়।&lt;/p&gt;

&lt;p&gt;Reference comparison-এ Dockerfile workflow-এর এই repeatable build এবং version-control-friendly nature-কে manual &lt;code&gt;docker commit&lt;/code&gt; workflow-এর তুলনায় বড় সুবিধা হিসেবে দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  20. Why This Matters in Real Engineering
&lt;/h1&gt;

&lt;p&gt;এখন বিষয়টা শুধু Docker শেখার মধ্যে সীমাবদ্ধ নয়।&lt;/p&gt;

&lt;p&gt;ধরুন একটি team-এ পাঁচজন developer আছে।&lt;/p&gt;

&lt;p&gt;Manual workflow হলে প্রত্যেক developer-এর environment setup আলাদা হতে পারে।&lt;/p&gt;

&lt;p&gt;একজনের:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go version A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অন্যজনের:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go version B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কেউ অন্য package install করেছে।&lt;/p&gt;

&lt;p&gt;কেউ কিছু configuration পরিবর্তন করেছে।&lt;/p&gt;

&lt;p&gt;ফলে classic problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“It works on my machine.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dockerfile এই সমস্যাকে পুরোপুরি magic-এর মাধ্যমে solve করে না, কিন্তু environment creation-কে &lt;strong&gt;explicit, repeatable এবং version-controlled&lt;/strong&gt; করার একটি শক্তিশালী mechanism দেয়।&lt;/p&gt;

&lt;p&gt;একজন developer Dockerfile পাবে।&lt;/p&gt;

&lt;p&gt;একটি image build করবে।&lt;/p&gt;

&lt;p&gt;তারপর একই defined environment-এর ভিত্তিতে application চালাবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  21. Dockerfile Is Infrastructure as Code Thinking
&lt;/h1&gt;

&lt;p&gt;Dockerfile-এর সবচেয়ে গুরুত্বপূর্ণ lesson শুধু Docker syntax নয়।&lt;/p&gt;

&lt;p&gt;এটি একটি broader engineering mindset শেখায়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Infrastructure and environment configuration should be reproducible.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আমরা আগে environment তৈরি করছিলাম command-by-command।&lt;/p&gt;

&lt;p&gt;এখন environment definition একটি file-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই file Git repository-তে রাখা যায়।&lt;/p&gt;

&lt;p&gt;Code review করা যায়।&lt;/p&gt;

&lt;p&gt;Change track করা যায়।&lt;/p&gt;

&lt;p&gt;একজন নতুন developer repository clone করে একই environment build করতে পারে।&lt;/p&gt;

&lt;p&gt;এখান থেকেই Docker CI/CD এবং DevOps workflow-এর সঙ্গে naturally connect করতে শুরু করে।&lt;/p&gt;

&lt;p&gt;Reference material-এও Dockerfile-কে version control এবং production/CI-CD workflow-এর জন্য বেশি উপযোগী হিসেবে আলাদা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  22. One Important Distinction: Image vs Container
&lt;/h1&gt;

&lt;p&gt;এই পুরো article-এর মধ্যে একটি mental model সবচেয়ে গুরুত্বপূর্ণ।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile
    │
    │ docker build
    ▼
 Docker Image
    │
    │ docker run
    ▼
 Docker Container
    │
    ▼
Go Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dockerfile
&lt;/h3&gt;

&lt;p&gt;Environment কীভাবে তৈরি হবে তার definition।&lt;/p&gt;

&lt;h3&gt;
  
  
  Image
&lt;/h3&gt;

&lt;p&gt;সেই definition থেকে তৈরি packaged environment।&lt;/p&gt;

&lt;h3&gt;
  
  
  Container
&lt;/h3&gt;

&lt;p&gt;সেই image-এর running instance।&lt;/p&gt;

&lt;p&gt;এই distinction পরিষ্কার থাকলে Docker-এর অনেক concept অনেক সহজ হয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  23. The Complete Example
&lt;/h1&gt;

&lt;p&gt;আমাদের project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-learning/
│
├── Dockerfile
└── server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;server.go&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Server is running on :8080"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;Dockerfile&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update

&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Build
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.0 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; new_go_server:1.0.0 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start the application
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Test
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  24. A Small but Important Production Note
&lt;/h1&gt;

&lt;p&gt;উপরের Dockerfile একটি &lt;strong&gt;learning-oriented example&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;এখানে আমরা ইচ্ছাকৃতভাবে Ubuntu-এর ভিতরে Go install করছি, যাতে &lt;code&gt;FROM&lt;/code&gt;, &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;WORKDIR&lt;/code&gt;, এবং &lt;code&gt;COPY&lt;/code&gt;—এই fundamental Dockerfile instructions পরিষ্কারভাবে বোঝা যায়।&lt;/p&gt;

&lt;p&gt;Production environment-এ একই Go application-এর জন্য আরও optimized approach ব্যবহার করা যায়—যেমন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multi-stage builds&lt;/li&gt;
&lt;li&gt;smaller runtime images&lt;/li&gt;
&lt;li&gt;compiled Go binary&lt;/li&gt;
&lt;li&gt;explicit &lt;code&gt;CMD&lt;/code&gt; বা &lt;code&gt;ENTRYPOINT&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;dependency caching&lt;/li&gt;
&lt;li&gt;non-root execution&lt;/li&gt;
&lt;li&gt;health checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;অর্থাৎ এই Dockerfile-কে production-ready final architecture হিসেবে নয়, বরং &lt;strong&gt;Dockerfile fundamentals বোঝার foundation&lt;/strong&gt; হিসেবে দেখা উচিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  25. The Bigger Picture
&lt;/h1&gt;

&lt;p&gt;এই ছোট Go server example-এর মধ্যেই Docker-এর একটি বড় philosophy লুকিয়ে আছে।&lt;/p&gt;

&lt;p&gt;আমরা শুরু করেছিলাম:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“আমি নিজে container configure করব।”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“আমার configuration-এর একটা snapshot নিয়ে রাখি।”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;docker commit&lt;/code&gt; আমাদের সেই capability দেয়।&lt;/p&gt;

&lt;p&gt;কিন্তু তারপর প্রশ্ন আসে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“আমি কি এই configuration-টাকে লিখে রাখতে পারি?”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উত্তর:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yes. Dockerfile.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile
    ↓
docker build
    ↓
Image
    ↓
docker run
    ↓
Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন environment creation আর developer-এর memory-এর ওপর নির্ভর করছে না।&lt;/p&gt;

&lt;p&gt;এটি একটি file-এর মধ্যে definition হিসেবে আছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Takeaway
&lt;/h1&gt;

&lt;p&gt;Docker শেখার সময় শুধু command মুখস্থ করা যথেষ্ট নয়।&lt;/p&gt;

&lt;p&gt;সবচেয়ে গুরুত্বপূর্ণ হলো এই transformation বোঝা:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Manual Work
    ↓
Automation
    ↓
Reproducibility
    ↓
Consistency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আমরা প্রথমে একটি Ubuntu container manually configure করেছি।&lt;/p&gt;

&lt;p&gt;Go install করেছি।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server.go&lt;/code&gt; copy করেছি।&lt;/p&gt;

&lt;p&gt;Application চালিয়েছি।&lt;/p&gt;

&lt;p&gt;তারপর &lt;code&gt;docker commit&lt;/code&gt; দিয়ে সেই configured environment-এর snapshot নিয়েছি।&lt;/p&gt;

&lt;p&gt;কিন্তু বুঝেছি—এভাবে প্রতিবার environment তৈরি করা scalable নয়।&lt;/p&gt;

&lt;p&gt;তাই একই process-কে Dockerfile-এ লিখেছি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; golang

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./server.go ./server.go&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; new_go_server:1.0.0 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং একটি reproducible image তৈরি করেছি।&lt;/p&gt;

&lt;p&gt;শেষ পর্যন্ত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source Code
     ↓
Dockerfile
     ↓
Docker Image
     ↓
Docker Container
     ↓
Go Server
     ↓
HTTP Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই Docker-এর সবচেয়ে গুরুত্বপূর্ণ engineering lesson:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just build an environment. Define how to build it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;কারণ manual setup একজন developer-এর knowledge হতে পারে।&lt;/p&gt;

&lt;p&gt;কিন্তু Dockerfile সেই knowledge-কে &lt;strong&gt;code&lt;/strong&gt;-এ পরিণত করে।&lt;/p&gt;

&lt;p&gt;And once your environment becomes code, it becomes much easier to &lt;strong&gt;reproduce, version, review, automate, and ship.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🐳 &lt;strong&gt;That is where Docker starts becoming an engineering tool—not just a container runtime.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Docker Hands-On: Image থেকে Container, তারপর নিজের Custom Image</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 30 Aug 2026 05:46:43 +0000</pubDate>
      <link>https://dev.to/ragibcs/docker-hands-on-image-theke-container-taarpr-nijer-custom-image-2ljm</link>
      <guid>https://dev.to/ragibcs/docker-hands-on-image-theke-container-taarpr-nijer-custom-image-2ljm</guid>
      <description>&lt;p&gt;Docker শেখার সময় সবচেয়ে বড় সমস্যা Docker-এর command মনে রাখা নয়—বরং &lt;strong&gt;Docker আসলে কী করছে সেটা বোঝা&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run&lt;/code&gt;, &lt;code&gt;docker pull&lt;/code&gt;, &lt;code&gt;docker ps&lt;/code&gt;, &lt;code&gt;docker exec&lt;/code&gt;, &lt;code&gt;docker build&lt;/code&gt;—এই commandগুলো আলাদা আলাদা করে মুখস্থ করলে Docker কিছুদিন পরেই confusing মনে হতে পারে।&lt;/p&gt;

&lt;p&gt;কিন্তু যদি আমরা একটি simple mental model তৈরি করি—&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Image → Container → Process&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;তাহলে Docker-এর অনেক কিছুই surprisingly সহজ হয়ে যায়।&lt;/p&gt;

&lt;p&gt;এই লেখায় আমরা একদম hands-on approach-এ দেখব কীভাবে Docker Hub থেকে একটি Ubuntu image local machine-এ আনা যায়, সেটি থেকে একাধিক container তৈরি করা যায়, container-এর সঙ্গে interactiveভাবে কাজ করা যায় এবং শেষে একটি &lt;code&gt;Dockerfile&lt;/code&gt; ব্যবহার করে নিজের custom Docker image তৈরি করা যায়।&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker শুরু করার আগে: Image আর Container-এর পার্থক্য
&lt;/h2&gt;

&lt;p&gt;প্রথমে সবচেয়ে গুরুত্বপূর্ণ distinction:&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker Image কী?
&lt;/h3&gt;

&lt;p&gt;একটি Docker Image হলো একটি &lt;strong&gt;read-only template/package&lt;/strong&gt;, যার মধ্যে application চালানোর জন্য প্রয়োজনীয় filesystem, libraries, configuration এবং অন্যান্য প্রয়োজনীয় উপাদান থাকে।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি Ubuntu 24.04-এর একটি Docker image।&lt;/p&gt;

&lt;p&gt;Docker Hub-এর মতো registry থেকে image local machine-এ pull করা যায়। তারপর সেই image ব্যবহার করে container তৈরি করা যায়।&lt;/p&gt;

&lt;h3&gt;
  
  
  Container কী?
&lt;/h3&gt;

&lt;p&gt;Container হলো সেই image-এর &lt;strong&gt;running বা instantiated form&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;অর্থাৎ—&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Docker Image
      ↓
Container
      ↓
Process / Command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি image থেকে একাধিক independent container তৈরি করা সম্ভব। একই &lt;code&gt;ubuntu:24.04&lt;/code&gt; image ব্যবহার করে একাধিক container চালানো যায়, এবং প্রতিটি container-এর নিজস্ব runtime state থাকে।&lt;/p&gt;

&lt;p&gt;এটাই Docker-এর একটি fundamental concept।&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Local Machine-এ কোন Image আছে?
&lt;/h1&gt;

&lt;p&gt;প্রথমে দেখি আমাদের Docker environment-এ কোন কোন image already available।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই command local image cache-এর imageগুলো দেখায়।&lt;/p&gt;

&lt;p&gt;সাধারণত এখানে আমরা দেখতে পারি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
ubuntu        24.04     ........       ...           101MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে গুরুত্বপূর্ণ কয়েকটি field:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;REPOSITORY&lt;/strong&gt; → image-এর নাম&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TAG&lt;/strong&gt; → version/variant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMAGE ID&lt;/strong&gt; → image-এর unique identifier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CREATED&lt;/strong&gt; → image কখন তৈরি হয়েছে&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SIZE&lt;/strong&gt; → image-এর size&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ubuntu     → Repository
24.04      → Tag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;docker images&lt;/code&gt; local cache-এ থাকা imageগুলো দেখতে ব্যবহৃত হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Docker Hub থেকে Image Pull করা
&lt;/h1&gt;

&lt;p&gt;যদি local machine-এ &lt;code&gt;ubuntu:24.04&lt;/code&gt; না থাকে, তাহলে Docker Hub থেকে image pull করা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Docker remote registry থেকে image-এর প্রয়োজনীয় layers download করে local machine-এ store করে।&lt;/p&gt;

&lt;p&gt;তারপর আবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে image-টি local cache-এ দেখতে পাব।&lt;/p&gt;

&lt;p&gt;এখানে একটি গুরুত্বপূর্ণ বিষয় আছে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;docker pull&lt;/code&gt; মূলত image-কে local environment-এ এনে রাখে; এটি নিজে থেকে interactive container তৈরি করে না।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Docker image layer-based হওয়ায় কোনো কোনো layer আগে থেকেই local machine-এ থাকলে Docker সেগুলো আবার download না করে reuse করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Image Remove করা
&lt;/h1&gt;

&lt;p&gt;ধরুন local machine থেকে &lt;code&gt;ubuntu:24.04&lt;/code&gt; remove করতে চাই।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু যদি কোনো existing container এই image-এর সঙ্গে associated থাকে, Docker image remove করতে বাধা দিতে পারে।&lt;/p&gt;

&lt;p&gt;সেক্ষেত্রে force removal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker rmi &lt;span class="nt"&gt;-f&lt;/span&gt; ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তবে production environment-এ &lt;code&gt;-f&lt;/code&gt; blindly ব্যবহার না করাই ভালো। আগে বুঝতে হবে কোন container বা resource-এর সঙ্গে image-এর dependency রয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Image থেকে Container তৈরি করা
&lt;/h1&gt;

&lt;p&gt;এখন আসি Docker-এর সবচেয়ে গুরুত্বপূর্ণ command-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Docker &lt;code&gt;ubuntu:24.04&lt;/code&gt; image ব্যবহার করে একটি নতুন container তৈরি করে এবং সেটিতে specified/default process চালানোর চেষ্টা করে।&lt;/p&gt;

&lt;p&gt;কিন্তু interactive shell নিয়ে কাজ করতে চাইলে আমরা সাধারণত ব্যবহার করব:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu:24.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই command-টিকে ভেঙে দেখি।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
    ↓
-it
    ↓
ubuntu:24.04
    ↓
bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;docker run&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Container create এবং start করার মূল command।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;ubuntu:24.04&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;যে image থেকে container তৈরি হবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;bash&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Container-এর ভিতরে যে command/process চালানো হবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;-it&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Interactive terminal session-এর জন্য প্রয়োজনীয় দুইটি option-এর combination।&lt;/p&gt;




&lt;h1&gt;
  
  
  5. &lt;code&gt;-it&lt;/code&gt; আসলে কী?
&lt;/h1&gt;

&lt;p&gt;Docker শেখার সময় &lt;code&gt;-it&lt;/code&gt; সবচেয়ে বেশি দেখা যায়।&lt;/p&gt;

&lt;p&gt;এটি দুটি flag-এর combination:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;-i&lt;/code&gt; → Interactive / STDIN
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;-i&lt;/code&gt; container-এর standard input stream open রাখে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ container যেন input গ্রহণ করতে পারে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-i&lt;/span&gt; ubuntu:24.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে input দেওয়া সম্ভব হলেও terminal experience সম্পূর্ণ normal terminal-এর মতো নাও হতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;-t&lt;/code&gt; → Pseudo-TTY
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;-t&lt;/code&gt; একটি pseudo-terminal allocate করে।&lt;/p&gt;

&lt;p&gt;এর ফলে shell-এর terminal-style interface পাওয়া যায়।&lt;/p&gt;

&lt;p&gt;কিন্তু শুধু &lt;code&gt;-t&lt;/code&gt; দিলে interactive keyboard input-এর জন্য &lt;code&gt;STDIN&lt;/code&gt; open নাও থাকতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  তাই আমরা সাধারণত ব্যবহার করি:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu:24.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-i → Input open
-t → Terminal interface
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দুটো একসঙ্গে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-it → Interactive terminal session
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই breakdown-টি Docker-এর interactive usage বোঝার জন্য অত্যন্ত গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Container-এর ভিতরে কী হচ্ছে?
&lt;/h1&gt;

&lt;p&gt;Container-এর ভিতরে ঢোকার পর আমরা সাধারণ Linux command ব্যবহার করতে পারি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd
ls
cd&lt;/span&gt; /bin
&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে গুরুত্বপূর্ণ বিষয় হলো:&lt;/p&gt;

&lt;p&gt;আমরা Docker-এর কোনো magical command ব্যবহার করছি না।&lt;/p&gt;

&lt;p&gt;আমরা আসলে container-এর filesystem-এর ভিতরে একটি process—এই ক্ষেত্রে &lt;code&gt;bash&lt;/code&gt;—এর মাধ্যমে Linux environment-এর সঙ্গে interact করছি।&lt;/p&gt;

&lt;p&gt;এই কারণেই Linux fundamentals জানা থাকলে Docker অনেক সহজ হয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Running Container দেখতে &lt;code&gt;docker ps&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;একটি container চালু থাকা অবস্থায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে running containers দেখা যাবে।&lt;/p&gt;

&lt;p&gt;Output-এ সাধারণত দেখা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONTAINER ID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ Docker শুধু container ID দেখাচ্ছে না; container কোন image ব্যবহার করছে, কোন command চালাচ্ছে, কখন তৈরি হয়েছে, status কী এবং তার নাম কী—এসব information-ও দেখায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Running + Stopped সব Container দেখতে
&lt;/h1&gt;

&lt;p&gt;শুধু running container দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু stopped বা exited container-সহ সব দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি খুব গুরুত্বপূর্ণ distinction।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
    ↓
Running containers

docker ps -a
    ↓
Running + Stopped/Exited containers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  9. একটি Image থেকে Multiple Containers
&lt;/h1&gt;

&lt;p&gt;এখানে Docker-এর একটি সুন্দর property দেখা যায়।&lt;/p&gt;

&lt;p&gt;আমাদের কাছে যদি থাকে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ubuntu:24.04
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে আমরা করতে পারি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu:24.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর আবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu:24.04 sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu:24.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ফলে একই image থেকে তিনটি আলাদা container তৈরি হতে পারে।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                ubuntu:24.04
                      │
        ┌─────────────┼─────────────┐
        ↓             ↓             ↓
   Container 1   Container 2   Container 3
      bash           sh            bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Image একটি template; container হলো সেই template-এর runtime instance।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি Docker-এর mental model-এর অন্যতম গুরুত্বপূর্ণ অংশ।&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Container-এর Random Name কেন আসে?
&lt;/h1&gt;

&lt;p&gt;Docker যখন আমরা manually কোনো name না দিই, তখন container-এর জন্য একটি automatically generated name দিতে পারে।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hardcore_goldstine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সমস্যা হলো, এমন নাম মনে রাখা সবসময় সহজ নয়।&lt;/p&gt;

&lt;p&gt;তাই আমরা নিজের meaningful name দিতে পারি।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--name&lt;/span&gt; my_ubuntu &lt;span class="nt"&gt;-it&lt;/span&gt; ubuntu:24.04 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন container-এর নাম:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my_ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি পরে container access এবং management অনেক সহজ করে দেয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Running Container-এর ভিতরে &lt;code&gt;docker exec&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;ধরুন একটি container already running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my_ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অন্য একটি terminal থেকে সেই running container-এর ভিতরে নতুন interactive shell খুলতে পারি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my_ubuntu bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec
      ↓
existing container
      ↓
bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ নতুন container তৈরি হচ্ছে না।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Already running container-এর ভিতরে একটি নতুন process execute হচ্ছে।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি &lt;code&gt;docker run&lt;/code&gt; এবং &lt;code&gt;docker exec&lt;/code&gt;-এর মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
→ নতুন container তৈরি করে

docker exec
→ existing running container-এর ভিতরে command চালায়
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  12. Container-এর ভিতরের State
&lt;/h1&gt;

&lt;p&gt;ধরুন আমরা &lt;code&gt;my_ubuntu&lt;/code&gt; container-এর ভিতরে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app
&lt;span class="nb"&gt;cd&lt;/span&gt; /app
&lt;span class="nb"&gt;touch &lt;/span&gt;myfile.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন অন্য terminal থেকে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my_ubuntu bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে একই container-এ ঢুকলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; /app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আমরা দেখতে পাব:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myfile.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কারণ দুই terminal আলাদা হলেও তারা &lt;strong&gt;একই container&lt;/strong&gt;-এর filesystem-এর সঙ্গে কাজ করছে।&lt;/p&gt;

&lt;p&gt;এটি &lt;code&gt;docker exec&lt;/code&gt; বোঝার জন্য একটি অত্যন্ত কার্যকর hands-on example।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. এবার নিজের Docker Image বানানো যাক
&lt;/h1&gt;

&lt;p&gt;এখন পর্যন্ত আমরা existing image ব্যবহার করেছি।&lt;/p&gt;

&lt;p&gt;কিন্তু real-world development-এ আমাদের প্রায়ই নিজের application-এর জন্য custom image তৈরি করতে হয়।&lt;/p&gt;

&lt;p&gt;সেখানেই আসে:&lt;/p&gt;

&lt;h1&gt;
  
  
  Dockerfile
&lt;/h1&gt;

&lt;p&gt;একটি নতুন directory তৈরি করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;docker-tutorial
&lt;span class="nb"&gt;cd &lt;/span&gt;docker-tutorial
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর তৈরি করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;খেয়াল করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নামটি সাধারণত এই exact convention-এই রাখা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. একটি Simple Dockerfile
&lt;/h1&gt;

&lt;p&gt;আমাদের প্রথম Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /hello.txt

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["bash"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন প্রতিটি instruction বুঝি।&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;FROM&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ubuntu:24.04&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি আমাদের base image নির্ধারণ করে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;এই custom image-এর foundation হবে &lt;code&gt;ubuntu:24.04&lt;/code&gt;।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;RUN&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /hello.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image build হওয়ার সময় এই command execute হবে।&lt;/p&gt;

&lt;p&gt;ফলে image-এর filesystem-এর মধ্যে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/hello.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নামে একটি file তৈরি হবে।&lt;/p&gt;

&lt;p&gt;File-এর content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;code&gt;CMD&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["bash"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Container start হওয়ার সময় default command হিসেবে &lt;code&gt;bash&lt;/code&gt; ব্যবহার করার নির্দেশ দেয়।&lt;/p&gt;

&lt;p&gt;সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
 ↓
Base image

RUN
 ↓
Build-time operation

CMD
 ↓
Default runtime command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dockerfile-এর এই basic structure পরবর্তীতে আরও advanced Docker configuration বোঝার foundation তৈরি করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Dockerfile থেকে Image Build করা
&lt;/h1&gt;

&lt;p&gt;এখন Dockerfile যে directory-তে আছে সেখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; custom_ubuntu &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই command-এর তিনটি গুরুত্বপূর্ণ অংশ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build
     ↓
-t custom_ubuntu
     ↓
.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;docker build&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Dockerfile-এর instructions অনুসরণ করে একটি নতুন image তৈরি করবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;-t custom_ubuntu&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Image-কে একটি meaningful name/tag দেয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;.&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;বর্তমান directory-কে build context হিসেবে নির্দেশ করে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ Docker বর্তমান directory থেকে Dockerfile এবং প্রয়োজনীয় build context ব্যবহার করবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Build শেষ হলে কী হলো?
&lt;/h1&gt;

&lt;p&gt;Build সফল হলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে আমরা দেখতে পাব:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;custom_ubuntu    latest    ........    101MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে আমরা কোনো explicit tag না দিলে Docker সাধারণত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tag ব্যবহার করে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;custom_ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;প্রকৃতপক্ষে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;custom_ubuntu:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;হিসেবে দেখা যেতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  17. এবার নিজের Image Run করি
&lt;/h1&gt;

&lt;p&gt;আমাদের custom image এখন ready।&lt;/p&gt;

&lt;p&gt;চালাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; custom_ubuntu bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Container-এর ভিতরে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে আমরা দেখতে পাব:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hello.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /hello.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানেই Dockerfile-এর power স্পষ্ট হয়।&lt;/p&gt;

&lt;p&gt;আমরা manually container-এর ভিতরে file তৈরি করিনি।&lt;/p&gt;

&lt;p&gt;Image build করার সময় Dockerfile-এর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /hello.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instruction file-টি image-এর filesystem-এ তৈরি করে দিয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  Docker-এর পুরো Flow এক নজরে
&lt;/h1&gt;

&lt;p&gt;এখন পুরো বিষয়টাকে একটি flow হিসেবে দেখি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Docker Hub
                     │
                     │ docker pull
                     ▼
              Local Image Cache
                     │
                     │ docker run
                     ▼
                 Container
                     │
                     │ command/process
                     ▼
                   bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর custom image-এর ক্ষেত্রে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             Dockerfile
                  │
                  │ docker build
                  ▼
            Custom Image
                  │
                  │ docker run
                  ▼
              Container
                  │
                  ▼
            Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই দুইটি flow বুঝতে পারলে Docker-এর অনেক command আর isolated command মনে হবে না।&lt;/p&gt;




&lt;h1&gt;
  
  
  সবচেয়ে গুরুত্বপূর্ণ Docker Commands
&lt;/h1&gt;

&lt;p&gt;এই hands-on session-এর commandগুলো এক জায়গায়:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;কাজ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Local images দেখা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker pull ubuntu:24.04&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Docker Hub থেকে image pull করা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker rmi ubuntu:24.04&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Image remove করা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker rmi -f ubuntu:24.04&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Force করে image remove করা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker ps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Running containers দেখা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;সব containers দেখা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker run -it ubuntu:24.04 bash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Interactive Ubuntu container চালানো&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker run --name my_ubuntu -it ubuntu:24.04 bash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Custom name দিয়ে container চালানো&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker exec -it my_ubuntu bash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Running container-এর ভিতরে shell চালানো&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker build -t custom_ubuntu .&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dockerfile থেকে custom image build করা&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;এই command reference-টির ভিত্তি দেওয়া hands-on notes-এও একইভাবে সংগঠিত হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  কয়েকটি গুরুত্বপূর্ণ Mental Model
&lt;/h1&gt;

&lt;p&gt;Docker শেখার সময় শুধু command মনে না রেখে এই কয়েকটি relationship মাথায় রাখা বেশি গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Image ≠ Container
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Image → Template
Container → Runtime Instance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. &lt;code&gt;docker pull&lt;/code&gt; ≠ &lt;code&gt;docker run&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker pull
→ Image local machine-এ আনে

docker run
→ Image থেকে container তৈরি ও start করে
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. &lt;code&gt;docker run&lt;/code&gt; ≠ &lt;code&gt;docker exec&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run
→ New container

docker exec
→ Existing running container-এর ভিতরে নতুন process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4. &lt;code&gt;docker ps&lt;/code&gt; ≠ &lt;code&gt;docker ps -a&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
→ Running

docker ps -a
→ Running + Exited
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. &lt;code&gt;-i&lt;/code&gt; ≠ &lt;code&gt;-t&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-i → STDIN open
-t → Pseudo-TTY
-it → Interactive terminal experience
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  শেষ কথা: Docker কেন শুরুতে কঠিন মনে হয়?
&lt;/h1&gt;

&lt;p&gt;Docker-এর command খুব বেশি কঠিন নয়।&lt;/p&gt;

&lt;p&gt;কঠিন হয় যখন আমরা Docker-কে isolated technology হিসেবে শেখার চেষ্টা করি।&lt;/p&gt;

&lt;p&gt;যদি Linux filesystem, process, shell, standard input/output, terminal, networking এবং basic operating-system concepts সম্পর্কে ধারণা থাকে, তাহলে Docker-এর behaviour অনেক বেশি logical মনে হয়।&lt;/p&gt;

&lt;p&gt;এই hands-on journey-তে তাই সবচেয়ে গুরুত্বপূর্ণ lesson শুধু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বা&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মনে রাখা নয়।&lt;/p&gt;

&lt;p&gt;বরং বোঝা:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;একটি image কীভাবে container-এ পরিণত হয়, container-এর ভিতরে process কীভাবে চলে, এবং Dockerfile কীভাবে সেই environment reproducibly তৈরি করে।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আজ আমরা Docker-এর foundation তৈরি করলাম:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image → Container → Process → Dockerfile → Custom Image&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এর পরের ধাপে এই foundation-এর ওপর দাঁড়িয়ে আরও বাস্তব বিষয়—production-grade Dockerfile, application containerization, networking, ports, volumes, এবং multi-container architecture—বোঝা অনেক সহজ হবে।&lt;/p&gt;

&lt;p&gt;Docker আসলে কোনো জাদু নয়।&lt;/p&gt;

&lt;p&gt;ঠিক mental model তৈরি করতে পারলে এটি একটি অত্যন্ত predictable এবং powerful tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn the model, not just the commands.&lt;/strong&gt; 🐳&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Linux User, Group &amp; File Permission Management — A Hands-on Guide 🐧</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 30 Aug 2026 04:43:19 +0000</pubDate>
      <link>https://dev.to/ragibcs/linux-user-group-file-permission-management-a-hands-on-guide-2a45</link>
      <guid>https://dev.to/ragibcs/linux-user-group-file-permission-management-a-hands-on-guide-2a45</guid>
      <description>&lt;p&gt;Linux শিখতে গেলে কিছু বিষয় এড়িয়ে যাওয়ার সুযোগ নেই। তার মধ্যে অন্যতম হলো &lt;strong&gt;User, Group এবং File Permission Management&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;Docker, Kubernetes, Server Administration, Cloud বা DevOps—যে দিকেই যেতে চান না কেন, Linux-এর এই মৌলিক বিষয়গুলো পরিষ্কারভাবে বোঝা খুবই গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;এই লেখায় আমরা একদম হাতে-কলমে দেখব:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux User কী?&lt;/li&gt;
&lt;li&gt;Root User এবং Normal User-এর পার্থক্য&lt;/li&gt;
&lt;li&gt;নতুন User তৈরি করা&lt;/li&gt;
&lt;li&gt;User-এর তথ্য দেখা&lt;/li&gt;
&lt;li&gt;Password সেট করা&lt;/li&gt;
&lt;li&gt;User switch করা&lt;/li&gt;
&lt;li&gt;User lock/unlock করা&lt;/li&gt;
&lt;li&gt;User delete করা&lt;/li&gt;
&lt;li&gt;Group কী এবং কেন ব্যবহার করা হয়&lt;/li&gt;
&lt;li&gt;Primary ও Supplementary Group&lt;/li&gt;
&lt;li&gt;Group তৈরি ও delete করা&lt;/li&gt;
&lt;li&gt;Group-এ User যোগ/বাদ দেওয়া&lt;/li&gt;
&lt;li&gt;Linux File Permission কী?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt;, &lt;code&gt;w&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt; কী?&lt;/li&gt;
&lt;li&gt;User, Group এবং Others-এর permission&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chmod&lt;/code&gt; দিয়ে permission পরিবর্তন&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chown&lt;/code&gt; দিয়ে ownership পরিবর্তন&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ls -l&lt;/code&gt; output কীভাবে পড়তে হয়&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Linux User কী?
&lt;/h2&gt;

&lt;p&gt;আপনি যখন Linux machine-এ login করেন, তখন আপনি একটি &lt;strong&gt;User&lt;/strong&gt; হিসেবে কাজ করেন।&lt;/p&gt;

&lt;p&gt;Linux-এ সাধারণভাবে দুই ধরনের User নিয়ে কাজ করা হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Linux Users
                         │
             ┌───────────┴───────────┐
             │                       │
        Root User              Normal User
        (Superuser)            (Standard User)
             │                       │
       Full Control             Limited Access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Root User
&lt;/h3&gt;

&lt;p&gt;Root হলো Linux-এর সবচেয়ে powerful user।&lt;/p&gt;

&lt;p&gt;Root user-এর system-এর প্রায় সব resource-এর ওপর administrative control থাকে। সে file দেখতে, modify করতে, delete করতে এবং permission পরিবর্তন করতে পারে।&lt;/p&gt;

&lt;p&gt;Root shell-এ সাধারণত prompt-এর শেষে &lt;code&gt;#&lt;/code&gt; দেখা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@ubuntu:/#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Normal User
&lt;/h3&gt;

&lt;p&gt;Normal user সাধারণ কাজের জন্য ব্যবহৃত হয় এবং তার access সীমিত থাকে। এর উদ্দেশ্য হলো অসাবধানতাবশত গুরুত্বপূর্ণ system file বা configuration পরিবর্তন করে ফেলা থেকে system-কে রক্ষা করা।&lt;/p&gt;

&lt;p&gt;Normal user-এর prompt সাধারণত &lt;code&gt;$&lt;/code&gt; দিয়ে শেষ হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;habib@ubuntu:~&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; প্রতিদিনের কাজের জন্য normal user ব্যবহার করা নিরাপদ; administrative কাজের জন্য প্রয়োজন অনুযায়ী elevated privileges ব্যবহার করা উচিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. User Management
&lt;/h1&gt;

&lt;p&gt;এবার terminal-এ হাতে-কলমে User management করা যাক।&lt;/p&gt;

&lt;h2&gt;
  
  
  নতুন User তৈরি করা
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useradd&lt;/code&gt; দিয়ে নতুন user তৈরি করা যায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;useradd &lt;span class="nt"&gt;-m&lt;/span&gt; habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useradd&lt;/code&gt; → নতুন user তৈরি করে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-m&lt;/code&gt; → user-এর জন্য home directory তৈরি করে&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;habib&lt;/code&gt; → নতুন username&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;-m&lt;/code&gt; ব্যবহার করলে সাধারণত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;directory তৈরি হবে। &lt;code&gt;-m&lt;/code&gt; না দিলে account তৈরি হলেও home directory স্বয়ংক্রিয়ভাবে তৈরি নাও হতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  User-এর UID এবং Group Information দেখা
&lt;/h2&gt;

&lt;p&gt;কোনো user-এর identification information দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;id &lt;/span&gt;habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uid=1001(habib)
gid=1001(habib)
groups=1001(habib)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;uid&lt;/code&gt; → User ID&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gid&lt;/code&gt; → Group ID&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;groups&lt;/code&gt; → User কোন কোন group-এর সদস্য&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linux-এ username-এর পাশাপাশি UID এবং GID গুরুত্বপূর্ণ কারণ system internally এই numeric IDs ব্যবহার করে user এবং group identify করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. System-এর সব User দেখা
&lt;/h1&gt;

&lt;p&gt;Linux system-এর user account-এর information &lt;code&gt;/etc/passwd&lt;/code&gt;-এ পাওয়া যায়।&lt;/p&gt;

&lt;p&gt;দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/passwd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;cat&lt;/code&gt; এখানে file-এর content terminal-এ print করার জন্য ব্যবহার করা হয়েছে।&lt;/p&gt;

&lt;p&gt;উদাহরণ হিসেবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/bash
habib:x:1001:1001::/home/habib:/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখান থেকে user-এর account-related information পাওয়া যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  4. User-এর Password Set করা
&lt;/h1&gt;

&lt;p&gt;নতুন user-এর password সেট করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;passwd habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর Linux নতুন password এবং confirmation চাইবে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;New password:
Retype new password:
passwd: password updated successfully
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Root user অন্য user-এর password সেট বা পরিবর্তন করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  5. এক User থেকে অন্য User-এ Switch করা
&lt;/h1&gt;

&lt;p&gt;User switch করার জন্য &lt;code&gt;su&lt;/code&gt; ব্যবহার করা যায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;su - habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-&lt;/code&gt; ব্যবহার করলে target user's login environment সহ shell শুরু করা হয়।&lt;/p&gt;

&lt;p&gt;আবার আগের shell-এ ফিরে আসতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@ubuntu:/# su - habib
habib@ubuntu:~&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে লক্ষ্য করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Root    → #
Normal  → $
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source demonstration-এ root থেকে normal user-এ switch করার ক্ষেত্রে password প্রয়োজন হয়নি, কিন্তু normal user থেকে অন্য user বা root-এ switch করার ক্ষেত্রে authentication প্রয়োজন হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. User Lock ও Unlock
&lt;/h1&gt;

&lt;p&gt;কোনো user-এর login temporarily বন্ধ করতে চাইলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-L&lt;/span&gt; habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে &lt;code&gt;-L&lt;/code&gt; অর্থ account lock করা।&lt;/p&gt;

&lt;p&gt;আবার unlock করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-U&lt;/span&gt; habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে &lt;code&gt;-U&lt;/code&gt; account unlock করে।&lt;/p&gt;

&lt;p&gt;এটি useful হতে পারে যখন কোনো account-এর login সাময়িকভাবে বন্ধ রাখতে হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  7. User Delete করা
&lt;/h1&gt;

&lt;p&gt;শুধু user account delete করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;userdel habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর user-এর home directory-সহ delete করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;userdel &lt;span class="nt"&gt;-r&lt;/span&gt; habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-r&lt;/code&gt; ব্যবহার করলে user-এর home directory এবং associated files-ও remove করার চেষ্টা করা হয়।&lt;/p&gt;

&lt;p&gt;⚠️ Production server-এ এই command চালানোর আগে অবশ্যই নিশ্চিত হোন যে user-এর প্রয়োজনীয় data backup করা আছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Linux Group কী?
&lt;/h1&gt;

&lt;p&gt;ধরুন একটি project-এ ১০ জন developer আছে।&lt;/p&gt;

&lt;p&gt;আপনি চাইছেন তারা সবাই একটি নির্দিষ্ট directory access করতে পারবে।&lt;/p&gt;

&lt;p&gt;প্রত্যেক user-এর permission আলাদাভাবে manage করার বদলে একটি &lt;strong&gt;Group&lt;/strong&gt; তৈরি করে সবাইকে সেই group-এর member করা যায়।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer 1 ─┐
Developer 2 ─┤
Developer 3 ─┼──&amp;gt; developers group
Developer 4 ─┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর directory-র group permission configure করলেই group-এর members-দের access নিয়ন্ত্রণ করা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Primary Group বনাম Supplementary Group
&lt;/h1&gt;

&lt;p&gt;Linux-এ user-এর সঙ্গে একাধিক group সম্পর্ক থাকতে পারে।&lt;/p&gt;

&lt;p&gt;দুইটি গুরুত্বপূর্ণ category হলো:&lt;/p&gt;

&lt;h3&gt;
  
  
  Primary Group
&lt;/h3&gt;

&lt;p&gt;User account তৈরির সময় একটি primary group থাকতে পারে এবং source example-এ user-এর username অনুযায়ী একটি group তৈরি হয়েছে। Primary group user-এর group identity-এর গুরুত্বপূর্ণ অংশ।&lt;/p&gt;

&lt;h3&gt;
  
  
  Supplementary Group
&lt;/h3&gt;

&lt;p&gt;একজন user অতিরিক্ত একাধিক group-এর member হতে পারে।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;habib
 ├── habib       ← Primary Group
 ├── admin       ← Supplementary Group
 └── developers  ← Supplementary Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এভাবে একই user একাধিক project বা resource group-এর অংশ হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Group তৈরি করা
&lt;/h1&gt;

&lt;p&gt;নতুন group তৈরি করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;groupadd admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে &lt;code&gt;admin&lt;/code&gt; নামে একটি group তৈরি হবে।&lt;/p&gt;

&lt;p&gt;System-এর group list দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বর্তমান user কোন কোন group-এর member তা দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;groups&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  11. User-কে Group-এ Add করা
&lt;/h1&gt;

&lt;p&gt;ধরুন &lt;code&gt;admin&lt;/code&gt; নামে group আছে এবং আমরা &lt;code&gt;habib&lt;/code&gt; user-কে সেখানে যোগ করতে চাই।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; admin habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;usermod&lt;/code&gt; → user configuration পরিবর্তন&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-a&lt;/code&gt; → append&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-G&lt;/code&gt; → supplementary group&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;admin&lt;/code&gt; → target group&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;habib&lt;/code&gt; → target user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;groups&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে নতুন group-টি দেখা যাবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ &lt;code&gt;-a&lt;/code&gt; কেন গুরুত্বপূর্ণ?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;-aG&lt;/code&gt; ব্যবহার না করে শুধু &lt;code&gt;-G&lt;/code&gt; ব্যবহার করলে existing supplementary group membership replace হয়ে যাওয়ার ঝুঁকি থাকে।&lt;/p&gt;

&lt;p&gt;তাই existing groups-এর সঙ্গে নতুন group যোগ করার সময় সাধারণত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; group user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pattern ব্যবহার করা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  12. Group থেকে User Remove করা
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;gpasswd&lt;/code&gt; দিয়ে কোনো user-কে group থেকে remove করা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gpasswd &lt;span class="nt"&gt;-d&lt;/span&gt; habib faltu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;habib → User
faltu → Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ &lt;code&gt;faltu&lt;/code&gt; group থেকে &lt;code&gt;habib&lt;/code&gt;-কে remove করা হচ্ছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Group Delete করা
&lt;/h1&gt;

&lt;p&gt;Group delete করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;groupdel admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে &lt;code&gt;admin&lt;/code&gt; group remove হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. এবার আসি File Permissions-এ 🔐
&lt;/h1&gt;

&lt;p&gt;Linux-এর অন্যতম গুরুত্বপূর্ণ concept হলো &lt;strong&gt;File Permission&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;একটি Linux system-এ সব user যেন সব file modify বা delete করতে না পারে, সেজন্য permission system ব্যবহার করা হয়।&lt;/p&gt;

&lt;p&gt;একটি file-এর permission দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rw-r--r-- 1 habib habib 12 Nov 23 10:05 a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;প্রথম অংশ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rw-r--r--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই মূল permission information।&lt;/p&gt;




&lt;h1&gt;
  
  
  15. &lt;code&gt;r&lt;/code&gt;, &lt;code&gt;w&lt;/code&gt;, &lt;code&gt;x&lt;/code&gt; — তিনটি Basic Permission
&lt;/h1&gt;

&lt;p&gt;Linux permission-এর তিনটি basic mode:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Permission&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;r&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Write&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Execute&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;r&lt;/code&gt; — Read
&lt;/h3&gt;

&lt;p&gt;File-এর content পড়ার permission।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r = Read
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;w&lt;/code&gt; — Write
&lt;/h3&gt;

&lt;p&gt;File modify করার permission।&lt;/p&gt;

&lt;p&gt;Directory-এর ক্ষেত্রে write permission থাকলে directory-এর content পরিবর্তন করার ক্ষমতা পাওয়া যায়।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;x&lt;/code&gt; — Execute
&lt;/h3&gt;

&lt;p&gt;Executable file বা script চালানোর permission।&lt;/p&gt;

&lt;p&gt;Directory-এর ক্ষেত্রে &lt;code&gt;x&lt;/code&gt; permission directory-তে enter/traverse করার সঙ্গে সম্পর্কিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. User, Group এবং Others
&lt;/h1&gt;

&lt;p&gt;এই অংশটি Linux permission বোঝার জন্য সবচেয়ে গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rwxr-xr--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে permission-কে তিন ভাগে ভাগ করা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rwx r-x r--
 │    │   │
 │    │   └── Others
 │    └────── Group
 └─────────── User / Owner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User     → rwx
Group    → r-x
Others   → r--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  User / Owner
&lt;/h3&gt;

&lt;p&gt;যে user file-এর owner।&lt;/p&gt;

&lt;h3&gt;
  
  
  Group
&lt;/h3&gt;

&lt;p&gt;যে group file-এর সঙ্গে associated।&lt;/p&gt;

&lt;h3&gt;
  
  
  Others
&lt;/h3&gt;

&lt;p&gt;Owner এবং group-এর বাইরে থাকা অন্য users।&lt;/p&gt;

&lt;p&gt;এই তিন category-র জন্য আলাদা permission রাখা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  17. &lt;code&gt;ls -l&lt;/code&gt; Output কীভাবে পড়বেন?
&lt;/h1&gt;

&lt;p&gt;এই output-টি দেখুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rw-r--r-- 1 habib habib 12 Nov 23 10:05 a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ভেঙে দেখলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-          rw-      r--      r--
│           │        │        │
│           │        │        └── Others
│           │        └─────────── Group
│           └──────────────────── User
└──────────────────────────────── File type
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর পুরো output-এর পরের অংশগুলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rw-r--r--  1  habib  habib  12  Nov 23 10:05  a.txt
             │    │      │     │       │          │
             │    │      │     │       │          └── Name
             │    │      │     │       └──────────── Date
             │    │      │     └──────────────────── Size
             │    │      └────────────────────────── Group
             │    └───────────────────────────────── Owner
             └────────────────────────────────────── Link count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;File type-এর ক্ষেত্রে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- = regular file
d = directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source example-এ directory-এর permission string &lt;code&gt;d&lt;/code&gt; দিয়ে শুরু হয়েছে এবং regular file-এর ক্ষেত্রে &lt;code&gt;-&lt;/code&gt; দিয়ে শুরু হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  18. &lt;code&gt;chmod&lt;/code&gt; — Permission পরিবর্তন করা
&lt;/h1&gt;

&lt;p&gt;Permission পরিবর্তনের জন্য সবচেয়ে গুরুত্বপূর্ণ command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;chmod&lt;/code&gt; অর্থ &lt;strong&gt;change mode&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rw-r--r--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আমরা owner-এর execute permission যোগ করতে চাই।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;u+x a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;u = user/owner
+ = add
x = execute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ফলে permission হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rwxr--r--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source example-এ symbolic mode ব্যবহার করে permission যোগ এবং remove করার এই পদ্ধতিগুলো দেখানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Permission Remove করা
&lt;/h1&gt;

&lt;p&gt;Owner-এর write permission remove করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;u-w a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Group-এর read permission remove করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;g-r a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Others-এর execute permission add করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;o+x a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;u = user
g = group
o = others

+ = add permission
- = remove permission

r = read
w = write
x = execute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এক নজরে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;u+x a.txt
&lt;span class="nb"&gt;chmod &lt;/span&gt;u-w a.txt
&lt;span class="nb"&gt;chmod &lt;/span&gt;g-r a.txt
&lt;span class="nb"&gt;chmod &lt;/span&gt;o+x a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  20. &lt;code&gt;chown&lt;/code&gt; — File Ownership পরিবর্তন
&lt;/h1&gt;

&lt;p&gt;Permission এবং ownership এক জিনিস নয়।&lt;/p&gt;

&lt;p&gt;ধরুন &lt;code&gt;a.txt&lt;/code&gt;-এর owner বর্তমানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আপনি owner পরিবর্তন করে &lt;code&gt;habibur&lt;/code&gt; করতে চান।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chown &lt;/span&gt;habibur a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;chown&lt;/code&gt; অর্থ &lt;strong&gt;change ownership&lt;/strong&gt;। Source material-এ ownership পরিবর্তনের জন্য এই command এবং root-level access-এর প্রয়োজনীয়তা দেখানো হয়েছে।&lt;/p&gt;

&lt;p&gt;Owner এবং group দুটো একসঙ্গে specify করা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chown &lt;/span&gt;habibur:developers a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  21. Directory Permission বনাম File Permission
&lt;/h1&gt;

&lt;p&gt;একটি গুরুত্বপূর্ণ বিষয় হলো—directory-এর ক্ষেত্রে permission-এর meaning কিছুটা আলাদা।&lt;/p&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;drwxr-xr--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Directory-এর ক্ষেত্রে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;r&lt;/code&gt; → directory-এর entries list করার ক্ষমতা&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;w&lt;/code&gt; → directory-এর content পরিবর্তন করার ক্ষমতা&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;x&lt;/code&gt; → directory-তে enter/traverse করার ক্ষমতা&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;অর্থাৎ directory-তে &lt;code&gt;x&lt;/code&gt; permission না থাকলে শুধু &lt;code&gt;r&lt;/code&gt; থাকা যথেষ্ট নাও হতে পারে—directory-এর ভিতরের object access করার ক্ষেত্রে traversal permission গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  22. &lt;code&gt;ls -l&lt;/code&gt;-এর Size ও Link Count
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;ls -l&lt;/code&gt; শুধু permission দেখায় না। আরও metadata দেখায়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;drwxr-xr-x  3  habib  habib  4096  Nov 23 10:00  files/
-rw-r--r--  1  habib  habib    12  Nov 23 10:05  a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে &lt;code&gt;3&lt;/code&gt; এবং &lt;code&gt;1&lt;/code&gt; হলো link count-এর অংশ। Directory-এর ক্ষেত্রে &lt;code&gt;.&lt;/code&gt; এবং &lt;code&gt;..&lt;/code&gt; এবং subdirectory-এর কারণে এই count পরিবর্তিত হতে পারে; সাধারণ file-এর ক্ষেত্রে এটি সাধারণত &lt;code&gt;1&lt;/code&gt; থাকে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Directory size কেন 4096?
&lt;/h3&gt;

&lt;p&gt;Linux filesystem-এ directory metadata-এর জন্য অনেক ক্ষেত্রে &lt;code&gt;4096&lt;/code&gt; bytes-এর মতো একটি size দেখা যায়। এটি directory-এর ভিতরের সব file-এর total size বোঝায় না।&lt;/p&gt;

&lt;p&gt;অন্যদিকে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a.txt → 12 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে file-এর content-এর size 12 bytes।&lt;/p&gt;




&lt;h1&gt;
  
  
  23. একটি ছোট Hands-on Example
&lt;/h1&gt;

&lt;p&gt;এখন পুরো বিষয়টা একটি ছোট workflow দিয়ে দেখি।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 — User তৈরি
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;useradd &lt;span class="nt"&gt;-m&lt;/span&gt; habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2 — Password সেট
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;passwd habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3 — User information দেখুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;id &lt;/span&gt;habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4 — Group তৈরি করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;groupadd admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5 — User-কে group-এ add করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; admin habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6 — Group membership check করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;groups &lt;/span&gt;habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 7 — একটি file তৈরি করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 8 — Permission দেখুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 9 — Owner-কে execute permission দিন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;u+x a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 10 — Ownership পরিবর্তন করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chown &lt;/span&gt;habibur a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এভাবেই Linux-এর user → group → permission → ownership—এই পুরো relationship-টি practically বোঝা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  24. সবচেয়ে গুরুত্বপূর্ণ Commands — Cheat Sheet 🚀
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# User Management&lt;/span&gt;
useradd &lt;span class="nt"&gt;-m&lt;/span&gt; &amp;lt;username&amp;gt;
passwd &amp;lt;username&amp;gt;
&lt;span class="nb"&gt;id&lt;/span&gt; &amp;lt;username&amp;gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/passwd
su - &amp;lt;username&amp;gt;
&lt;span class="nb"&gt;exit
&lt;/span&gt;usermod &lt;span class="nt"&gt;-L&lt;/span&gt; &amp;lt;username&amp;gt;
usermod &lt;span class="nt"&gt;-U&lt;/span&gt; &amp;lt;username&amp;gt;
userdel &amp;lt;username&amp;gt;
userdel &lt;span class="nt"&gt;-r&lt;/span&gt; &amp;lt;username&amp;gt;

&lt;span class="c"&gt;# Group Management&lt;/span&gt;
groupadd &amp;lt;group&amp;gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/group
&lt;span class="nb"&gt;groups
&lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; &amp;lt;group&amp;gt; &amp;lt;user&amp;gt;
gpasswd &lt;span class="nt"&gt;-d&lt;/span&gt; &amp;lt;user&amp;gt; &amp;lt;group&amp;gt;
groupdel &amp;lt;group&amp;gt;

&lt;span class="c"&gt;# Permission &amp;amp; Ownership&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;u+x &amp;lt;file&amp;gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;u-w &amp;lt;file&amp;gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;g-r &amp;lt;file&amp;gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;o+x &amp;lt;file&amp;gt;
&lt;span class="nb"&gt;chown&lt;/span&gt; &amp;lt;user&amp;gt; &amp;lt;file&amp;gt;
&lt;span class="nb"&gt;chown&lt;/span&gt; &amp;lt;user&amp;gt;:&amp;lt;group&amp;gt; &amp;lt;file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই core commands-গুলোর summary source-এর cheat sheet-এও দেওয়া হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  25. শেষ কথা
&lt;/h1&gt;

&lt;p&gt;Linux-এর User, Group এবং Permission system প্রথমে একটু complicated মনে হতে পারে। কিন্তু concept-গুলো যদি তিনটি layer হিসেবে চিন্তা করেন, তাহলে বিষয়টি অনেক সহজ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Linux Security Model
                         │
          ┌──────────────┼──────────────┐
          │              │              │
        User           Group        Permissions
          │              │              │
       Who are you?   Who are they?   What can they do?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;User&lt;/strong&gt; নির্ধারণ করে কে কাজ করছে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Group&lt;/strong&gt; নির্ধারণ করে কোন users একই access policy share করবে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permission&lt;/strong&gt; নির্ধারণ করে তারা কী করতে পারবে।&lt;/p&gt;

&lt;p&gt;আর এই তিনটির সঙ্গে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useradd
usermod
groupadd
chmod
chown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর মতো command ভালোভাবে বুঝে ফেললে Linux administration-এর একটি গুরুত্বপূর্ণ foundation তৈরি হয়ে যায়।&lt;/p&gt;

&lt;p&gt;বিশেষ করে Docker, Kubernetes, Cloud এবং DevOps-এর দিকে যেতে চাইলে Linux fundamentals শক্ত হওয়া অত্যন্ত গুরুত্বপূর্ণ। Source lesson-টিও Linux fundamentals শেষ করে পরবর্তী Docker topics-এ যাওয়ার প্রসঙ্গটি তুলে ধরে।&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Linux শুধু একটা operating system নয়—একজন developer বা DevOps engineer-এর জন্য এটি একটি fundamental skill।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Happy Learning! 🐧&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Linux-এর মৌলিক কমান্ড ও File System: Terminal থেকে File Management পর্যন্ত একটি Practical Guide</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sat, 29 Aug 2026 13:32:44 +0000</pubDate>
      <link>https://dev.to/ragibcs/linux-er-maulik-kmaandd-o-file-system-terminal-theke-file-management-prynt-ektti-practical-guide-1435</link>
      <guid>https://dev.to/ragibcs/linux-er-maulik-kmaandd-o-file-system-terminal-theke-file-management-prynt-ektti-practical-guide-1435</guid>
      <description>&lt;p&gt;Linux শেখার শুরুতে সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলোর একটি হলো &lt;strong&gt;Terminal এবং Basic Linux Commands&lt;/strong&gt; বোঝা।&lt;/p&gt;

&lt;p&gt;Docker, Kubernetes, DevOps, Cloud বা System Design—যে ক্ষেত্রেই কাজ করতে চান না কেন, Linux-এর command line সম্পর্কে ভালো ধারণা থাকা অত্যন্ত গুরুত্বপূর্ণ। কারণ বাস্তব server, container এবং অনেক development environment-এ GUI-এর পরিবর্তে terminal দিয়েই অধিকাংশ কাজ করতে হয়।&lt;/p&gt;

&lt;p&gt;এই কারণে &lt;code&gt;pwd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;mkdir&lt;/code&gt;, &lt;code&gt;touch&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;echo&lt;/code&gt;, &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;—এই commandগুলো শুধু মুখস্থ করলেই হবে না; এগুলো &lt;strong&gt;কেন এবং কীভাবে কাজ করে&lt;/strong&gt;, সেটিও বুঝতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১. Linux Terminal আসলে কী?
&lt;/h1&gt;

&lt;p&gt;Terminal হলো Linux system-এর সঙ্গে command-এর মাধ্যমে interact করার একটি interface।&lt;/p&gt;

&lt;p&gt;আপনি terminal খুললে সাধারণত এমন একটি prompt দেখতে পারেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ragib@ragib-arch:~ %
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা Docker container-এর ভিতরে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@container-id:/#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই একটি line-এর মধ্যেই system সম্পর্কে বেশ কিছু গুরুত্বপূর্ণ information থাকে।&lt;/p&gt;

&lt;p&gt;একটি prompt-কে ভেঙে দেখলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ragib @       ragib-arch    : ~ %
      │              │            │   │
   Username       Hostname      Home Shell/
                               Directory Privilege
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২. Terminal Prompt-এর প্রতিটি অংশ
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Username
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ragib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি হলো বর্তমানে যে user system-এ login করে আছে তার username।&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;@&lt;/code&gt; চিহ্ন
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি username এবং machine/host name-এর মধ্যে separator হিসেবে কাজ করে।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user@machine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;এই machine-এ এই user login করে আছে।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Machine / Hostname
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ragib-arch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি হলো machine বা host-এর নাম।&lt;/p&gt;

&lt;p&gt;Docker container-এর ক্ষেত্রে এটি container hostname-ও হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩. &lt;code&gt;~&lt;/code&gt; কী?
&lt;/h1&gt;

&lt;p&gt;Terminal prompt-এর সবচেয়ে গুরুত্বপূর্ণ symbolগুলোর একটি হলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটিকে বলা হয় &lt;strong&gt;tilde&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;Linux shell-এ &lt;code&gt;~&lt;/code&gt; সাধারণত current user's &lt;strong&gt;Home Directory&lt;/strong&gt; নির্দেশ করে।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;আমার নিজের home directory-তে চলে যাও।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আর শুধু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলেও সাধারণত home directory-তে ফিরে যাওয়া যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪. &lt;code&gt;%&lt;/code&gt;, &lt;code&gt;$&lt;/code&gt; এবং &lt;code&gt;#&lt;/code&gt; কী বোঝায়?
&lt;/h1&gt;

&lt;p&gt;Terminal prompt-এর শেষে যে symbol থাকে, সেটিও গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;%&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zsh shell-এ সাধারণ user-এর prompt হিসেবে &lt;code&gt;%&lt;/code&gt; দেখা যেতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;$&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bash shell-এ সাধারণ user-এর prompt সাধারণত &lt;code&gt;$&lt;/code&gt; দিয়ে শেষ হয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;code&gt;#&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;#&lt;/code&gt; সাধারণত বোঝায় আপনি &lt;strong&gt;root/superuser&lt;/strong&gt; হিসেবে কাজ করছেন।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@container:/#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;root&lt;/code&gt; → user&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;container&lt;/code&gt; → hostname&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; → current directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;#&lt;/code&gt; → root privilege&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  ৫. Root User-এ যাওয়া
&lt;/h1&gt;

&lt;p&gt;Linux-এ administrative কাজের জন্য root privilege প্রয়োজন হতে পারে।&lt;/p&gt;

&lt;p&gt;Source-এর উদাহরণে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;su
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করে root user shell-এ যাওয়া দেখানো হয়েছে।&lt;/p&gt;

&lt;p&gt;তখন prompt-এর শেষে সাধারণ &lt;code&gt;$&lt;/code&gt; বা &lt;code&gt;%&lt;/code&gt;-এর পরিবর্তে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখা যেতে পারে।&lt;/p&gt;

&lt;p&gt;তবে root shell-এ কাজ করার সময় সতর্ক থাকতে হয়, কারণ ভুল command system-এর গুরুত্বপূর্ণ file বা directory পরিবর্তন করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৬. Linux File System-এর Root Directory
&lt;/h1&gt;

&lt;p&gt;এবার আসি Linux filesystem-এর সবচেয়ে গুরুত্বপূর্ণ concept-এ।&lt;/p&gt;

&lt;p&gt;Linux-এর filesystem শুরু হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই &lt;code&gt;/&lt;/code&gt;-কে বলা হয় &lt;strong&gt;Root Directory&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;এটিকে Windows-এর &lt;code&gt;C:\&lt;/code&gt;-এর সঙ্গে সরাসরি এক করে দেখা ঠিক নয়; Linux-এর filesystem hierarchy সম্পূর্ণ tree structure-এর মতো।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── media
├── proc
├── root
├── sbin
├── tmp
├── usr
└── var
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৭. &lt;code&gt;/bin&lt;/code&gt; — Basic Binary Commands
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;bin&lt;/code&gt; এসেছে &lt;strong&gt;binary&lt;/strong&gt; থেকে।&lt;/p&gt;

&lt;p&gt;এখানে basic command-এর executable বা binary পাওয়া যেতে পারে।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/bin
├── ls
├── cat
├── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source-এ &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;-এর মতো basic command-এর উদাহরণ দেওয়া হয়েছে।&lt;/p&gt;

&lt;p&gt;যখন আপনি terminal-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;লিখছেন, তখন shell command-টি খুঁজে executable হিসেবে চালায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৮. &lt;code&gt;/boot&lt;/code&gt; — Boot-এর প্রয়োজনীয় Files
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/boot&lt;/code&gt; directory-তে system boot করার সঙ্গে সম্পর্কিত গুরুত্বপূর্ণ files থাকে।&lt;/p&gt;

&lt;p&gt;এর মধ্যে থাকতে পারে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kernel-related files&lt;/li&gt;
&lt;li&gt;Boot loader-related files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/boot
   ↓
System Boot-এর প্রয়োজনীয় files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৯. &lt;code&gt;/dev&lt;/code&gt; — Device Files
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/dev&lt;/code&gt; directory-তে বিভিন্ন hardware/device-এর সঙ্গে সম্পর্কিত device files থাকে।&lt;/p&gt;

&lt;p&gt;Linux-এ অনেক hardware resource-কে file-like interface-এর মাধ্যমে access করা যায়।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/dev
├── Storage Devices
├── Terminal Devices
├── Other Device Interfaces
└── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি Linux-এর "everything is a file"-ধারণার একটি গুরুত্বপূর্ণ অংশ।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১০. &lt;code&gt;/etc&lt;/code&gt; — Configuration Files
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/etc&lt;/code&gt; directory মূলত system configuration-এর জন্য গুরুত্বপূর্ণ।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc
   ↓
System Configuration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;System এবং বিভিন্ন service/application-এর configuration এখানে পাওয়া যেতে পারে।&lt;/p&gt;

&lt;p&gt;উদাহরণ হিসেবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর অধীনে বিভিন্ন configuration file থাকতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১১. &lt;code&gt;/home&lt;/code&gt; — সাধারণ User-এর Home Directory
&lt;/h1&gt;

&lt;p&gt;সাধারণ user-এর personal files সাধারণত &lt;code&gt;/home&lt;/code&gt;-এর অধীনে থাকে।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home
├── user1
├── user2
└── user3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একজন user-এর নিজের directory-তে থাকতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documents
Downloads
Pictures
Music
Desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১২. &lt;code&gt;/lib&lt;/code&gt; — Shared Libraries
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/lib&lt;/code&gt; directory-তে system-এর প্রয়োজনীয় shared libraries থাকতে পারে।&lt;/p&gt;

&lt;p&gt;অনেক executable তাদের কাজের জন্য বিভিন্ন library-এর ওপর নির্ভর করে।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Program
   │
   ├── Library A
   ├── Library B
   └── Library C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৩. &lt;code&gt;/media&lt;/code&gt; — Mounted External Devices
&lt;/h1&gt;

&lt;p&gt;External device যেমন USB drive বা external disk system-এ mount হলে &lt;code&gt;/media&lt;/code&gt;-এর অধীনে mount point দেখা যেতে পারে।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USB / External Disk
        ↓
      Mount
        ↓
     /media/...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৪. &lt;code&gt;/proc&lt;/code&gt; — Process ও Kernel Information
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/proc&lt;/code&gt; একটি বিশেষ virtual filesystem, যেখানে running processes এবং kernel-related information পাওয়া যায়।&lt;/p&gt;

&lt;p&gt;এটি সাধারণ storage directory-এর মতো নয়।&lt;/p&gt;

&lt;p&gt;এখানে system-এর runtime information দেখা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৫. &lt;code&gt;/root&lt;/code&gt; — Root User-এর Home Directory
&lt;/h1&gt;

&lt;p&gt;একটি common confusion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এক জিনিস নয়।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/&lt;/code&gt; হলো filesystem-এর root directory।&lt;/p&gt;

&lt;p&gt;অন্যদিকে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;হলো root user-এর home directory।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৬. &lt;code&gt;/sbin&lt;/code&gt; — System Administration Binaries
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/sbin&lt;/code&gt;-এ system administration-এর সঙ্গে সম্পর্কিত binary/command পাওয়া যেতে পারে।&lt;/p&gt;

&lt;p&gt;সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/sbin
   ↓
System Administration Commands
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৭. &lt;code&gt;/tmp&lt;/code&gt; — Temporary Files
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/tmp&lt;/code&gt; directory temporary files রাখার জন্য ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
    ↓
Temporary Data
    ↓
/tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো সাধারণত permanent user data রাখার জায়গা নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৮. &lt;code&gt;/usr&lt;/code&gt; — User Programs ও Applications
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/usr&lt;/code&gt;-এর অধীনে user programs এবং applications-এর বিভিন্ন file পাওয়া যেতে পারে।&lt;/p&gt;

&lt;p&gt;অনেক installed software-এর বিভিন্ন component এখানে থাকতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৯. &lt;code&gt;/var&lt;/code&gt; — Variable Data, Logs ও Cache
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/var&lt;/code&gt; এমন data-এর জন্য গুরুত্বপূর্ণ যা সময়ের সঙ্গে পরিবর্তিত হয়।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;li&gt;Cache&lt;/li&gt;
&lt;li&gt;অন্যান্য variable data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var
├── logs
├── cache
└── variable data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২০. &lt;code&gt;pwd&lt;/code&gt; — আমি এখন কোথায় আছি?
&lt;/h1&gt;

&lt;p&gt;Linux terminal-এ সবচেয়ে basic কিন্তু গুরুত্বপূর্ণ command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর অর্থ:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Print Working Directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি আপনার current working directory-এর absolute path দেখায়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে আপনি বর্তমানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;directory-তে আছেন।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২১. &lt;code&gt;ls&lt;/code&gt; — Directory-এর ভিতরের জিনিস দেখা
&lt;/h1&gt;

&lt;p&gt;বর্তমান directory-এর file এবং folder দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করা হয়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output হতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documents
Downloads
Pictures
project
notes.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২২. &lt;code&gt;ls -l&lt;/code&gt; — Detailed Listing
&lt;/h1&gt;

&lt;p&gt;শুধু নাম দেখার পরিবর্তে বিস্তারিত information দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি long listing format-এ information দেখায়।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;permissions
owner
group
size
date/time
filename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source-এ &lt;code&gt;ls -l&lt;/code&gt;-কে long list হিসেবে ব্যাখ্যা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৩. &lt;code&gt;ls -a&lt;/code&gt; — Hidden Files দেখা
&lt;/h1&gt;

&lt;p&gt;Linux-এ যেসব file-এর নাম &lt;code&gt;.&lt;/code&gt; দিয়ে শুরু হয়, সেগুলো সাধারণ &lt;code&gt;ls&lt;/code&gt; output-এ দেখা যায় না।&lt;/p&gt;

&lt;p&gt;Hidden file-সহ সব file দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
..
.bashrc
.profile
project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২৪. &lt;code&gt;ls -la&lt;/code&gt; — সবচেয়ে Useful Listing Command
&lt;/h1&gt;

&lt;p&gt;Detailed information + hidden files একসঙ্গে দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-l → Long listing
-a → All files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls -la
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;= &lt;strong&gt;Long listing + Hidden files&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৫. &lt;code&gt;cd&lt;/code&gt; — Directory Change
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; অর্থ:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change Directory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এক directory থেকে অন্য directory-তে যাওয়ার জন্য &lt;code&gt;cd&lt;/code&gt; ব্যবহার করা হয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;Documents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Documents directory-তে যাও।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ২৬. &lt;code&gt;cd ~&lt;/code&gt; এবং &lt;code&gt;cd&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Home directory-তে যেতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা শুধু:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৭. &lt;code&gt;cd /&lt;/code&gt; — Root Directory
&lt;/h1&gt;

&lt;p&gt;Filesystem-এর একদম root-এ যেতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এরপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখাবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৮. &lt;code&gt;cd ..&lt;/code&gt; — Parent Directory
&lt;/h1&gt;

&lt;p&gt;ধরুন আপনি আছেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/app/habib/rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন এক ধাপ উপরে যেতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে যাবেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/app/habib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;..&lt;/code&gt; মানে current directory-এর &lt;strong&gt;parent directory&lt;/strong&gt;।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৯. &lt;code&gt;cd .&lt;/code&gt; — Current Directory
&lt;/h1&gt;

&lt;p&gt;একটি dot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে current directory।&lt;/p&gt;

&lt;p&gt;তাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে আপনি একই directory-তেই থাকবেন।&lt;/p&gt;

&lt;p&gt;এটি path manipulation-এর সময় বেশি গুরুত্বপূর্ণ হয়ে ওঠে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩০. &lt;code&gt;cd -&lt;/code&gt; — আগের Directory-তে ফিরে যাওয়া
&lt;/h1&gt;

&lt;p&gt;ধরুন আপনি ছিলেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/home/user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর গেলেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var/log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে আগের working directory-তে ফিরে যেতে পারবেন।&lt;/p&gt;

&lt;p&gt;এটি দ্রুত navigation-এর জন্য খুব useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩১. Absolute Path কী?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Absolute Path&lt;/strong&gt; হলো এমন path যা filesystem-এর root &lt;code&gt;/&lt;/code&gt; থেকে শুরু হয়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /app/habib/rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে পুরো path root থেকে শুরু হয়েছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
└── app
    └── habib
        └── rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই এটি absolute path।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩২. Relative Path কী?
&lt;/h1&gt;

&lt;p&gt;Relative path current directory-এর ওপর নির্ভর করে।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে আমরা current location থেকে relativeভাবে path তৈরি করছি।&lt;/p&gt;

&lt;p&gt;তাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Absolute:
 /app/habib/rahim

Relative:
 ../rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৩৩. Absolute বনাম Relative Path
&lt;/h1&gt;

&lt;p&gt;সহজ comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;বিষয়&lt;/th&gt;
&lt;th&gt;Absolute Path&lt;/th&gt;
&lt;th&gt;Relative Path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;কোথা থেকে শুরু&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current location-এর ওপর নির্ভরশীল&lt;/td&gt;
&lt;td&gt;না&lt;/td&gt;
&lt;td&gt;হ্যাঁ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/app/habib/rahim&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;../rahim&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;একটি সহজ mental model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Absolute Path
     ↓
Start from /

Relative Path
     ↓
Start from "আমি এখন যেখানে আছি"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৩৪. &lt;code&gt;mkdir&lt;/code&gt; — নতুন Directory তৈরি
&lt;/h1&gt;

&lt;p&gt;নতুন folder তৈরি করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি &lt;code&gt;app&lt;/code&gt; নামে একটি directory তৈরি করবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩৫. &lt;code&gt;mkdir -p&lt;/code&gt; — Nested Directory তৈরি
&lt;/h1&gt;

&lt;p&gt;ধরুন একসঙ্গে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;habib/
└── rahim/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তৈরি করতে চান।&lt;/p&gt;

&lt;p&gt;তাহলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; habib/rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করা যায়।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-p&lt;/code&gt; parent directory প্রয়োজন হলে সেটিও তৈরি করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩৬. &lt;code&gt;touch&lt;/code&gt; — নতুন File তৈরি
&lt;/h1&gt;

&lt;p&gt;খালি file তৈরি করার জন্য:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি &lt;code&gt;a.txt&lt;/code&gt; নামে একটি file তৈরি করবে।&lt;/p&gt;

&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিলে file-টি দেখতে পারবেন।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩৭. &lt;code&gt;cat&lt;/code&gt; — File-এর Content দেখা
&lt;/h1&gt;

&lt;p&gt;কোনো file-এর content terminal-এ দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করা হয়।&lt;/p&gt;

&lt;p&gt;যদি file empty হয়, তাহলে কোনো output দেখা যাবে না।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩৮. &lt;code&gt;echo&lt;/code&gt; দিয়ে File-এ লেখা
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; command-এর output file-এ redirect করা যায়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;a.txt&lt;/code&gt;-এর মধ্যে লেখা হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৩৯. &lt;code&gt;&amp;gt;&lt;/code&gt; এবং &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; — Overwrite বনাম Append
&lt;/h1&gt;

&lt;p&gt;এখানে দুটি symbol খুব গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;&amp;gt;&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;gt;&lt;/code&gt; ব্যবহার করলে আগের content overwrite হয়ে নতুন content লেখা হয়।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Old Content
     ↓
     X

New Content
     ↓
  a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Another Line"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; আগের content রেখে file-এর শেষে নতুন content যোগ করে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World
Another Line
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই মনে রাখুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt;   = Overwrite
&amp;gt;&amp;gt;  = Append
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৪০. &lt;code&gt;head&lt;/code&gt; — File-এর শুরু দেখা
&lt;/h1&gt;

&lt;p&gt;বড় file-এর পুরো content না দেখে প্রথম কয়েকটি line দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 5 a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি প্রথম ৫টি line দেখাবে।&lt;/p&gt;

&lt;p&gt;বড় log file inspect করার সময় এটি খুব useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪১. &lt;code&gt;tail&lt;/code&gt; — File-এর শেষ দেখা
&lt;/h1&gt;

&lt;p&gt;শেষের কয়েকটি line দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 2 a.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি শেষ ২টি line দেখাবে।&lt;/p&gt;

&lt;p&gt;বিশেষ করে log file দেখার ক্ষেত্রে &lt;code&gt;tail&lt;/code&gt; অত্যন্ত গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪২. &lt;code&gt;cp&lt;/code&gt; — File Copy করা
&lt;/h1&gt;

&lt;p&gt;একটি file অন্য নামে copy করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;file1.txt file2.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে &lt;code&gt;file1.txt&lt;/code&gt;-এর একটি copy &lt;code&gt;file2.txt&lt;/code&gt; নামে তৈরি হবে।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;file1.txt
    │
    │ cp
    ▼
file2.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৪৩. Directory Copy করতে &lt;code&gt;cp -r&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;শুধু file নয়, পুরো directory copy করতে হলে recursive option ব্যবহার করতে হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; rahim/ ataur/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-r
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে recursive।&lt;/p&gt;

&lt;p&gt;অর্থাৎ directory-এর ভিতরের file এবং nested directory-সহ copy হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪৪. &lt;code&gt;mv&lt;/code&gt; — Move অথবা Rename
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;mv&lt;/code&gt; দিয়ে file বা directory move করা যায়।&lt;/p&gt;

&lt;p&gt;কিন্তু একই directory-তে destination name পরিবর্তন করলে এটিই rename-এর কাজও করে।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;file3.txt file4.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;file3.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর নাম হয়ে যাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;file4.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mv
├── Move
└── Rename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৪৫. &lt;code&gt;rm&lt;/code&gt; — File Delete
&lt;/h1&gt;

&lt;p&gt;একটি file delete করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি destructive operation।&lt;/p&gt;

&lt;p&gt;Delete করার আগে filename/path ভালোভাবে check করা উচিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪৬. &lt;code&gt;rm -rf&lt;/code&gt; — Directory Delete
&lt;/h1&gt;

&lt;p&gt;Directory-এর ভিতরে file থাকলে সাধারণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;folder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে সেটি remove করা যায় না।&lt;/p&gt;

&lt;p&gt;Recursive এবং force option ব্যবহার করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; habib/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;directory এবং তার ভিতরের content delete করা যায়।&lt;/p&gt;

&lt;p&gt;এখানে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-r = recursive
-f = force
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm -rf
│
├── ভিতরের file delete
├── nested directory delete
└── parent directory delete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;সতর্কতা:&lt;/strong&gt; &lt;code&gt;rm -rf&lt;/code&gt; খুব powerful এবং destructive command। ভুল path-এ চালালে গুরুত্বপূর্ণ data মুছে যেতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪৭. একটি Practical Workflow
&lt;/h1&gt;

&lt;p&gt;এখন আমরা শেখা commandগুলো একসঙ্গে ব্যবহার করি।&lt;/p&gt;

&lt;p&gt;প্রথমে current location দেখি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর files দেখি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Detailed listing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি directory তৈরি করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; project/src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Directory-তে যাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে location check করি।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪৮. File তৈরি ও Content লেখা
&lt;/h1&gt;

&lt;p&gt;এখন &lt;code&gt;src&lt;/code&gt; directory-তে যাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি file তৈরি করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Content লিখি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello World"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন content দেখি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আরও একটি line যোগ করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Linux is powerful"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আবার:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World
Linux is powerful
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখতে পাব।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪৯. File-এর নির্দিষ্ট অংশ দেখা
&lt;/h1&gt;

&lt;p&gt;ধরুন file অনেক বড়।&lt;/p&gt;

&lt;p&gt;পুরো file দেখতে না চাইলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 5 app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;প্রথম ৫ line দেখাবে।&lt;/p&gt;

&lt;p&gt;শেষের ৫ line দেখতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 5 app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই technique বিশেষভাবে log এবং large text file inspect করার সময় কার্যকর।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৫০. Copy ও Rename
&lt;/h1&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কে copy করতে চান:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;app.txt backup.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন দুইটি file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.txt
backup.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rename করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;backup.txt old-backup.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.txt
old-backup.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৫১. Linux Navigation-এর Mental Model
&lt;/h1&gt;

&lt;p&gt;Directory navigation বুঝতে সবচেয়ে ভালো উপায় হলো একটি tree কল্পনা করা।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
└── app
    └── habib
        └── rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আপনি যদি &lt;code&gt;rahim&lt;/code&gt;-এ থাকেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/app/habib/rahim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ একই জায়গায় থাকবেন।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;code&gt;habib&lt;/code&gt;-এ যাবেন।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ../..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ &lt;code&gt;app&lt;/code&gt;-এ যাবেন।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ root directory-তে যাবেন।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ নিজের home directory-তে যাবেন।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৫২. Essential Linux Commands — Quick Reference
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;কাজ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current location দেখায়&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File ও directory list দেখায়&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls -l&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Detailed listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls -a&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hidden files দেখায়&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls -la&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Detailed + hidden files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Directory change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd ~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Home directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd /&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Root directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd ..&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Parent directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd .&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd -&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Previous directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mkdir&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Directory তৈরি&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mkdir -p&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nested directory তৈরি&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;touch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Empty file তৈরি&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File content দেখা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;echo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Output/file-এ text লেখা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;head&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;প্রথম কয়েকটি line দেখা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;শেষ কয়েকটি line দেখা&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cp -r&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Directory recursive copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mv&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Move/Rename&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File delete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rm -rf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Directory ও contents delete&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  ৫৩. সবচেয়ে গুরুত্বপূর্ণ Command Combination
&lt;/h1&gt;

&lt;p&gt;বাস্তবে কাজ করার সময় এই combinationগুলো খুব বেশি কাজে লাগবে:&lt;/p&gt;

&lt;h3&gt;
  
  
  কোথায় আছি?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  এখানে কী আছে?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hidden file-সহ বিস্তারিত দেখতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Home-এ যেতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Root-এ যেতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  এক ধাপ উপরে যেতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  আগের directory-তে ফিরতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Directory তৈরি করতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Nested directory তৈরি করতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; project/src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File তৈরি করতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File দেখতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File-এ নতুন content লিখতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Existing content-এর শেষে যোগ করতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"World"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; app.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File copy করতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;app.txt backup.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rename করতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;app.txt main.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File delete করতে চাই
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;main.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৫৪. শেষ কথা
&lt;/h1&gt;

&lt;p&gt;Linux-এর basic command শেখা মানে শুধু কয়েকটি command মুখস্থ করা নয়।&lt;/p&gt;

&lt;p&gt;আপনাকে বুঝতে হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terminal
   ↓
Shell
   ↓
Command
   ↓
Filesystem
   ↓
File / Directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর filesystem-এর ক্ষেত্রে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── media
├── proc
├── root
├── sbin
├── tmp
├── usr
└── var
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এরপর navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwd
ls
cd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;File ও directory management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir
touch
cat
echo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Content inspection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;head
tail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;File management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp
mv
rm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই commandগুলো Linux-এর command-line workflow-এর foundation তৈরি করে।&lt;/p&gt;

&lt;p&gt;বিশেষ করে Docker, Kubernetes এবং system-level কাজ শেখার আগে এই fundamentals ভালোভাবে আয়ত্ত করা অত্যন্ত গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;h3&gt;
  
  
  এক লাইনে মনে রাখুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwd → আমি কোথায়?
ls  → এখানে কী আছে?
cd  → কোথায় যাব?
mkdir → নতুন folder বানাব
touch → নতুন file বানাব
cat → file কী আছে দেখব
echo → file-এ লিখব
head/tail → file-এর অংশ দেখব
cp → copy করব
mv → move/rename করব
rm → delete করব
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Linux-এর command line আসলে ভয় পাওয়ার মতো কিছু নয়। একটি filesystem tree এবং কয়েকটি fundamental command-এর relationship পরিষ্কার হয়ে গেলে terminal-এ কাজ করা অনেক বেশি স্বাভাবিক এবং দ্রুত হয়ে যায়।&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Linux Package Management: Package, Repository, APT ও DPKG কীভাবে কাজ করে?</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sat, 29 Aug 2026 12:50:50 +0000</pubDate>
      <link>https://dev.to/ragibcs/linux-package-management-package-repository-apt-o-dpkg-kiibhaabe-kaaj-kre-4l2</link>
      <guid>https://dev.to/ragibcs/linux-package-management-package-repository-apt-o-dpkg-kiibhaabe-kaaj-kre-4l2</guid>
      <description>&lt;p&gt;Linux শেখার সময় Software Install করা খুব সাধারণ একটি কাজ। কিন্তু Linux-এ software installation-এর পেছনে আসলে কী ঘটে—&lt;strong&gt;Package কী, Repository কী, Package Manager কী, APT ও DPKG-এর মধ্যে পার্থক্য কী, Dependency কীভাবে resolve হয়&lt;/strong&gt;—এসব না বুঝলে Linux-এর package ecosystem সম্পর্কে ধারণা অসম্পূর্ণ থেকে যায়।&lt;/p&gt;

&lt;p&gt;এই লেখায় আমরা পুরো বিষয়টি step-by-step বুঝব।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১. প্রথমে একটি সহজ প্রশ্ন: Software কোথা থেকে আসে?
&lt;/h2&gt;

&lt;p&gt;ধরুন আপনি Ubuntu ব্যবহার করছেন এবং আপনার &lt;code&gt;git&lt;/code&gt; দরকার।&lt;/p&gt;

&lt;p&gt;আপনি terminal-এ লিখলেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু এখানে একটি প্রশ্ন আসবে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;apt&lt;/code&gt; Git পেল কোথা থেকে?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Git আপনার computer-এর ভেতরে আগে থেকেই থাকার কথা নয়।&lt;/p&gt;

&lt;p&gt;Git একটি &lt;strong&gt;package&lt;/strong&gt; হিসেবে একটি &lt;strong&gt;repository&lt;/strong&gt;-তে সংরক্ষিত থাকে। আর সেই repository থেকে package খুঁজে এনে install করার কাজ করে &lt;strong&gt;package manager&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;অর্থাৎ পুরো সম্পর্কটি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Repository
     ↓
Package Manager
     ↓
Package
     ↓
Linux System
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই তিনটি শব্দ তাই খুব গুরুত্বপূর্ণ:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Package → Repository → Package Manager&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  ২. Package কী?
&lt;/h1&gt;

&lt;p&gt;সহজ ভাষায়,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Package হলো software-এর একটি packaged bundle।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git
curl
vim
nano
vlc
nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো Linux system-এ package হিসেবে পাওয়া যায়।&lt;/p&gt;

&lt;p&gt;একটি package-এর মধ্যে শুধু program-এর executable অংশ থাকে না। এর সঙ্গে software install এবং পরিচালনা করার জন্য আরও বিভিন্ন information ও file থাকতে পারে।&lt;/p&gt;

&lt;p&gt;ধরুন &lt;code&gt;git&lt;/code&gt; একটি package।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git Package
│
├── Program / Binary
├── Metadata
├── Dependencies
├── Installation Scripts
├── Removal Scripts
└── Configuration Files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৩. Package-এর ভিতরে কী থাকে?
&lt;/h1&gt;

&lt;p&gt;এখন একটু গভীরে যাওয়া যাক।&lt;/p&gt;

&lt;h2&gt;
  
  
  Binary / Executable
&lt;/h2&gt;

&lt;p&gt;Package-এর মূল software বা executable code এখানে থাকে।&lt;/p&gt;

&lt;p&gt;যেমন Git install করার পরে আমরা Git command ব্যবহার করতে পারি।&lt;/p&gt;




&lt;h2&gt;
  
  
  Metadata
&lt;/h2&gt;

&lt;p&gt;Package-এর সঙ্গে বিভিন্ন metadata থাকে।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Version&lt;/li&gt;
&lt;li&gt;Maintainer&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Package সম্পর্কিত অন্যান্য তথ্য&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Package: git
Version: X.Y.Z
Maintainer: ...
Dependencies: ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ package manager শুধু software-এর নাম জানলেই কাজ শেষ করে না; package সম্পর্কে আরও অনেক তথ্য তার প্রয়োজন হয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation Scripts
&lt;/h2&gt;

&lt;p&gt;Package install করার সময় কিছু automated operation প্রয়োজন হতে পারে।&lt;/p&gt;

&lt;p&gt;সেজন্য package-এর সঙ্গে installation scripts থাকতে পারে।&lt;/p&gt;

&lt;p&gt;দুটি গুরুত্বপূর্ণ script হলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pre-Install
Post-Install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pre-Install&lt;/strong&gt; installation শুরু হওয়ার আগে কিছু কাজ করতে পারে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Post-Install&lt;/strong&gt; installation শেষ হওয়ার পরে প্রয়োজনীয় configuration বা setup করতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Removal Scripts
&lt;/h2&gt;

&lt;p&gt;Package remove করার সময়ও script চালানো যেতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pre-Remove
Post-Remove
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install
   │
   ├── Pre-Install
   ├── Install
   └── Post-Install

Remove
   │
   ├── Pre-Remove
   ├── Remove
   └── Post-Remove
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Configuration Files
&lt;/h2&gt;

&lt;p&gt;Package-এর সঙ্গে প্রয়োজনীয় configuration files-ও থাকতে পারে।&lt;/p&gt;

&lt;p&gt;সুতরাং একটি package-কে শুধু &lt;code&gt;.deb&lt;/code&gt; বা &lt;code&gt;.rpm&lt;/code&gt; file হিসেবে না দেখে software-এর installation-এর জন্য প্রয়োজনীয় একটি structured bundle হিসেবে ভাবা ভালো।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৪. Repository কী?
&lt;/h1&gt;

&lt;p&gt;এবার আসি Repository-তে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository হলো এমন একটি remote storage/server যেখানে software packages সংরক্ষণ করা হয়।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;সহজ উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubuntu Repository
│
├── git
├── curl
├── vim
├── nginx
├── ...
└── হাজার হাজার package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আপনি যখন কোনো software install করতে চান, package manager repository-এর সঙ্গে যোগাযোগ করে প্রয়োজনীয় package খুঁজে বের করে।&lt;/p&gt;

&lt;p&gt;এটি অন্য ecosystem-এর সঙ্গেও তুলনা করা যায়।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Node.js
   ↓
npm Registry

Docker
   ↓
Docker Hub

Ubuntu
   ↓
Ubuntu Package Repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মূল ধারণাটি একই:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;কোথাও package store থাকে এবং package manager সেখান থেকে package সংগ্রহ করে।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ৫. Package Manager কী?
&lt;/h1&gt;

&lt;p&gt;Repository-তে package আছে।&lt;/p&gt;

&lt;p&gt;কিন্তু সেই package খুঁজবে কে?&lt;/p&gt;

&lt;p&gt;এখানে আসে &lt;strong&gt;Package Manager&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;Package Manager হলো এমন একটি software/tool যা package management-এর বিভিন্ন কাজ পরিচালনা করে। যেমন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Package search&lt;/li&gt;
&lt;li&gt;Package download&lt;/li&gt;
&lt;li&gt;Package installation&lt;/li&gt;
&lt;li&gt;Package removal&lt;/li&gt;
&lt;li&gt;Dependency management&lt;/li&gt;
&lt;li&gt;Update&lt;/li&gt;
&lt;li&gt;Upgrade&lt;/li&gt;
&lt;li&gt;Cache management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             Repository
                  │
                  │
                  ▼
          Package Manager
                  │
        ┌─────────┼─────────┐
        │         │         │
      Install   Remove   Upgrade
        │
        ▼
    Linux System
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৬. Package Manager দুই ধরনের কেন?
&lt;/h1&gt;

&lt;p&gt;Linux package management বুঝতে গেলে একটি গুরুত্বপূর্ণ distinction হলো:&lt;/p&gt;

&lt;h3&gt;
  
  
  High-Level Package Manager
&lt;/h3&gt;

&lt;p&gt;এবং&lt;/p&gt;

&lt;h3&gt;
  
  
  Low-Level Package Manager
&lt;/h3&gt;

&lt;p&gt;দুটোর কাজ আলাদা।&lt;/p&gt;

&lt;p&gt;Ubuntu/Debian ecosystem-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;High-Level
    ↓
APT

Low-Level
    ↓
DPKG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৭. APT — High-Level Package Manager
&lt;/h1&gt;

&lt;p&gt;Ubuntu-তে আমরা সবচেয়ে বেশি যে package manager ব্যবহার করি সেটি হলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এছাড়া:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt-get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ও ব্যবহার করা হয়।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;APT user-এর জন্য package management-এর বড় অংশ পরিচালনা করে।&lt;/p&gt;

&lt;p&gt;সে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository-এর সঙ্গে কাজ করে&lt;/li&gt;
&lt;li&gt;Package খুঁজে&lt;/li&gt;
&lt;li&gt;Dependencies resolve করে&lt;/li&gt;
&lt;li&gt;Package download করে&lt;/li&gt;
&lt;li&gt;Package version manage করে&lt;/li&gt;
&lt;li&gt;Installation process পরিচালনা করে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এ কারণেই APT-কে &lt;strong&gt;High-Level Package Manager&lt;/strong&gt; বলা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৮. DPKG — Low-Level Package Manager
&lt;/h1&gt;

&lt;p&gt;Ubuntu/Debian system-এ &lt;code&gt;dpkg&lt;/code&gt; হলো low-level package management tool।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dpkg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর কাজ মূলত package archive unpack এবং system-এ package-এর file install করার মতো low-level operation পরিচালনা করা।&lt;/p&gt;

&lt;p&gt;এখন একটি গুরুত্বপূর্ণ প্রশ্ন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;তাহলে আমরা সরাসরি &lt;code&gt;dpkg&lt;/code&gt; ব্যবহার করি না কেন?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;কারণ DPKG-এর কাজ সীমিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  ৯. Dependency কী?
&lt;/h1&gt;

&lt;p&gt;Dependency হলো এমন একটি package বা software component যেটি অন্য একটি software সঠিকভাবে কাজ করার জন্য প্রয়োজন।&lt;/p&gt;

&lt;p&gt;ধরুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git
│
├── Dependency A
├── Dependency B
└── Dependency C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git install করতে গেলে যদি Dependency A, B, C প্রয়োজন হয়, তাহলে সেগুলোও system-এ থাকতে হবে।&lt;/p&gt;

&lt;p&gt;এখন আপনি যদি low-level &lt;code&gt;dpkg&lt;/code&gt; দিয়ে একটি package install করেন, missing dependency নিজে থেকে repository থেকে resolve করার কাজ এটি করে না। Dependency missing থাকলে installation fail করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১০. APT কেন এত গুরুত্বপূর্ণ?
&lt;/h1&gt;

&lt;p&gt;APT এই জায়গাতেই powerful।&lt;/p&gt;

&lt;p&gt;আপনি লিখলেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;APT প্রথমে বুঝবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Git-এর কী কী dependency দরকার?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dependencies খুঁজে বের করবে
        ↓
প্রয়োজনীয় package download করবে
        ↓
Dependencies install করবে
        ↓
শেষে Git install করবে
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             apt install git
                    │
                    ▼
                   APT
                    │
            Check Dependencies
                    │
       ┌────────────┼────────────┐
       ▼            ▼            ▼
     Dep A        Dep B        Dep C
       │            │            │
       └────────────┼────────────┘
                    ▼
                Install Git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই High-Level Package Manager-এর বড় সুবিধা।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১১. APT এবং DPKG-এর সম্পর্ক
&lt;/h1&gt;

&lt;p&gt;এখন পুরো architecture পরিষ্কার করা যাক।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 │
 │ apt install git
 ▼
APT
 │
 │ Dependency Resolution
 │ Repository Management
 │ Package Selection
 ▼
DPKG
 │
 │ Unpack / Install
 ▼
Linux Filesystem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;APT high-level management করে, আর DPKG low-level installation operation সম্পন্ন করে।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এই কারণেই সাধারণ user হিসেবে আমরা বেশিরভাগ সময় &lt;code&gt;apt&lt;/code&gt; ব্যবহার করি।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১২. বিভিন্ন Linux Distribution-এর Package Manager
&lt;/h1&gt;

&lt;p&gt;সব Linux distribution-এর package management system এক নয়।&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Distribution&lt;/th&gt;
&lt;th&gt;High-Level&lt;/th&gt;
&lt;th&gt;Low-Level&lt;/th&gt;
&lt;th&gt;Package Format&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ubuntu / Debian&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;apt-get&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dpkg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.deb&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Red Hat / CentOS / Fedora&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;yum&lt;/code&gt;, &lt;code&gt;dnf&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rpm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.rpm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arch Linux&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pacman&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.pkg.tar.zst&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenSUSE&lt;/td&gt;
&lt;td&gt;&lt;code&gt;zypper&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rpm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.rpm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;তাই আপনি Ubuntu ব্যবহার করলে &lt;code&gt;apt&lt;/code&gt; শেখা সবচেয়ে গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৩. Package Format কী?
&lt;/h1&gt;

&lt;p&gt;Package manager-এর সঙ্গে package format-এরও সম্পর্ক আছে।&lt;/p&gt;

&lt;p&gt;Ubuntu/Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Red Hat/Fedora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubuntu / Debian
      │
      ▼
    .deb

RedHat / Fedora
      │
      ▼
    .rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ubuntu Debian ecosystem থেকে derived হওয়ায় Debian-এর &lt;code&gt;.deb&lt;/code&gt; package format ব্যবহার করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৪. Ubuntu Repository-এর চারটি প্রধান Section
&lt;/h1&gt;

&lt;p&gt;Ubuntu repository-কে কয়েকটি প্রধান section-এ ভাগ করা হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubuntu Repository
│
├── Main
├── Restricted
├── Universe
└── Multiverse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Main
&lt;/h3&gt;

&lt;p&gt;Officially maintained free/open-source packages-এর প্রধান অংশ।&lt;/p&gt;

&lt;h3&gt;
  
  
  Restricted
&lt;/h3&gt;

&lt;p&gt;Proprietary hardware driver বা restricted software-এর মতো components।&lt;/p&gt;

&lt;h3&gt;
  
  
  Universe
&lt;/h3&gt;

&lt;p&gt;Community-maintained open-source software।&lt;/p&gt;

&lt;h3&gt;
  
  
  Multiverse
&lt;/h3&gt;

&lt;p&gt;লাইসেন্স বা অন্যান্য সীমাবদ্ধতার কারণে restricted/unofficial nature-এর software।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৫. APT Repository URL কীভাবে জানে?
&lt;/h1&gt;

&lt;p&gt;APT-কে জানতে হবে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Package কোথা থেকে download করতে হবে?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ubuntu system-এ repository configuration সাধারণত থাকে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/apt/sources.list.d/ubuntu.sources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APT
 │
 ▼
Repository Configuration
 │
 ▼
Repository URL
 │
 ▼
Remote Ubuntu Repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে APT জানে কোন configured repository থেকে package information এবং package files সংগ্রহ করতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৬. Repository-এর &lt;code&gt;dists&lt;/code&gt; এবং &lt;code&gt;pool&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Repository-এর internal structure-এ দুটি গুরুত্বপূর্ণ ধারণা হলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Repository
│
├── dists/
│
└── pool/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;dists/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;এখানে package index information থাকে।&lt;/p&gt;

&lt;p&gt;APT এই index ব্যবহার করে দ্রুত জানতে পারে কোন package available, কোন version আছে ইত্যাদি।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;pool/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;এখানে মূল package archive files থাকে, যেমন &lt;code&gt;.deb&lt;/code&gt; package।&lt;/p&gt;

&lt;p&gt;সহজভাবে মনে রাখুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dists/
  ↓
Package Information

pool/
  ↓
Actual Package Files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৭. &lt;code&gt;apt update&lt;/code&gt; আসলে কী করে?
&lt;/h1&gt;

&lt;p&gt;এখানে beginners-দের একটি common confusion হয়।&lt;/p&gt;

&lt;p&gt;অনেকে ভাবেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে system-এর software update হয়ে যাবে।&lt;/p&gt;

&lt;p&gt;আসলে তা নয়।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;apt update&lt;/code&gt; মূলত repository থেকে &lt;strong&gt;latest package index information&lt;/strong&gt; সংগ্রহ করে local package index update করে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remote Repository
       │
       │ apt update
       ▼
Local Package Index
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি সাধারণত package install করে না।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৮. &lt;code&gt;apt install&lt;/code&gt; কী করে?
&lt;/h1&gt;

&lt;p&gt;এখন package install করি।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;APT package-এর information ব্যবহার করে প্রয়োজনীয় package download এবং installation process পরিচালনা করবে।&lt;/p&gt;

&lt;p&gt;যদি confirmation চায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Do you want to continue? [Y/n]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে installation continue করা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৯. Installation সফল হয়েছে কি না কীভাবে বুঝব?
&lt;/h1&gt;

&lt;p&gt;Package install করার পরে সেটি ব্যবহার করে test করা যায়।&lt;/p&gt;

&lt;p&gt;যেমন &lt;code&gt;curl&lt;/code&gt; install করার পরে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://ports.ubuntu.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে test করা যায়।&lt;/p&gt;

&lt;p&gt;অর্থাৎ workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt update
     ↓
apt install curl
     ↓
curl ব্যবহার
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২০. Package Remove করা
&lt;/h1&gt;

&lt;p&gt;কোনো package আর প্রয়োজন না হলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt remove curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করা যায়।&lt;/p&gt;

&lt;p&gt;Workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;curl

&lt;span class="c"&gt;# কাজ শেষ&lt;/span&gt;

apt remove curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২১. &lt;code&gt;apt clean&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;APT package download করার সময় local cache তৈরি করতে পারে।&lt;/p&gt;

&lt;p&gt;এই downloaded package cache পরিষ্কার করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করা যায়।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Package Cache
     │
     │ apt clean
     ▼
Cache Cleaned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২২. &lt;code&gt;apt upgrade&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;এবার ধরুন আপনার system-এ কিছু package already installed আছে।&lt;/p&gt;

&lt;p&gt;কিন্তু সেগুলোর নতুন version repository-তে এসেছে।&lt;/p&gt;

&lt;p&gt;তখন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালালে installed packages-এর available newer versions upgrade করা যায়।&lt;/p&gt;

&lt;p&gt;এখানে সবচেয়ে গুরুত্বপূর্ণ difference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apt update
     ↓
Package List / Index Update

apt upgrade
     ↓
Installed Packages Upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দুটিকে কখনো একই জিনিস ভাববেন না।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৩. একটি বাস্তব উদাহরণ: নতুন Ubuntu Machine
&lt;/h1&gt;

&lt;p&gt;ধরুন আপনি একটি নতুন Ubuntu environment চালু করেছেন।&lt;/p&gt;

&lt;p&gt;প্রথমে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন curl install হয়ে গেছে।&lt;/p&gt;

&lt;p&gt;Test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://ports.ubuntu.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কাজ শেষ হলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt remove curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cache পরিষ্কার করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং installed packages upgrade করতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই কয়েকটি command দিয়েই Linux package management-এর basic workflow বোঝা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৪. পুরো Process একসঙ্গে
&lt;/h1&gt;

&lt;p&gt;এখন পুরো architecture-টি একবার দেখুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  USER
                   │
                   │ apt install git
                   ▼
          ┌─────────────────┐
          │      APT        │
          │ High-Level PM   │
          └────────┬────────┘
                   │
          Repository Search
                   │
                   ▼
          Dependency Resolution
                   │
                   ▼
          Package Download
                   │
                   ▼
          ┌─────────────────┐
          │      DPKG       │
          │ Low-Level PM    │
          └────────┬────────┘
                   │
             Unpack / Install
                   │
                   ▼
          ┌─────────────────┐
          │  Linux System   │
          └─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই Linux package management-এর মূল mental model।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৫. সবচেয়ে গুরুত্বপূর্ণ Command Cheat Sheet
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Repository package index update&lt;/span&gt;
apt update

&lt;span class="c"&gt;# Package install&lt;/span&gt;
apt &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;package&amp;gt;

&lt;span class="c"&gt;# Package remove&lt;/span&gt;
apt remove &amp;lt;package&amp;gt;

&lt;span class="c"&gt;# Downloaded cache clean&lt;/span&gt;
apt clean

&lt;span class="c"&gt;# Installed packages upgrade&lt;/span&gt;
apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update

apt &lt;span class="nb"&gt;install &lt;/span&gt;git

apt remove git

apt clean

apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২৬. পাঁচটি শব্দ মনে রাখুন
&lt;/h1&gt;

&lt;p&gt;পুরো chapter-এর সবচেয়ে গুরুত্বপূর্ণ পাঁচটি concept:&lt;/p&gt;

&lt;h3&gt;
  
  
  Package
&lt;/h3&gt;

&lt;p&gt;Software-এর packaged bundle।&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository
&lt;/h3&gt;

&lt;p&gt;যেখানে package সংরক্ষিত থাকে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Package Manager
&lt;/h3&gt;

&lt;p&gt;Package search, download, install, remove এবং management করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  APT
&lt;/h3&gt;

&lt;p&gt;Ubuntu/Debian-এর High-Level Package Manager।&lt;/p&gt;

&lt;h3&gt;
  
  
  DPKG
&lt;/h3&gt;

&lt;p&gt;Ubuntu/Debian-এর Low-Level Package Manager।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৭. Final Mental Model
&lt;/h1&gt;

&lt;p&gt;শেষবারের মতো পুরো বিষয়টি একটি diagram দিয়ে মনে রাখুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;              PACKAGE
                 ▲
                 │
          stored inside
                 │
                 │
            REPOSITORY
                 ▲
                 │
       accessed through
                 │
                 │
          PACKAGE MANAGER
                 │
          ┌──────┴──────┐
          │             │
        APT           DPKG
     High-Level     Low-Level
          │             │
          └──────┬──────┘
                 ▼
            LINUX SYSTEM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর Ubuntu/Debian-এর ক্ষেত্রে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APT
 │
 ├── Repository handle করে
 ├── Package খুঁজে
 ├── Dependency resolve করে
 ├── Package download করে
 └── DPKG-এর মাধ্যমে low-level installation সম্পন্ন করতে পারে
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অন্যদিকে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DPKG
 │
 ├── .deb package নিয়ে কাজ করে
 ├── Package unpack করে
 └── Low-level installation operation সম্পন্ন করে
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই Linux Package Management-এর সবচেয়ে গুরুত্বপূর্ণ equation হলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Repository
     +
Package Manager
     +
Package
     +
Dependency
     =
Software Installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর Ubuntu ব্যবহার করলে practicalভাবে সবচেয়ে গুরুত্বপূর্ণ command হলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update
apt &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;package&amp;gt;
apt remove &amp;lt;package&amp;gt;
apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই চারটি command এবং &lt;strong&gt;Package → Repository → APT → DPKG → Linux System&lt;/strong&gt; flow পরিষ্কারভাবে বুঝে ফেলতে পারলে Linux-এর package management-এর foundation অনেকটাই তৈরি হয়ে যাবে।&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Linux-এর ভিতরের Architecture বুঝি: GNU, Coreutils, Shell, Terminal, Kernel ও Desktop Environment</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sat, 29 Aug 2026 06:40:47 +0000</pubDate>
      <link>https://dev.to/ragibcs/linux-er-bhitrer-architecture-bujhi-gnu-coreutils-shell-terminal-kernel-o-desktop-environment-3f56</link>
      <guid>https://dev.to/ragibcs/linux-er-bhitrer-architecture-bujhi-gnu-coreutils-shell-terminal-kernel-o-desktop-environment-3f56</guid>
      <description>&lt;p&gt;Linux নিয়ে কাজ করতে গেলে আমরা প্রায়ই কয়েকটি নাম বারবার শুনি—&lt;strong&gt;Linux Kernel, GNU, GNU Coreutils, GCC, glibc, Bash, Shell, Terminal, GNOME, KDE&lt;/strong&gt; ইত্যাদি।&lt;/p&gt;

&lt;p&gt;কিন্তু সমস্যা হচ্ছে, এগুলো আসলে কে কোথায় থাকে, কার কাজ কী, আর একজন user যখন Terminal-এ &lt;code&gt;ls&lt;/code&gt; লিখে তখন সেই command কীভাবে শেষ পর্যন্ত Kernel এবং Hardware-এর কাছে পৌঁছায়—এটা পরিষ্কার না হলে Linux-এর পুরো architecture-টাই অনেকটা অস্পষ্ট থেকে যায়।&lt;/p&gt;

&lt;p&gt;এই লেখায় সেই পুরো বিষয়টাকে ধাপে ধাপে বোঝার চেষ্টা করা হবে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১. Linux আর Linux Distribution-এর পার্থক্য
&lt;/h2&gt;

&lt;p&gt;Linux এবং Linux Distribution একই জিনিস নয়।&lt;/p&gt;

&lt;p&gt;Linux মূলত Kernel-এর কথা বোঝায়, আর একটি সম্পূর্ণ Linux Distribution হলো Kernel-এর সঙ্গে আরও অনেক প্রয়োজনীয় component-এর সমন্বয়।&lt;/p&gt;

&lt;p&gt;একটি পূর্ণাঙ্গ Linux distribution-এর মধ্যে শুধু Kernel থাকলেই হয় না। এর সঙ্গে বিভিন্ন ধরনের &lt;strong&gt;utilities, package manager, system services, desktop environment, tools এবং configuration&lt;/strong&gt; প্রয়োজন হয়।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ybxjalchu07t0wjs1wt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ybxjalchu07t0wjs1wt.png" alt="Linux Distribution Architecture" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;একটি conceptual structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Linux Distribution
│
├── Linux Kernel
├── GNU Utilities
├── Package Manager
├── System Services
├── Desktop Environment
├── Applications
└── Other Tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ২. GNU আসলে কী?
&lt;/h2&gt;

&lt;p&gt;GNU বুঝতে হলে GNU project-এর ধারণাটি বুঝতে হবে।&lt;/p&gt;

&lt;p&gt;GNU-এর পূর্ণরূপ &lt;strong&gt;GNU's Not Unix&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;GNU project-এর উদ্দেশ্য ছিল Unix-এর মতো একটি free software ecosystem তৈরি করা, যেখানে operating system তৈরির জন্য প্রয়োজনীয় বিভিন্ন component free software হিসেবে পাওয়া যাবে।&lt;/p&gt;

&lt;p&gt;GNU-কে শুধু একটি single software হিসেবে দেখলে ভুল হবে।&lt;/p&gt;

&lt;p&gt;বরং এটাকে একটি বড় software ecosystem/project হিসেবে দেখা যায়।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb37x4z1xu1ccb36j8nzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb37x4z1xu1ccb36j8nzx.png" alt="GNU Ecosystem" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 GNU Project
                     │
        ┌────────────┼────────────┐
        │            │            │
       GCC          glibc       Coreutils
        │            │            │
     Compiler     C Library     Commands
        │                         │
        └────────────┬────────────┘
                     │
                  Bash
                     │
                User Space
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ৩. GNU-এর গুরুত্বপূর্ণ component
&lt;/h2&gt;

&lt;p&gt;GNU ecosystem-এর বিভিন্ন গুরুত্বপূর্ণ component-এর মধ্যে রয়েছে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GCC&lt;/li&gt;
&lt;li&gt;glibc&lt;/li&gt;
&lt;li&gt;GNU Coreutils&lt;/li&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;li&gt;GDB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GCC
&lt;/h3&gt;

&lt;p&gt;GCC বা GNU Compiler Collection source code compile করার জন্য ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C Source Code
      │
      ▼
     GCC
      │
      ▼
Executable / Machine Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  glibc
&lt;/h3&gt;

&lt;p&gt;GNU C Library application এবং operating system-এর বিভিন্ন functionality ব্যবহারের জন্য গুরুত্বপূর্ণ library layer।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C Program
   │
   ▼
glibc
   │
   ▼
System Calls
   │
   ▼
Linux Kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ৪. GNU Coreutils
&lt;/h2&gt;

&lt;p&gt;এখন আসি এই আলোচনার অন্যতম গুরুত্বপূর্ণ অংশে:&lt;/p&gt;

&lt;h1&gt;
  
  
  GNU Coreutils
&lt;/h1&gt;

&lt;p&gt;GNU Coreutils হলো অনেকগুলো fundamental command-line utility/program-এর collection।&lt;/p&gt;

&lt;p&gt;এর মধ্যে আমরা প্রতিদিনের Linux কাজের সময় বিভিন্ন command ব্যবহার করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls
cp
rm
cat
grep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GNU Coreutils
│
├── ls
├── cp
├── rm
├── cat
└── grep
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে একটি গুরুত্বপূর্ণ বিষয় হলো—&lt;code&gt;ls&lt;/code&gt; কোনো magical Linux keyword নয়। এটি একটি command-line utility/program।&lt;/p&gt;




&lt;h2&gt;
  
  
  ৫. Terminal আসলে কী?
&lt;/h2&gt;

&lt;p&gt;এখন প্রশ্ন:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;আমি command লিখব কোথায়?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;উত্তর:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminal-এ।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Terminal হচ্ছে এমন একটি user-facing program/interface যেখানে user command লিখতে পারে এবং output দেখতে পারে।&lt;/p&gt;

&lt;p&gt;যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;লিখলে Terminal-এ current directory-এর files এবং directories-এর output দেখা যায়।&lt;/p&gt;

&lt;p&gt;কিন্তু Terminal নিজে &lt;code&gt;ls&lt;/code&gt; command-এর কাজ করে না।&lt;/p&gt;

&lt;p&gt;এখানেই Shell-এর প্রয়োজন হয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  ৬. Terminal আর Shell এক জিনিস নয়
&lt;/h2&gt;

&lt;p&gt;এটি Linux শেখার সময় সবচেয়ে common confusion-এর একটি।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terminal ≠ Shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Terminal&lt;/strong&gt; হলো command input/output interface।&lt;/p&gt;

&lt;p&gt;অন্যদিকে &lt;strong&gt;Shell&lt;/strong&gt; হলো command interpreter।&lt;/p&gt;

&lt;p&gt;Terminal user-এর input গ্রহণ করে, আর Shell সেই command interpret করে এবং প্রয়োজনীয় program execute করার workflow পরিচালনা করে।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uaf4ibxkk8gyf9yy1eg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uaf4ibxkk8gyf9yy1eg.png" alt="Terminal and Shell" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;সহজভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terminal
   │
   ▼
Shell
   │
   ▼
Command / Program
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ৭. Bash কী?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bash = Bourne Again SHell&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bash হলো একটি shell program।&lt;/p&gt;

&lt;p&gt;যখন তুমি Terminal-এ লিখো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তখন Bash command-টি interpret করে এবং প্রয়োজনীয় executable program চালানোর workflow পরিচালনা করে।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Terminal
   │
   │ command
   ▼
 Bash
   │
   │ interpret
   ▼
Command / Program
   │
   ▼
Kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shell-এর কাজ হলো user-এর command এবং system-এর মধ্যে একটি গুরুত্বপূর্ণ interface হিসেবে কাজ করা।&lt;/p&gt;




&lt;h2&gt;
  
  
  ৮. Shell অনেক ধরনের হতে পারে
&lt;/h2&gt;

&lt;p&gt;শুধু Bash-ই একমাত্র shell নয়।&lt;/p&gt;

&lt;p&gt;Linux/Unix ecosystem-এ বিভিন্ন shell পাওয়া যায়, যেমন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ksh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zsh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;csh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;একটি গুরুত্বপূর্ণ বিষয় হলো:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shell এবং Terminal একই জিনিস নয়।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;একই Terminal application-এর মাধ্যমে বিভিন্ন shell ব্যবহার করা সম্ভব।&lt;/p&gt;




&lt;h2&gt;
  
  
  ৯. &lt;code&gt;ls&lt;/code&gt; দিলে আসলে কী হয়?
&lt;/h2&gt;

&lt;p&gt;এখন পুরো architecture-এর সবচেয়ে গুরুত্বপূর্ণ অংশে আসি।&lt;/p&gt;

&lt;p&gt;ধরো তুমি Terminal খুলে লিখলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আমাদের চোখে মনে হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → ls → Output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু ভিতরে আরও কয়েকটি layer কাজ করছে।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnl5tvjg1wxxme7bggx1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnl5tvjg1wxxme7bggx1b.png" alt="Linux Command Execution Flow" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  │
  ▼
Terminal
  │
  ▼
Shell
  │
  ▼
ls
  │
  ▼
Linux Kernel
  │
  ▼
File System / Storage
  │
  ▼
Kernel
  │
  ▼
ls
  │
  ▼
Shell
  │
  ▼
Terminal
  │
  ▼
User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই Linux command-line architecture বোঝার সবচেয়ে গুরুত্বপূর্ণ mental model।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১০. &lt;code&gt;ls&lt;/code&gt; command-এর complete journey
&lt;/h2&gt;

&lt;p&gt;ধাপে ধাপে দেখি।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 — User
&lt;/h3&gt;

&lt;p&gt;User keyboard থেকে লিখল:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2 — Terminal
&lt;/h3&gt;

&lt;p&gt;Terminal input গ্রহণ করল।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Shell
&lt;/h3&gt;

&lt;p&gt;Command shell-এর কাছে গেল।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 — Shell interpretation
&lt;/h3&gt;

&lt;p&gt;Shell বুঝল এটি &lt;code&gt;ls&lt;/code&gt; command।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5 — &lt;code&gt;ls&lt;/code&gt; program
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; executable program চালু হলো।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6 — Kernel interaction
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; প্রয়োজনীয় system functionality ব্যবহারের জন্য Kernel-এর সঙ্গে interact করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7 — File System / Storage
&lt;/h3&gt;

&lt;p&gt;Kernel filesystem/storage থেকে প্রয়োজনীয় information সংগ্রহ করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 8 — Result
&lt;/h3&gt;

&lt;p&gt;Result আবার ফিরে আসে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kernel
 ↓
ls
 ↓
Shell
 ↓
Terminal
 ↓
User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;শেষে Terminal screen-এ files এবং directories-এর list দেখা যায়।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১১. Kernel কী করে?
&lt;/h2&gt;

&lt;p&gt;এখন প্রশ্ন:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kernel কেন দরকার?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Computer-এর Hardware-এর মধ্যে রয়েছে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;SSD/HDD&lt;/li&gt;
&lt;li&gt;Network devices&lt;/li&gt;
&lt;li&gt;Keyboard&lt;/li&gt;
&lt;li&gt;Mouse&lt;/li&gt;
&lt;li&gt;Display&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এই Hardware resources সরাসরি সাধারণ user application পরিচালনা করে না।&lt;/p&gt;

&lt;p&gt;এখানে Linux Kernel গুরুত্বপূর্ণ ভূমিকা পালন করে।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USER
 │
 ▼
User-space Software
 │
 ▼
Linux Kernel
 │
 ▼
Hardware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kernel system-এর resources এবং hardware-এর সঙ্গে কাজ করে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১২. User Space এবং Kernel Space
&lt;/h2&gt;

&lt;p&gt;Linux architecture বোঝার জন্য User Space এবং Kernel Space-এর distinction গুরুত্বপূর্ণ।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────┐
│          USER SPACE          │
│                              │
│ Applications                 │
│ Terminal                     │
│ Shell                        │
│ GNU Coreutils                │
│ Libraries                    │
│ Other Utilities              │
│                              │
├──────────────────────────────┤
│         KERNEL SPACE         │
│                              │
│ Linux Kernel                 │
│ Process Management           │
│ Memory Management            │
│ File Systems                 │
│ Device Management            │
│                              │
├──────────────────────────────┤
│           HARDWARE           │
│                              │
│ CPU │ RAM │ Storage │ Devices│
└──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User-space-এর program প্রয়োজন অনুযায়ী Kernel-এর services ব্যবহার করে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১৩. Desktop Environment কেন দরকার?
&lt;/h2&gt;

&lt;p&gt;এখন আরেকটি গুরুত্বপূর্ণ প্রশ্ন:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminal কোথা থেকে পেলাম?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Operating system install করার পর আমরা যে graphical desktop দেখি—windows, menus, file manager, panels, graphical applications ইত্যাদি—এসবের বড় অংশ Desktop Environment-এর মাধ্যমে পাওয়া যায়।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft49ehshj527rx3dcwejp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft49ehshj527rx3dcwejp.png" alt="Desktop Environment" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;একটি Desktop Environment-এর মধ্যে থাকতে পারে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GUI&lt;/li&gt;
&lt;li&gt;Window Management&lt;/li&gt;
&lt;li&gt;File Manager&lt;/li&gt;
&lt;li&gt;Terminal&lt;/li&gt;
&lt;li&gt;Panels&lt;/li&gt;
&lt;li&gt;Menus&lt;/li&gt;
&lt;li&gt;Desktop tools&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ১৪. GNOME এবং KDE Plasma
&lt;/h2&gt;

&lt;p&gt;Linux ecosystem-এ একাধিক Desktop Environment ব্যবহার করা যায়।&lt;/p&gt;

&lt;p&gt;দুটি পরিচিত উদাহরণ:&lt;/p&gt;

&lt;h3&gt;
  
  
  GNOME
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GNOME
├── GNOME Terminal
├── File Manager
├── GUI
└── Window Management
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  KDE Plasma
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KDE Plasma
├── Konsole
├── File Manager
├── GUI
└── Window Management
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Desktop Environment
        │
   ┌────┴────┐
   ▼         ▼
 GNOME    KDE Plasma
   │         │
Terminal   Konsole
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Desktop Environment পরিবর্তন করলেও underlying Linux Kernel একই থাকতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৫. পুরো Linux Architecture একসঙ্গে
&lt;/h1&gt;

&lt;p&gt;এখন সবগুলো concept এক জায়গায় রাখলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         USER
                           │
                           ▼
              ┌──────────────────────┐
              │  DESKTOP ENVIRONMENT │
              │   GNOME / KDE        │
              └──────────┬───────────┘
                         │
                         ▼
              ┌──────────────────────┐
              │       TERMINAL       │
              │ GNOME Terminal       │
              │ Konsole              │
              └──────────┬───────────┘
                         │
                         ▼
              ┌──────────────────────┐
              │        SHELL         │
              │   Bash / Zsh / sh    │
              └──────────┬───────────┘
                         │
                         ▼
              ┌──────────────────────┐
              │    GNU COREUTILS     │
              │ ls / cp / rm / cat   │
              └──────────┬───────────┘
                         │
                         ▼
              ┌──────────────────────┐
              │     LINUX KERNEL     │
              │ Process / Memory /   │
              │ Filesystem / Devices │
              └──────────┬───────────┘
                         │
                         ▼
              ┌──────────────────────┐
              │       HARDWARE       │
              │ CPU / RAM / Storage  │
              └──────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সবচেয়ে গুরুত্বপূর্ণ mental model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
Terminal
 ↓
Shell
 ↓
Utility
 ↓
Kernel
 ↓
Hardware / Storage
 ↓
Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৬. Final Takeaway
&lt;/h1&gt;

&lt;p&gt;Linux-এর command line বাইরে থেকে খুব simple মনে হয়।&lt;/p&gt;

&lt;p&gt;তুমি শুধু লিখছো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু এর পিছনে কাজ করছে একাধিক software layer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
Terminal
 ↓
Shell
 ↓
GNU Utility
 ↓
Kernel
 ↓
Hardware / File System
 ↓
Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর Linux distribution-এর বড় picture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Linux Distribution
│
├── Linux Kernel
├── GNU / User-space Tools
├── Libraries
├── Package Manager
├── System Services
├── Desktop Environment
└── Applications
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই relationship-গুলো পরিষ্কারভাবে বুঝে ফেলতে পারলে Linux command line, filesystem, processes এবং পরবর্তী Docker-related concepts শেখার foundation অনেক শক্ত হয়ে যায়।&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ডকার শেখার আগে লিনাক্স বেসিকস: লিনাক্স কি আসলেই একটি অপারেটিং সিস্টেম? 🐧</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:11:54 +0000</pubDate>
      <link>https://dev.to/ragibcs/ddkaar-shekhaar-aage-linaaks-besiks-linaaks-ki-aaslei-ektti-apaarettin-sisttem-3he0</link>
      <guid>https://dev.to/ragibcs/ddkaar-shekhaar-aage-linaaks-besiks-linaaks-ki-aaslei-ektti-apaarettin-sisttem-3he0</guid>
      <description>&lt;p&gt;ডকার (Docker) ইকোসিস্টেম নিয়ে কাজ করতে গেলে একটি বিষয় খুব দ্রুত পরিষ্কার হয়ে যায়— ডকার ইঞ্জিন মূলত লিনাক্স অপারেটিং সিস্টেমের উপর রান করে। যদি আপনার হোস্ট ওএস (Host OS) উইন্ডোজ বা ম্যাক হয়, তবে ডকার ডেস্কটপ ব্যাকএন্ডে একটি ভার্চুয়াল মেশিন বা লিনাক্স কার্নেল তৈরি করে তার উপর রান হয়। &lt;/p&gt;

&lt;p&gt;এর মানে হলো, ডকারকে খুব ভালোভাবে বুঝতে হলে এর পেছনের ফাউন্ডেশন অর্থাৎ &lt;strong&gt;লিনাক্স (Linux)&lt;/strong&gt; সম্পর্কে ক্লিয়ার ধারণা থাকা জরুরি। বিল্ডিংয়ের ফাউন্ডেশন যেমন মজবুত হওয়া দরকার, ডকার বা ডেভপস (DevOps) জার্নিতে লিনাক্স কার্নেলের আর্কিটেকচার বোঝাও ঠিক তেমনই গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h2&gt;
  
  
  লিনাক্স (Linux) কি একটি অপারেটিং সিস্টেম?
&lt;/h2&gt;

&lt;p&gt;আমরা কথায় কথায় বলি "লিনাক্স অপারেটিং সিস্টেম", কিন্তু সত্যি বলতে &lt;strong&gt;লিনাক্স কখনোই কোনো অপারেটিং সিস্টেম ছিল না!&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;লিনাক্স হচ্ছে মূলত একটি &lt;strong&gt;কার্নেল (Kernel)&lt;/strong&gt;। ১৯৯১ সালে 'লিনাস টরভল্ডস' (Linus Torvalds) নামক একজন কম্পিউটার সায়েন্টিস্ট এই কার্নেলটির কোড লেখেন এবং পরবর্তীতে এটিকে ওপেন-সোর্স করে দেন। &lt;/p&gt;

&lt;p&gt;যেহেতু লিনাক্স শুধু একটি কার্নেল, তাই এটিকে ব্যবহার উপযোগী অপারেটিং সিস্টেমে রূপান্তর করতে আরও অনেক কিছুর প্রয়োজন হয়। আর তখনই আসে &lt;strong&gt;লিনাক্স ডিস্ট্রিবিউশন (Linux Distribution)&lt;/strong&gt; বা সংক্ষেপে &lt;strong&gt;ডিস্ট্রো (Distro)&lt;/strong&gt; এর ধারণা।&lt;/p&gt;




&lt;h2&gt;
  
  
  লিনাক্স ডিস্ট্রিবিউশন (Linux Distro) কী?
&lt;/h2&gt;

&lt;p&gt;একটি সম্পূর্ণ বা কমপ্লিট অপারেটিং সিস্টেম তৈরি করতে একটি কোর কার্নেলের সাথে আরও বেশ কিছু কম্পোনেন্ট যুক্ত করতে হয়। একটি কমপ্লিট লিনাক্স ডিস্ট্রিবিউশনে সাধারণত নিচের ৬টি জিনিস থাকে:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Linux Kernel:&lt;/strong&gt; সিস্টেমের কোর বা হার্ট।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GNU Utilities:&lt;/strong&gt; সিস্টেমের ব্যাসিক কমান্ড ও টুলস।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package Manager:&lt;/strong&gt; সফটওয়্যার ইনস্টল, আপডেট বা ডিলিট করার মাধ্যম (যেমন: &lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;yum&lt;/code&gt;)।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Init System:&lt;/strong&gt; সিস্টেম বুট হওয়ার পর প্রসেস ম্যানেজ করার সিস্টেম।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop Environment:&lt;/strong&gt; গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI)। &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other Tools &amp;amp; Configurations:&lt;/strong&gt; অন্যান্য প্রয়োজনীয় টুলস এবং কনফিগারেশন ফাইল।&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;এই সবগুলো কম্পোনেন্ট যখন লিনাক্স কার্নেলের সাথে যুক্ত হয়, তখনই আমরা উবুন্টু (Ubuntu), ফেডোরা (Fedora) বা কালি লিনাক্সের (Kali Linux) মতো একটি কমপ্লিট অপারেটিং সিস্টেম বা ডিস্ট্রিবিউশন পাই।&lt;/p&gt;

&lt;p&gt;নিচের ডায়াগ্রামটি দেখলে লিনাক্স ডিস্ট্রিবিউশনের আর্কিটেকচার আরও ক্লিয়ার হবে:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa4mydfp3j1il9b9n1bul.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa4mydfp3j1il9b9n1bul.jpg" alt="Modern Linux OS Architecture" width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Base System এবং Derived System
&lt;/h2&gt;

&lt;p&gt;লিনাক্সের দুনিয়ায় অনেক ডিস্ট্রিবিউশন রয়েছে। এতগুলো ডিস্ট্রো কীভাবে এলো? এর পেছনে রয়েছে Base এবং Derived সিস্টেমের কনসেপ্ট।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;বেস সিস্টেম (Base System):&lt;/strong&gt;&lt;br&gt;
যেসব অপারেটিং সিস্টেম একদম স্ক্র্যাচ থেকে কোর কার্নেল ও অন্যান্য কম্পোনেন্ট দিয়ে তৈরি করা হয়, সেগুলো হলো বেস সিস্টেম। যেমন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debian (ডেবিয়ান ফ্যামিলি)&lt;/li&gt;
&lt;li&gt;Red Hat (রেড হ্যাট ফ্যামিলি)&lt;/li&gt;
&lt;li&gt;Alpine (অ্যালপাইন ফ্যামিলি)&lt;/li&gt;
&lt;li&gt;Arch Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ডিরাইভড সিস্টেম (Derived System):&lt;/strong&gt;&lt;br&gt;
যখন একটি স্টেবল বেস সিস্টেমকে ভিত্তি করে নতুন কোনো অপারেটিং সিস্টেম বানানো হয়, তখন তাকে ডিরাইভড সিস্টেম বলে। &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;যেমন, &lt;strong&gt;Debian&lt;/strong&gt; হলো একটি বেস সিস্টেম। এই ডেবিয়ানের প্যাকেজ ম্যানেজার ও ইউটিলিটি ব্যবহার করে এবং নতুন ডেস্কটপ এনভায়রনমেন্ট ও কনফিগারেশন যোগ করে তৈরি করা হয়েছে &lt;strong&gt;Ubuntu&lt;/strong&gt;। &lt;/li&gt;
&lt;li&gt;আবার Ubuntu-কে বেস করে তৈরি করা হয়েছে &lt;strong&gt;Linux Mint&lt;/strong&gt;, &lt;strong&gt;Pop!_OS&lt;/strong&gt;, &lt;strong&gt;Zorin OS&lt;/strong&gt; ইত্যাদি।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এ কারণেই যারা উবুন্টু ব্যবহার করেন, তারা সফটওয়্যার ইনস্টলের জন্য &lt;code&gt;apt&lt;/code&gt; বা &lt;code&gt;apt-get&lt;/code&gt; প্যাকেজ ম্যানেজার ব্যবহার করেন, যা মূলত ডেবিয়ানের। অন্যদিকে Red Hat ফ্যামিলির ডিস্ট্রোগুলোতে (যেমন: CentOS, Fedora) &lt;code&gt;yum&lt;/code&gt; বা &lt;code&gt;rpm&lt;/code&gt; কাজ করে। আবার Alpine লিনাক্সে কাজ করে &lt;code&gt;apk&lt;/code&gt; এবং Arch লিনাক্সে &lt;code&gt;pacman&lt;/code&gt;। &lt;/p&gt;




&lt;h2&gt;
  
  
  শেষ কথা
&lt;/h2&gt;

&lt;p&gt;লিনাক্সের এই বিষয়গুলো (যেমন: প্যাকেজ ম্যানেজার কী, ইনভায়রনমেন্ট কীভাবে কাজ করে) গভীরভাবে বুঝতে পারলে ডকার শেখা পানির মতো সহজ হয়ে যাবে। ডকারফাইল (Dockerfile) লেখা বা কন্টেইনার ইমেজ তৈরি করার সময় লিনাক্সের এই বেসিক জ্ঞানগুলোই আপনাকে ম্যাজিকের মতো সাহায্য করবে!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ডকার ইকোসিস্টেম (Docker Ecosystem): ডকার আসলে কী এবং কীভাবে এর অভ্যন্তরীণ চেইন কাজ করে?</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Tue, 25 Aug 2026 16:52:27 +0000</pubDate>
      <link>https://dev.to/ragibcs/ddkaar-ikosisttem-docker-ecosystem-ddkaar-aasle-kii-ebn-kiibhaabe-er-abhyntriinn-cein-kaaj-kre-4oj7</link>
      <guid>https://dev.to/ragibcs/ddkaar-ikosisttem-docker-ecosystem-ddkaar-aasle-kii-ebn-kiibhaabe-er-abhyntriinn-cein-kaaj-kre-4oj7</guid>
      <description>&lt;p&gt;অনেকেই মনে করেন ডকার (Docker) সাধারণ একটি টুল, সফটওয়্যার বা ছোটখাটো কোনো অ্যাপ্লিকেশন। কিন্তু আপনি যদি ডকারের গভীরে গিয়ে বুঝতে চান, তবে প্রথমেই এই ভুল ধারণাটি মাথা থেকে ঝেড়ে ফেলতে হবে। &lt;strong&gt;ডকার কোনো একক টুল বা সফটওয়্যার নয়—ডকার হচ্ছে একটি পূর্ণাঙ্গ প্ল্যাটফর্ম (Platform) বা ইকোসিস্টেম (Ecosystem)।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;আজকের ব্লগে আমরা সহজ বাংলা ভাষায় বিস্তারিত জানব ডকার ইকোসিস্টেম কী, এর ভেতরের প্রতিটি কম্পোনেন্ট কীভাবে একে অপরের সাথে চেইনের মতো যুক্ত হয়ে কাজ করে এবং টার্মিনালে যখন আমরা &lt;code&gt;docker run hello-world&lt;/code&gt; লিখি, তখন ঠিক কী কী ঘটে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ১. ইকোসিস্টেম (Ecosystem) বা প্ল্যাটফর্ম কী?
&lt;/h2&gt;

&lt;p&gt;সহজ কথায়, যখন একাধিক উপাদান বা সত্তা একে অপরের ওপর নির্ভর করে একটি অবিচ্ছেদ্য চেইন বা শৃঙ্খল তৈরি করে কাজ করে, তখন তাকে &lt;strong&gt;ইকোসিস্টেম&lt;/strong&gt; বলে। &lt;/p&gt;

&lt;p&gt;প্রকৃতির খাদ্যশৃঙ্খলের (Food Chain) একটি চমৎকার উদাহরণ দেওয়া যাক:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;কেঁচো&lt;/strong&gt; → কেঁচো খায় &lt;strong&gt;হাঁস&lt;/strong&gt; → হাঁসকে খায় &lt;strong&gt;সাপ&lt;/strong&gt; → সাপকে খায় &lt;strong&gt;বেজি&lt;/strong&gt; → বেজিকে খায় &lt;strong&gt;ইগল&lt;/strong&gt; → ইগলকে আবার শিকার করে &lt;strong&gt;মানুষ&lt;/strong&gt;।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে প্রত্যেকে প্রত্যেকের সাথে একটি চেইনে যুক্ত। টেকনোলজির দুনিয়াতেও যখন অনেকগুলো স্বতন্ত্র কম্পোনেন্ট (টুলস, ইঞ্জিন, ডেটাবেজ, ভার্চুয়াল মেশিন) একসাথে একটি চেইনের মাধ্যমে সম্পূর্ণ পরিবেশ গড়ে তোলে, তখন টেকনিক্যাল ভাষায় তাকে আমরা বলি &lt;strong&gt;প্ল্যাটফর্ম বা ইকোসিস্টেম&lt;/strong&gt;।&lt;/p&gt;




&lt;h2&gt;
  
  
  ২. ডকার প্ল্যাটফর্মের মূল কম্পোনেন্টসমূহ
&lt;/h2&gt;

&lt;p&gt;ডকার ইকোসিস্টেম মূলত নিচের প্রধান কম্পোনেন্টগুলোর সমন্বয়ে গঠিত:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Docker Client (CLI):&lt;/strong&gt; এটি ডকারের ক্লায়েন্ট বা কমান্ড লাইন ইন্টারফেস। ব্যবহারকারী হিসেবে আমরা টার্মিনালে যেসব ডকার কমান্ড (যেমন: &lt;code&gt;docker run&lt;/code&gt;, &lt;code&gt;docker build&lt;/code&gt;, &lt;code&gt;docker pull&lt;/code&gt;) লিখি, ডকার ক্লায়েন্ট সেই কমান্ডগুলো গ্রহণ করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Engine (ডকার ইঞ্জিন):&lt;/strong&gt; ডকারের মূল চালিকাশক্তি। এর ভেতরে থাকে ব্যাকগ্রাউন্ড সার্ভিস &lt;code&gt;dockerd&lt;/code&gt; (Docker Daemon) এবং কন্টেইনার রানটাইম (&lt;code&gt;containerd&lt;/code&gt;, &lt;code&gt;runc&lt;/code&gt;)।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Desktop (ডকার ডেস্কটপ):&lt;/strong&gt; ম্যাক (macOS) বা উইন্ডোজ (Windows) ব্যবহারকারীদের জন্য ডকার ডেস্কটপ একটি লাইটওয়েট লিনাক্স ভার্চুয়াল মেশিন (Linux VM) তৈরি করে দেয়, যাতে লিনাক্স কার্নেল ব্যবহারের মাধ্যমে ডকার ইঞ্জিন কাজ করতে পারে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Image (ডকার ইমেজ):&lt;/strong&gt; একটি কন্টেইনারের ব্লুপ্রিন্ট বা স্ন্যাপশট। ইমেজ থেকেই কন্টেইনার তৈরি করা যায়, আবার কন্টেইনার থেকে নতুন ইমেজ তৈরি করা সম্ভব।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Hub (ডকার হাব):&lt;/strong&gt; এটি ডকারের একটি কেন্দ্রীয় ক্লাউড রেজিস্ট্রি বা ডেটাবেজ। এখানে বিশ্বজুড়ে তৈরি হওয়া সব ধরনের ইমেজ (যেমন: Ubuntu, Python, Golang, Redis, PostgreSQL, Hello-World) সংরক্ষিত থাকে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Compose (ডকার কম্পোজ):&lt;/strong&gt; একাধিক কন্টেইনারবিশিষ্ট জটিল অ্যাপ্লিকেশন সহজে কনফিগার ও রান করার টুল।&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ৩. ডকার ইকোসিস্টেম আর্কিটেকচার ডায়াগ্রাম
&lt;/h2&gt;

&lt;p&gt;নিচে ডকার ইকোসিস্টেমের অভ্যন্তরীণ প্রবাহ ও উপাদানগুলোর সংযোগ দেখানো হলো:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0v0xynmy5zbxazjmfp4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0v0xynmy5zbxazjmfp4.png" alt="Docker Ecosystem Architecture Diagram" width="799" height="412"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ৪. &lt;code&gt;docker run hello-world&lt;/code&gt; দিলে ভেতরে কী ঘটে? (Step-by-Step Flow)
&lt;/h2&gt;

&lt;p&gt;ডকার ইকোসিস্টেমের চেইন কীভাবে ধাপে ধাপে কাজ করে, তা একটি প্র্যাকটিক্যাল কমান্ডের মাধ্যমে বোঝা যাক:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যখনই আপনি এই কমান্ডটি টার্মিনালে রান করবেন, ব্যাকগ্রাউন্ডে নিচের চেইনটি বাস্তবায়িত হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[User / Terminal]
       │
       ▼ (Command: docker run hello-world)
[Docker Client / CLI]
       │
       ▼ (REST API Request)
[Docker Daemon: dockerd]
       │
       ▼
[Container Runtime: containerd]
       ├───► (Local Cache Check: ইমেজটি কি লোকালি আছে?)
       │           │
       │           ├─► [নাই] ──► [Docker Hub] (Pull Image -&amp;gt; Cache locally)
       │           └─► [আছে] ──► (সরাসরি ইমেজ ব্যবহার করো)
       │
       ▼
[Low-Level Runtime: runc]
       │
       ▼ (Kernel Features: Namespaces &amp;amp; Cgroups)
[Linux Kernel]
       │
       ▼ (Creates isolated process)
[Running Container: Hello-World]
       │
       ▼ (Response Flow back: Kernel -&amp;gt; runc -&amp;gt; containerd -&amp;gt; dockerd -&amp;gt; Docker CLI)
[Terminal Output: "Hello from Docker!"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  বিস্তারিত ধাপসমূহ:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;কমান্ড গ্রহণ:&lt;/strong&gt; Docker CLI কমান্ডটি গ্রহণ করে REST API রিকোয়েস্টের মাধ্যমে ডকার ইঞ্জিনের ব্যাকগ্রাউন্ড ডেমন &lt;code&gt;dockerd&lt;/code&gt;-এর কাছে পাঠায়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;কন্টেইনার ডেমনের কাজ:&lt;/strong&gt; &lt;code&gt;dockerd&lt;/code&gt; সার্বক্ষণিক রিকোয়েস্ট হ্যান্ডেল করে এবং কমান্ডটি হাই-লেভেল কন্টেইনার রানটাইম &lt;code&gt;containerd&lt;/code&gt;-এর কাছে হস্তান্তর করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;লোকাল ক্যাশ যাচাই:&lt;/strong&gt; &lt;code&gt;containerd&lt;/code&gt; চেক করে তার লোকাল স্টোরেজে বা ক্যাশে &lt;code&gt;hello-world&lt;/code&gt; ইমেজটি সংরক্ষিত আছে কি না।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ডকার হাব থেকে পুল করা (যদি লোকালি না থাকে):&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;প্রথমবার রান করার সময় লোকাল ক্যাশে ইমেজটি থাকে না। তাই টার্মিনালে মেসেজ আসে: &lt;code&gt;Unable to find image 'hello-world:latest' locally&lt;/code&gt;।&lt;/li&gt;
&lt;li&gt;তখন &lt;code&gt;containerd&lt;/code&gt; ডকার হাবে (Docker Hub) রিকোয়েস্ট পাঠিয়ে ইমেজটি ডাউনলোড (Pull) করে এবং লোকাল মেশিনে ক্যাশ/স্টোর করে রাখে।&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;লো-লেভেল রানটাইম ও কার্নেল কমিউনিকেশন:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;containerd&lt;/code&gt; তখন লো-লেভেল কন্টেইনার রানটাইম &lt;code&gt;runc&lt;/code&gt;-কে বলে কন্টেইনার তৈরি করতে।&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;runc&lt;/code&gt; সরাসরি অপারেটিং সিস্টেমের &lt;strong&gt;Linux Kernel&lt;/strong&gt;-এর সাথে কথা বলে:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Namespaces:&lt;/strong&gt; কন্টেইনারের জন্য সম্পূর্ণ পৃথক ও আইসোলেটেড একটি পরিবেশ তৈরি করে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cgroups (Control Groups):&lt;/strong&gt; কন্টেইনারটি সর্বোচ্চ কতটুকু CPU, RAM বা ডিস্ক ব্যবহার করতে পারবে তার লিমিট নির্ধারণ করে দেয়।&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;প্রসেস এক্সিকিউশন ও রেসপন্স ব্যাক:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;কার্নেলের ভেতর একটি আইসোলেটেড প্রসেস চালু হয় এবং &lt;code&gt;hello-world&lt;/code&gt; প্রোগ্রামটি রান করে।&lt;/li&gt;
&lt;li&gt;আউটপুট তৈরি হলে তা নিচ থেকে ওপরে চেইনের মাধ্যমে ফিরে যায়: &lt;strong&gt;Kernel $\rightarrow$ runc $\rightarrow$ containerd $\rightarrow$ dockerd $\rightarrow$ Docker CLI&lt;/strong&gt;।&lt;/li&gt;
&lt;li&gt;পরিশেষে Docker CLI আমাদের টার্মিনালে সুন্দর মেসেজ প্রিন্ট করে দেখায়:
&amp;gt; &lt;em&gt;"Hello from Docker! This message shows that your installation appears to be working correctly."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ৫. দ্বিতীয়বার একই কমান্ড রান করলে কী হয়?
&lt;/h2&gt;

&lt;p&gt;আপনি যখন দ্বিতীয়বার পুনরায় &lt;code&gt;docker run hello-world&lt;/code&gt; কমান্ডটি রান করবেন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;containerd&lt;/code&gt; লোকাল ক্যাশে দেখবে যে &lt;code&gt;hello-world&lt;/code&gt; ইমেজটি ইতিমধ্যে স্টোর করা আছে।&lt;/li&gt;
&lt;li&gt;ফলে এটি আর ডকার হাবে যাবে না এবং &lt;code&gt;Unable to find image...&lt;/code&gt; মেসেজটিও আর আসবে না।&lt;/li&gt;
&lt;li&gt;লোকাল ইমেজ থেকেই সরাসরি &lt;code&gt;runc&lt;/code&gt; ও কার্নেলের মাধ্যমে এক পলকে নতুন একটি কন্টেইনার তৈরি হয়ে মুহূর্তেই আউটপুট চলে আসবে।&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ৬. ম্যাক বা উইন্ডোজে লিনাক্স কার্নেল কীভাবে আসে?
&lt;/h2&gt;

&lt;p&gt;কন্টেইনার প্রযুক্তির মূল চাবিকাঠি হলো লিনাক্স কার্নেলের ফিচার (Namespaces এবং Control Groups)। ম্যাক (macOS) বা উইন্ডোজ (Windows) এ যেহেতু নিজস্ব লিনাক্স কার্নেল থাকে না, তাই &lt;strong&gt;Docker Desktop&lt;/strong&gt; ব্যাকগ্রাউন্ডে একটি লাইটওয়েট লিনাক্স ভার্চুয়াল মেশিন (Linux VM) চালায়। এই ভিএম-এর লিনাক্স কার্নেলের সাথেই ডকার ইঞ্জিন যুক্ত হয়ে পুরো ইকোসিস্টেমের কার্যকারিতা বজায় রাখে।&lt;/p&gt;




&lt;h2&gt;
  
  
  এক নজরে মূল পয়েন্টগুলো:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ডকার কী?&lt;/strong&gt; ডকার কোনো সাধারণ সফটওয়্যার বা টুল নয়; এটি একটি &lt;strong&gt;প্ল্যাটফর্ম / ইকোসিস্টেম&lt;/strong&gt;।&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;চেইন কাঠামো:&lt;/strong&gt; &lt;code&gt;Docker CLI&lt;/code&gt; → &lt;code&gt;dockerd&lt;/code&gt; → &lt;code&gt;containerd&lt;/code&gt; → &lt;code&gt;Docker Hub / Local Cache&lt;/code&gt; → &lt;code&gt;runc&lt;/code&gt; → &lt;code&gt;Linux Kernel (Namespace &amp;amp; Cgroups)&lt;/code&gt; → &lt;code&gt;Container&lt;/code&gt;।&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
