<?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>Mental Health Score Prediction Project — সম্পূর্ণ Bangla Explanation</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Sun, 20 Sep 2026 08:02:19 +0000</pubDate>
      <link>https://dev.to/ragibcs/mental-health-score-prediction-project-smpuurnn-bangla-explanation-4bpp</link>
      <guid>https://dev.to/ragibcs/mental-health-score-prediction-project-smpuurnn-bangla-explanation-4bpp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;এই guide-টি তোমার দেওয়া video transcript এবং &lt;code&gt;Mental-Health-Score-main&lt;/code&gt; project-এর notebook, FastAPI backend, frontend JavaScript এবং deployment flow দেখে তৈরি করা হয়েছে। লক্ষ্য হলো তুমি যেন শুধু code copy না করো, বরং &lt;strong&gt;প্রতিটি step কেন করা হচ্ছে, কোন concept কোথায় লাগছে, input থেকে prediction পর্যন্ত data কীভাবে যাচ্ছে—সব পরিষ্কারভাবে বুঝতে পারো।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  সূচিপত্র
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Project Overview&lt;/li&gt;
&lt;li&gt;End-to-End Architecture&lt;/li&gt;
&lt;li&gt;Problem Statement ও Regression&lt;/li&gt;
&lt;li&gt;Dataset বোঝা&lt;/li&gt;
&lt;li&gt;Libraries&lt;/li&gt;
&lt;li&gt;Data Loading ও Initial Inspection&lt;/li&gt;
&lt;li&gt;Missing Value, Duplicate, Data Types&lt;/li&gt;
&lt;li&gt;Descriptive Statistics ও Invalid Value&lt;/li&gt;
&lt;li&gt;EDA — কেন এবং কীভাবে&lt;/li&gt;
&lt;li&gt;Target Distribution&lt;/li&gt;
&lt;li&gt;Correlation Heatmap&lt;/li&gt;
&lt;li&gt;Stress vs Mental Health&lt;/li&gt;
&lt;li&gt;Social Media Usage vs Mental Health&lt;/li&gt;
&lt;li&gt;Sleep vs Mental Health&lt;/li&gt;
&lt;li&gt;Platform Count Plot&lt;/li&gt;
&lt;li&gt;Outlier ও IQR&lt;/li&gt;
&lt;li&gt;Data Cleaning&lt;/li&gt;
&lt;li&gt;Skewness&lt;/li&gt;
&lt;li&gt;Feature Engineering&lt;/li&gt;
&lt;li&gt;Country Grouping / High Cardinality&lt;/li&gt;
&lt;li&gt;Encoding Strategy&lt;/li&gt;
&lt;li&gt;Train-Test Split ও Data Leakage&lt;/li&gt;
&lt;li&gt;Pipeline এবং ColumnTransformer&lt;/li&gt;
&lt;li&gt;Preprocessing Pipelines&lt;/li&gt;
&lt;li&gt;Linear Regression&lt;/li&gt;
&lt;li&gt;Random Forest&lt;/li&gt;
&lt;li&gt;Overfitting / Underfitting&lt;/li&gt;
&lt;li&gt;Hyperparameter Tuning&lt;/li&gt;
&lt;li&gt;RandomizedSearchCV ও Cross Validation&lt;/li&gt;
&lt;li&gt;Model Evaluation — R², MAE, RMSE&lt;/li&gt;
&lt;li&gt;Actual Project Results&lt;/li&gt;
&lt;li&gt;Model Saving with Joblib&lt;/li&gt;
&lt;li&gt;FastAPI Backend&lt;/li&gt;
&lt;li&gt;Pydantic Validation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/predict&lt;/code&gt; Endpoint&lt;/li&gt;
&lt;li&gt;Frontend — HTML/CSS/JavaScript&lt;/li&gt;
&lt;li&gt;Frontend Validation ও API Call&lt;/li&gt;
&lt;li&gt;Result Gauge ও UI State&lt;/li&gt;
&lt;li&gt;CORS&lt;/li&gt;
&lt;li&gt;Deployment on Render&lt;/li&gt;
&lt;li&gt;Complete Request Flow&lt;/li&gt;
&lt;li&gt;Important Project Mismatches / Bugs / Improvements&lt;/li&gt;
&lt;li&gt;Viva / Interview Questions&lt;/li&gt;
&lt;li&gt;Final Mental Model&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  1. Project Overview
&lt;/h1&gt;

&lt;p&gt;এই project-এর মূল কাজ হলো একজন student-এর social media habit, study habit, sleep, physical activity, stress level এবং কিছু demographic information ব্যবহার করে একটি numerical &lt;strong&gt;Mental Health Score&lt;/strong&gt; predict করা।&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;Student-এর তথ্য
      ↓
Machine Learning Model
      ↓
Mental Health Score
&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;Age                  = 23
Gender               = Female
Country              = Bangladesh
Academic Level       = Undergraduate
Most Used Platform   = Instagram
Purpose              = Entertainment
Daily Usage          = 6.5 hours
Daily Unlocks        = 90
Study Hours          = 4
Physical Activity    = 1 hour
Sleep                = 6 hours
Stress               = High
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Model output দিতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Predicted Mental Health Score = 5.82 / 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে 5.82 শুধু একটি numerical prediction। এটি কোনো clinical diagnosis নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. কেন এই project শুধু “ML notebook project” না
&lt;/h1&gt;

&lt;p&gt;ভিডিওতে শুরুতেই emphasize করা হয়েছে যে এটা শুধু Jupyter Notebook-এ model train করার project না। এখানে পুরো end-to-end workflow আছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dataset
  ↓
EDA + Cleaning
  ↓
Feature Engineering
  ↓
Preprocessing
  ↓
Machine Learning
  ↓
Model Evaluation
  ↓
Model Save (.pkl)
  ↓
FastAPI Backend
  ↓
Pydantic Validation
  ↓
HTML + CSS + JavaScript Frontend
  ↓
Deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ তুমি এক project-এ Data Science + Machine Learning + Backend + Frontend + Deployment—সবকিছুর সংযোগ দেখছ।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Problem Statement — Regression কেন?
&lt;/h1&gt;

&lt;p&gt;Project-এর target column:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;এটি category নয়; এটি একটি continuous numerical value।&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;3.8
5.4
7.2
8.9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই এটি &lt;strong&gt;Regression Problem&lt;/strong&gt;।&lt;/p&gt;

&lt;h2&gt;
  
  
  Classification হলে কেমন হতো?
&lt;/h2&gt;

&lt;p&gt;যদি target হতো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Healthy / Unhealthy
&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;Low / Medium / High Risk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে problem classification হতো।&lt;/p&gt;

&lt;h2&gt;
  
  
  Regression-এর সাধারণ algorithm
&lt;/h2&gt;

&lt;p&gt;ভিডিওতে basic হিসেবে বলা হয়েছে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linear Regression&lt;/li&gt;
&lt;li&gt;KNN Regressor&lt;/li&gt;
&lt;li&gt;Decision Tree Regressor&lt;/li&gt;
&lt;li&gt;Random Forest Regressor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এই project-এ মূল comparison:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linear Regression&lt;/li&gt;
&lt;li&gt;Random Forest&lt;/li&gt;
&lt;li&gt;Tuned Random Forest&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  4. Dataset
&lt;/h1&gt;

&lt;p&gt;Dataset file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Student Social Media And Mental Health Impact.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notebook অনুযায়ী dataset-এর shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5000 rows × 13 columns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ 5000 student এবং 13টি columns।&lt;/p&gt;

&lt;p&gt;Target বাদ দিলে 12টি input feature-এর ধারণা পাওয়া যায়।&lt;/p&gt;

&lt;p&gt;প্রধান columns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Age
Gender
Country
Academic_Level
Most_Used_Platform
Purpose_Of_Use
Avg_Daily_Usage_Hours
Daily_Unlocks
Study_Hours
Physical_Activity_Hours
Sleep_Hours_Per_Night
Stress_Level
Mental_Health_Score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Input vs Target
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Input Features (X)
        ↓
Machine Learning Algorithm
        ↓
Target (y)
&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 python"&gt;&lt;code&gt;&lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;student&lt;/span&gt; &lt;span class="n"&gt;information&lt;/span&gt;

&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Mental_Health_Score&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  5. Libraries Import
&lt;/h1&gt;

&lt;p&gt;Notebook শুরু হয় data manipulation ও visualization libraries দিয়ে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  NumPy
&lt;/h2&gt;

&lt;p&gt;Numerical operation-এর জন্য। যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log1p&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pandas
&lt;/h2&gt;

&lt;p&gt;Tabular data নিয়ে কাজ করার জন্য:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Matplotlib
&lt;/h2&gt;

&lt;p&gt;Graph/plot তৈরির foundation library।&lt;/p&gt;

&lt;h2&gt;
  
  
  Seaborn
&lt;/h2&gt;

&lt;p&gt;Statistical visualization সহজ ও সুন্দরভাবে করতে ব্যবহৃত হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;histplot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;heatmap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;boxplot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scatterplot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;countplot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ভিডিওতে একটি ভালো practice বলা হয়েছে: সব library শুরুতে randomly import না করে প্রয়োজন অনুযায়ী import করা যায়। তবে grouped imports readability বাড়ায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Dataset Load
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Student Social Media And Mental Health Impact.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&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 plaintext"&gt;&lt;code&gt;CSV File
   ↓
pandas read_csv
   ↓
DataFrame
   ↓
df variable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন &lt;code&gt;df&lt;/code&gt;-এর মধ্যে পুরো dataset আছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Shape Check
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&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;(5000, 13)
&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;5000 rows
13 columns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি dataset understand করার প্রথম basic step।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. First 5 Rows
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;head()&lt;/code&gt; default 5 rows দেখায়।&lt;/p&gt;

&lt;p&gt;কেন দরকার?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Column name ঠিক আছে কি না&lt;/li&gt;
&lt;li&gt;Data কেমন format-এ আছে&lt;/li&gt;
&lt;li&gt;String/numeric mix আছে কি না&lt;/li&gt;
&lt;li&gt;Weird value চোখে পড়ে কি না&lt;/li&gt;
&lt;li&gt;Target কোথায় আছে&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;Age Gender Country ... Stress_Level Mental_Health_Score
22  Female India  ... Medium        7.2
24  Male   USA    ... High          5.9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  9. Missing Values
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isnull&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি প্রতিটি column-এ কতটি null/missing value আছে দেখায়।&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;Age                   0
Gender                0
Sleep_Hours           5
Stress_Level          2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Project dataset মোটামুটি clean।&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-world data-তে কী হতে পারে?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Age = NaN
Sleep = NaN
Country = empty
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তখন imputation দরকার হতে পারে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Numeric missing value example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Age missing → median age দিয়ে fill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Categorical missing value example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Country missing → "Unknown" বা most frequent category
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ভিডিওতে emphasize করা হয়েছে Kaggle dataset অনেক সময় pre-cleaned হয়; real-world raw data সাধারণত অনেক messy হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Duplicate Rows
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;duplicated&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Duplicate মানে একই row একাধিকবার আছে।&lt;/p&gt;

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

&lt;p&gt;ধরো একই student record 20 বার duplicate আছে। তাহলে model মনে করতে পারে ওই pattern অনেক বেশি important।&lt;/p&gt;

&lt;p&gt;সাধারণ fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop_duplicates&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notebook-এর markdown-এ zero duplicate বলা থাকলেও actual execution/history-তে transcript-এর একটি অংশে duplicate count নিয়ে mismatch দেখা যায়। তাই নিজের run-এর output-কে source of truth ধরবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  11. &lt;code&gt;df.info()&lt;/code&gt; — Data Type বোঝা
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখান থেকে জানতে পারি:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Column names&lt;/li&gt;
&lt;li&gt;Non-null count&lt;/li&gt;
&lt;li&gt;Data types&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;Age                  int64
Gender               object
Country              object
Study_Hours          float64
Stress_Level         object
Mental_Health_Score  float64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;object&lt;/code&gt; মানে কী?
&lt;/h2&gt;

&lt;p&gt;Pandas-এ &lt;code&gt;object&lt;/code&gt; প্রায়ই string/text data বোঝায়।&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;Male
Female
Instagram
Facebook
High
Low
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Machine Learning model সরাসরি text বোঝে না। তাই categorical text feature encode করতে হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  12. &lt;code&gt;df.describe()&lt;/code&gt; — Descriptive Statistics
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Numerical columns-এর জন্য দেয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;count
mean
std
min
25%
50%
75%
max
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানেই project-এর একটি বাস্তব data issue ধরা পড়ে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Physical Activity-এর invalid value
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Physical_Activity_Hours min = -0.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটা physically impossible। মানুষ negative hour exercise করতে পারে না।&lt;/p&gt;

&lt;p&gt;তাই এটি real observation না, data-entry error।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. EDA কী?
&lt;/h1&gt;

&lt;p&gt;EDA = Exploratory Data Analysis&lt;/p&gt;

&lt;p&gt;EDA-এর উদ্দেশ্য শুধু সুন্দর graph বানানো না। প্রতিটি plot ideally একটি প্রশ্নের উত্তর দেবে।&lt;/p&gt;

&lt;p&gt;Notebook-এর philosophy:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Chart-এর wall বানাব না; focused plots বানাব।”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Project-এ ছয়টি প্রধান plot করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Plot 1 — Target Distribution
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;histplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;kde&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mental Health Score কীভাবে distributed?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Histogram কী দেখায়?
&lt;/h2&gt;

&lt;p&gt;Data-এর value কোন range-এ কতবার এসেছে তা bar আকারে দেখায়।&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;Score 3–4 → 300 students
Score 4–5 → 700 students
Score 5–6 → 1200 students
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  KDE কী?
&lt;/h2&gt;

&lt;p&gt;KDE = Kernel Density Estimate&lt;/p&gt;

&lt;p&gt;Histogram-এর উপর smooth curve দেয়, distribution-এর shape বোঝা সহজ হয়।&lt;/p&gt;

&lt;h2&gt;
  
  
  কেন target distribution দেখা দরকার?
&lt;/h2&gt;

&lt;p&gt;Prediction করার আগে target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;balanced কি না&lt;/li&gt;
&lt;li&gt;heavily skewed কি না&lt;/li&gt;
&lt;li&gt;strange range আছে কি না&lt;/li&gt;
&lt;li&gt;outlier আছে কি না&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;বোঝা দরকার।&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Correlation Heatmap
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;heatmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;corr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numeric_only&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;annot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Correlation কী?
&lt;/h2&gt;

&lt;p&gt;দুই numerical variable একসাথে কীভাবে পরিবর্তিত হয় তার linear relationship-এর একটি measure।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-1 ←—— 0 ——→ +1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Positive Correlation
&lt;/h3&gt;

&lt;p&gt;একটা বাড়লে অন্যটা generally বাড়ে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sleep ↑
Mental Health Score ↑
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Negative Correlation
&lt;/h3&gt;

&lt;p&gt;একটা বাড়লে অন্যটা generally কমে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Social Media Usage ↑
Mental Health Score ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Near Zero
&lt;/h3&gt;

&lt;p&gt;Strong linear relation নেই।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;numeric_only=True&lt;/code&gt; কেন?
&lt;/h2&gt;

&lt;p&gt;DataFrame-এ string columns আছে। যেমন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gender
Country
Platform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Correlation numeric data-তে apply করা হয়। তাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;corr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numeric_only&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করা হয়েছে।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;annot=True&lt;/code&gt; কেন?
&lt;/h2&gt;

&lt;p&gt;Heatmap cell-এর ভেতরে correlation number দেখায়।&lt;/p&gt;

&lt;p&gt;ভিডিওতে sleep বনাম score প্রায় positive &lt;code&gt;0.77&lt;/code&gt; এবং daily usage বনাম score প্রায় &lt;code&gt;-0.82&lt;/code&gt; ধরনের strong relationship discuss করা হয়েছে।&lt;/p&gt;

&lt;h3&gt;
  
  
  গুরুত্বপূর্ণ সতর্কতা
&lt;/h3&gt;

&lt;p&gt;Correlation ≠ Causation&lt;/p&gt;

&lt;p&gt;Dataset-এ দুই feature correlated হলেই একটি অন্যটির সরাসরি কারণ প্রমাণ হয় না।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Stress Level vs Mental Health Score
&lt;/h1&gt;

&lt;p&gt;প্রথমে categories দেখা হয়েছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Stress_Level&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;unique&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Low
Medium
High
Very High
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Low&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Medium&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;High&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Very High&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;boxplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Stress_Level&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  কেন Boxplot?
&lt;/h2&gt;

&lt;p&gt;Boxplot group-wise distribution compare করতে সাহায্য করে।&lt;/p&gt;

&lt;p&gt;এতে দেখা যায়:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;median&lt;/li&gt;
&lt;li&gt;quartiles&lt;/li&gt;
&lt;li&gt;spread&lt;/li&gt;
&lt;li&gt;outliers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Project-এর observed pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stress বাড়ছে
      ↓
Mental Health Score কমছে
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটা dataset-level relationship। Clinical conclusion নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Daily Social Media Usage vs Mental Health
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scatterplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Avg_Daily_Usage_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scatter plot দুটি numerical variable-এর relationship visually দেখায়।&lt;/p&gt;

&lt;p&gt;ভিডিওর interpretation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Low usage → comparatively higher scores
High usage → comparatively lower scores
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ graph top-left থেকে bottom-right trend করলে negative relation বোঝা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Sleep vs Mental Health
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scatterplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sleep_Hours_Per_Night&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observed pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sleep Hours ↑
Score ↑
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Graph bottom-left → top-right গেলে positive relationship-এর visual indication পাওয়া যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Most Used Platform
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Most_Used_Platform&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি প্রতিটি platform কতবার এসেছে দেখায়।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;countplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Most_Used_Platform&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Most_Used_Platform&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;value_counts().index&lt;/code&gt; কেন?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;value_counts()&lt;/code&gt; result roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Instagram    1130
TikTok        918
Facebook      800
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Countplot নিজে count করে, তাই count values pass করার দরকার নেই। শুধু desired order দরকার। সেই order পাওয়া যায় &lt;code&gt;.index&lt;/code&gt; থেকে।&lt;/p&gt;




&lt;h1&gt;
  
  
  20. Outlier কী?
&lt;/h1&gt;

&lt;p&gt;Outlier হলো এমন value যা অন্য observations-এর তুলনায় অস্বাভাবিক দূরে।&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;Study Hours:
2, 3, 4, 5, 4, 3, 50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;50&lt;/code&gt; suspicious outlier।&lt;/p&gt;

&lt;p&gt;Project-এ IQR method ব্যবহার করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  21. IQR Method
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;num_features&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select_dtypes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Q1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num_features&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quantile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num_features&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quantile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;IQR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Q1&lt;/span&gt;

&lt;span class="n"&gt;lower_bound&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;IQR&lt;/span&gt;
&lt;span class="n"&gt;upper_bound&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;IQR&lt;/span&gt;

&lt;span class="n"&gt;outliers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_features&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;lower_bound&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_features&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;upper_bound&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outliers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Formula
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IQR = Q3 - Q1

Lower Bound = Q1 - 1.5 × IQR
Upper Bound = Q3 + 1.5 × IQR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যদি value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;value &amp;lt; Lower Bound
&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;value &amp;gt; Upper Bound
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে potential outlier।&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&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;Q1 = 3
Q3 = 7
&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;IQR = 7 - 3 = 4
Lower = 3 - 1.5×4 = -3
Upper = 7 + 1.5×4 = 13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;20&lt;/code&gt; → outlier।&lt;/p&gt;

&lt;h2&gt;
  
  
  গুরুত্বপূর্ণ
&lt;/h2&gt;

&lt;p&gt;Outlier detect হলেই delete করতে হবে—এমন না। প্রথমে দেখতে হবে value logically possible কি না।&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Data Cleaning
&lt;/h1&gt;

&lt;p&gt;Notebook-এ দুইটি cleaning step আছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;drop_duplicates&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Physical_Activity_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; \
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Physical_Activity_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;clip(lower=0)&lt;/code&gt; কেন?
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Physical Activity = -0.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি invalid।&lt;/p&gt;

&lt;p&gt;&lt;code&gt;clip(lower=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;-0.4 → 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কেন পুরো row drop করা হয়নি?&lt;/p&gt;

&lt;p&gt;কারণ একই student-এর:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Age&lt;/li&gt;
&lt;li&gt;Sleep&lt;/li&gt;
&lt;li&gt;Stress&lt;/li&gt;
&lt;li&gt;Study time&lt;/li&gt;
&lt;li&gt;Platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;সব valid হতে পারে। শুধু একটি field ভুল হওয়ায় পুরো row delete করা data waste।&lt;/p&gt;




&lt;h1&gt;
  
  
  23. Skewness
&lt;/h1&gt;

&lt;p&gt;Skewness distribution-এর asymmetry measure।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;num_cols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select_dtypes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;num_cols&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;skew&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rough interpretation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Skew ≈ 0     → roughly symmetric
Skew &amp;gt; 0     → right skewed
Skew &amp;lt; 0     → left skewed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Right Skew example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 1 2 2 3 4 5 10 20 50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ডান দিকে long tail।&lt;/p&gt;

&lt;h2&gt;
  
  
  Left Skew example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 2 10 18 19 20 20 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বাম দিকে tail।&lt;/p&gt;

&lt;h2&gt;
  
  
  কেন Linear Regression-এর জন্য relevant?
&lt;/h2&gt;

&lt;p&gt;Tree-based model যেমন Random Forest skewness নিয়ে খুব sensitive নয়। কিন্তু Linear Regression baseline-এর জন্য feature transformation helpful হতে পারে।&lt;/p&gt;

&lt;p&gt;Project-এ &lt;code&gt;Study_Hours&lt;/code&gt; skewed column হিসেবে separate pipeline-এ গেছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  24. Feature Engineering — Country Grouping
&lt;/h1&gt;

&lt;p&gt;Dataset-এ Country-এর unique value অনেক—Notebook markdown অনুযায়ী প্রায় 111টি।&lt;/p&gt;

&lt;p&gt;যদি সরাসরি One-Hot Encoding করি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Country_India
Country_USA
Country_Canada
Country_Bangladesh
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;100+ sparse columns তৈরি হতে পারে। একে &lt;strong&gt;High Cardinality&lt;/strong&gt; problem বলা হয়।&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;Top 10 frequent countries আলাদা রাখা, বাকিগুলো &lt;code&gt;Other&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;top_countries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;value_counts&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;group_countries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;top_countries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Grouped_country&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;group_countries&lt;/span&gt;&lt;span class="p"&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;111 categories
      ↓
Top 10 + Other
      ↓
11 categories
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  কেন original Country পুরো drop করা হলো না?
&lt;/h2&gt;

&lt;p&gt;Country-এর কিছু useful signal থাকতে পারে। কিন্তু full high-cardinality version model unnecessarily complex করতে পারে। Grouping balance তৈরি করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  25. Encoding Strategy
&lt;/h1&gt;

&lt;p&gt;Machine Learning model text বুঝে না। তাই categorical data numerical representation-এ convert করতে হয়।&lt;/p&gt;

&lt;p&gt;দুই ধরনের encoding ব্যবহার হয়েছে:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ordinal Encoding&lt;/li&gt;
&lt;li&gt;One-Hot Encoding&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  26. Ordinal Encoding — Stress Level
&lt;/h1&gt;

&lt;p&gt;Stress level-এর natural order আছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Low &amp;lt; Medium &amp;lt; High &amp;lt; Very High
&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;Low       → 0
Medium    → 1
High      → 2
Very High → 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nc"&gt;OrdinalEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Low&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Medium&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;High&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Very High&lt;/span&gt;&lt;span class="sh"&gt;'&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;h2&gt;
  
  
  কেন One-Hot না?
&lt;/h2&gt;

&lt;p&gt;One-Hot করলে ordering information হারিয়ে যায়। Stress-এর meaningful rank আছে, তাই ordinal encoding logical।&lt;/p&gt;




&lt;h1&gt;
  
  
  27. One-Hot Encoding
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gender
Academic_Level
Most_Used_Platform
Purpose_Of_Use
Grouped_country
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই categories-এর natural ranking নেই।&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;Instagram &amp;gt; Facebook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এমন relationship নেই। তাই arbitrary number দেওয়া dangerous।&lt;/p&gt;

&lt;p&gt;One-Hot Encoding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Platform_Instagram = 1
Platform_Facebook  = 0
Platform_TikTok    = 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nc"&gt;OneHotEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle_unknown&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ignore&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;handle_unknown='ignore'&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Production-এ training-এ না থাকা নতুন category এলে pipeline যেন crash না করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  28. Train-Test Split
&lt;/h1&gt;

&lt;p&gt;Feature group define করা হয়েছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;skwewd_col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Study_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;other_numeric_cols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Avg_Daily_Usage_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Daily_Unlocks&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Physical_Activity_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sleep_Hours_Per_Night&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;ordinal_col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Stress_Level&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;normal_col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Gender&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Academic_Level&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Most_Used_Platform&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Purpose_Of_Use&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Grouped_country&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&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 python"&gt;&lt;code&gt;&lt;span class="n"&gt;feature_col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;skwewd_col&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;other_numeric_cols&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;ordinal_col&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;normal_col&lt;/span&gt;
&lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;feature_col&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Actual split code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;train_test_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;
&lt;span class="p"&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;70% Training
30% Testing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Note
&lt;/h3&gt;

&lt;p&gt;Notebook markdown-এ 80/20 লেখা আছে, কিন্তু actual code 70/30। Implementation বোঝার সময় code-এর actual parameter follow করবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  29. Train/Test কেন?
&lt;/h1&gt;

&lt;p&gt;Training set দিয়ে model শেখে।&lt;/p&gt;

&lt;p&gt;Testing set model আগে দেখে না।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Full Dataset
     ↓
 ┌──────────────┬──────────────┐
 │              │
Train          Test
70%            30%
 │              │
Fit model       Final evaluation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যদি training data-তেই evaluation করো, model memorize করে artificially ভালো score দিতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  30. Data Leakage
&lt;/h1&gt;

&lt;p&gt;এটি খুব গুরুত্বপূর্ণ interview topic।&lt;/p&gt;

&lt;p&gt;Wrong approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Full Data
   ↓
Scaling / Encoding fit
   ↓
Train-Test Split
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে test set-এর statistics preprocessing-এ leak হয়ে যেতে পারে।&lt;/p&gt;

&lt;p&gt;Correct approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Full Data
   ↓
Train/Test Split
   ↓
Preprocessing fitted only on training data
   ↓
Same fitted transformer applied to test data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pipeline এই risk কমায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  31. Pipeline এবং ColumnTransformer
&lt;/h1&gt;

&lt;p&gt;ভিডিওর সবচেয়ে important নতুন concept দুটো:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ColumnTransformer&lt;/li&gt;
&lt;li&gt;Pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;সব feature-এর preprocessing একই না।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Study_Hours      → log + scaling
Age              → scaling
Stress_Level     → ordinal encoding
Gender           → one-hot encoding
Platform         → one-hot encoding
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটা single scaler বা encoder সব column-এ apply করা যাবে না।&lt;/p&gt;

&lt;h2&gt;
  
  
  ColumnTransformer কী করে?
&lt;/h2&gt;

&lt;p&gt;এটি different columns-কে different pipelines-এ পাঠায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  Raw Data
                     │
     ┌───────────────┼────────────────┐
     ↓               ↓                ↓
Study_Hours       Numeric        Categorical
     ↓               ↓                ↓
 log1p            scale         encode
     │               │                │
     └───────────────┴────────────────┘
                     ↓
             Combined Features
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  32. Skewed Feature Pipeline
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;skew_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;log_transform&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;FunctionTransformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log1p&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;scale&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StandardScaler&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;Flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Study_Hours
    ↓
np.log1p
    ↓
StandardScaler
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;np.log1p(x)&lt;/code&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;log(1 + x)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করে। &lt;code&gt;x=0&lt;/code&gt; হলেও safe।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x = 0 → log(1) = 0
x = 10 → log(11)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Large values compress হয়, right skew কমতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  33. Numeric Pipeline
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;plain_numeric_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;scale&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;StandardScaler&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;h2&gt;
  
  
  StandardScaler কী করে?
&lt;/h2&gt;

&lt;p&gt;Feature-কে roughly zero mean এবং unit variance scale-এ আনে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;z = (x - mean) / standard_deviation
&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;Daily Unlocks = 120
Age = 23
Sleep = 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;raw scale খুব ভিন্ন। Scaling linear model-এর জন্য useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  34. Ordinal Pipeline
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;ordinal_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;encode&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;OrdinalEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Low&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Medium&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;High&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Very High&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&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;Natural order preserve করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  35. Nominal Pipeline
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nominal_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;encode&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;OneHotEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handle_unknown&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ignore&lt;/span&gt;&lt;span class="sh"&gt;'&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;যেসব category-এর order নেই তাদের জন্য।&lt;/p&gt;




&lt;h1&gt;
  
  
  36. ColumnTransformer
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;preprocessor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ColumnTransformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transformers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Skewed_Pipeline&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skew_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skwewd_col&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Plain_Numeric&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;plain_numeric_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;other_numeric_cols&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ordinal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ordinal_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ordinal_col&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Normal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nominal_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;normal_col&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;এখানে tuple pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(name, transformer, columns)
&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;এই নামের transformer → এই columns-এর উপর apply করো
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  37. Final Model Pipeline কেন?
&lt;/h1&gt;

&lt;p&gt;ভিডিওর key idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Backend যেন scaling, encoding, log transformation কিছুই আলাদা করে না জানে। সে শুধু raw input দেবে এবং &lt;code&gt;.predict()&lt;/code&gt; call করবে।&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Raw User Input
      ↓
ColumnTransformer
      ↓
Scaling + Encoding + Log transform
      ↓
Machine Learning Model
      ↓
Prediction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটা deployment অনেক safer করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  38. Linear Regression Baseline
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;lr_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;preprocessor&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;preprocessor&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;regressor&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;LinearRegression&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;Fit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;lr_pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;lr_preds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lr_pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_test&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Training predictions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;lr_preds_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lr_pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X_train&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  কেন baseline?
&lt;/h2&gt;

&lt;p&gt;Linear Regression simple model। যদি simple model-ই ভালো করে, unnecessarily complex model দরকার নাও হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  39. Linear Regression Result
&lt;/h1&gt;

&lt;p&gt;Saved notebook output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Training R² ≈ 0.7237
Testing R²  ≈ 0.7398
MAE         ≈ 0.5362
RMSE        ≈ 0.6760
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Interpretation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Train এবং test score কাছাকাছি&lt;/li&gt;
&lt;li&gt;Severe overfitting নেই&lt;/li&gt;
&lt;li&gt;কিন্তু Random Forest-এর তুলনায় weaker performance&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  40. Random Forest
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;rf_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;preprocessor&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;preprocessor&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;RandomForestRegressor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&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;Random Forest অনেক Decision Tree combine করে।&lt;/p&gt;

&lt;p&gt;Simple 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;Tree 1 → prediction
Tree 2 → prediction
Tree 3 → prediction
...
Tree N → prediction
       ↓
Average
       ↓
Final Regression Output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tree-based model nonlinear relation ও feature interaction ধরতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  41. Default Random Forest Result
&lt;/h1&gt;

&lt;p&gt;Notebook output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Training R² ≈ 0.9808
Testing R²  ≈ 0.8776
MAE         ≈ 0.3472
RMSE        ≈ 0.4637
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি Linear Regression-এর চেয়ে test set-এ ভালো।&lt;/p&gt;

&lt;p&gt;কিন্তু training R² 0.98 আর testing R² 0.88 — gap আছে। এটি কিছু overfitting-এর sign হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  42. Overfitting কী?
&lt;/h1&gt;

&lt;p&gt;Model training data খুব ভালো শিখে ফেলেছে, কিন্তু unseen data-তে performance noticeably কম।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Train R² = 0.99
Test R²  = 0.70
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ strong overfitting indication।&lt;/p&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;Train ≈ 0.98
Test  ≈ 0.88
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;gap আছে, কিন্তু test performance still strong।&lt;/p&gt;

&lt;h2&gt;
  
  
  Underfitting কী?
&lt;/h2&gt;

&lt;p&gt;Train এবং test দুটোতেই poor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Train = 0.50
Test  = 0.48
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে model pattern ধরতেই পারছে না।&lt;/p&gt;




&lt;h1&gt;
  
  
  43. Hyperparameter Tuning
&lt;/h1&gt;

&lt;p&gt;Random Forest-এর parameters model behavior control করে।&lt;/p&gt;

&lt;p&gt;Project-এ tune করা হয়েছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;param_grid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__n_estimators&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__max_depth&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__min_samples_split&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__min_samples_leaf&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&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;h2&gt;
  
  
  Parameters সহজভাবে
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;n_estimators&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;কতটি tree থাকবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;max_depth&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;একটি tree কত deep যেতে পারবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;min_samples_split&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;একটি node split করার জন্য minimum samples।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;min_samples_leaf&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Leaf node-এ minimum samples।&lt;/p&gt;




&lt;h1&gt;
  
  
  44. Pipeline parameter name-এ &lt;code&gt;__&lt;/code&gt; কেন?
&lt;/h1&gt;

&lt;p&gt;Pipeline step name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;RandomForestRegressor&lt;/span&gt;&lt;span class="p"&gt;(...))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই parameter refer করতে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;দুই underscore &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;pipeline_step__parameter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;format ব্যবহার হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  45. RandomizedSearchCV
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;random_search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RandomizedSearchCV&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;estimator&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rf_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;param_distributions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;param_grid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;n_iter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;scoring&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;random_state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;n_jobs&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;n_iter=15&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;সব possible combination test না করে 15টি random combination try করবে।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;cv=5&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;5-fold cross validation।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;scoring='r2'&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Best model select করার metric R²।&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;n_jobs=-1&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;সব available CPU cores ব্যবহার করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  46. Cross Validation
&lt;/h1&gt;

&lt;p&gt;Training data 5 ভাগ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fold 1
Fold 2
Fold 3
Fold 4
Fold 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Round 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Train = Fold 2–5
Validate = Fold 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Round 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Train = 1,3,4,5
Validate = 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এভাবে প্রতিটি fold একবার validation হয়।&lt;/p&gt;

&lt;p&gt;একটি single split-এর luck-এর উপর dependency কমে।&lt;/p&gt;




&lt;h1&gt;
  
  
  47. Best Hyperparameters
&lt;/h1&gt;

&lt;p&gt;Notebook output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__n_estimators&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__min_samples_split&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__min_samples_leaf&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;random forest__max_depth&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Best estimator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;rf_best_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random_search&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_estimator_&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  48. Tuned Random Forest Result
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Test R²      ≈ 0.8650
Training R²  ≈ 0.9547
MAE          ≈ 0.3689
RMSE         ≈ 0.4869
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Interesting finding:&lt;/p&gt;

&lt;p&gt;Default Random Forest test result tuned model-এর চেয়ে সামান্য ভালো।&lt;/p&gt;

&lt;p&gt;এটা শেখায়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hyperparameter tuning করলেই performance অবশ্যই improve করবে—এমন guarantee নেই।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tuning overfitting gap reduce করতে পারে, কিন্তু chosen search space বা random combinations test score কমাতেও পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  49. Evaluation Metrics
&lt;/h1&gt;

&lt;h2&gt;
  
  
  R² Score
&lt;/h2&gt;

&lt;p&gt;Target variation-এর কতটা model explain করছে তার measure।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;R² = 1 → perfect prediction
R² = 0 → naive mean baseline-এর মতো
R² &amp;lt; 0 → mean prediction-এর থেকেও খারাপ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple interpretation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;R² = 0.88
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে model dataset-এর variation-এর বড় অংশ explain করছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  50. MAE
&lt;/h1&gt;

&lt;p&gt;MAE = Mean Absolute Error&lt;/p&gt;

&lt;p&gt;Formula idea:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|Actual - Prediction|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সব absolute error-এর mean।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Actual      Prediction   Error
8.0         7.5          0.5
6.0         6.2          0.2
5.0         4.6          0.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(0.5 + 0.2 + 0.4) / 3
= 0.3667
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MAE original score unit-এ understandable।&lt;/p&gt;




&lt;h1&gt;
  
  
  51. RMSE
&lt;/h1&gt;

&lt;p&gt;RMSE = Root Mean Squared Error&lt;/p&gt;

&lt;p&gt;Large mistakes-কে বেশি penalty দেয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error 0.5 → squared 0.25
Error 2.0 → squared 4.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই rare large error থাকলে RMSE বেড়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  52. Model Comparison Table
&lt;/h1&gt;

&lt;p&gt;Actual notebook output:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Test R²&lt;/th&gt;
&lt;th&gt;Train R²&lt;/th&gt;
&lt;th&gt;MAE&lt;/th&gt;
&lt;th&gt;RMSE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linear Regression&lt;/td&gt;
&lt;td&gt;0.7398&lt;/td&gt;
&lt;td&gt;0.7237&lt;/td&gt;
&lt;td&gt;0.5362&lt;/td&gt;
&lt;td&gt;0.6760&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Random Forest Default&lt;/td&gt;
&lt;td&gt;0.8776&lt;/td&gt;
&lt;td&gt;0.9808&lt;/td&gt;
&lt;td&gt;0.3472&lt;/td&gt;
&lt;td&gt;0.4637&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Random Forest Tuned&lt;/td&gt;
&lt;td&gt;0.8650&lt;/td&gt;
&lt;td&gt;0.9547&lt;/td&gt;
&lt;td&gt;0.3689&lt;/td&gt;
&lt;td&gt;0.4869&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Dataset/test split অনুযায়ী default Random Forest এখানে strongest test metrics দিয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  53. Model Save with Joblib
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;
&lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rf_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Model.pkl&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;শুধু Random Forest object save করা হয়নি। &lt;code&gt;rf_pipeline&lt;/code&gt; save হওয়ায় preprocessing + model একসাথে save হয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mental_Health_Model.pkl
        │
        ├── ColumnTransformer
        ├── log1p transform
        ├── StandardScaler
        ├── OrdinalEncoder
        ├── OneHotEncoder
        └── RandomForestRegressor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  কেন ভালো?
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_dataframe&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;call করবে। Backend-এ preprocessing পুনরায় manually লিখতে হবে না।&lt;/p&gt;




&lt;h1&gt;
  
  
  54. Important Model Save Mismatch
&lt;/h1&gt;

&lt;p&gt;Notebook tuned model বানিয়েছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;rf_best_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random_search&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;best_estimator_&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু save করেছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rf_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Model.pkl&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ &lt;strong&gt;default Random Forest pipeline save হয়েছে&lt;/strong&gt;, tuned one না।&lt;/p&gt;

&lt;p&gt;এটি intentional হতে পারে কারণ default model-এর test metrics better ছিল। তবে code-এ comment দিয়ে reason clear করা উচিত ছিল।&lt;/p&gt;

&lt;p&gt;যদি tuned model save করতে চাই:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rf_best_pipeline&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Model.pkl&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  55. FastAPI Backend
&lt;/h1&gt;

&lt;p&gt;Backend file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Literal&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi.middleware.cors&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;CORSMiddleware&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  56. Load Model
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mental_Health_Model.pkl&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server start হলে saved pipeline memory-তে load হয়।&lt;/p&gt;

&lt;p&gt;তারপর প্রতিটি prediction request-এ নতুন করে model load করতে হয় না।&lt;/p&gt;




&lt;h1&gt;
  
  
  57. FastAPI App
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই application object।&lt;/p&gt;

&lt;p&gt;Run command সাধারণত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Project JS error message-এ port example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--port&lt;/span&gt; 2200 &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  58. Pydantic কেন?
&lt;/h1&gt;

&lt;p&gt;Pydantic request body validate করে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StudentData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি বলে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;/predict&lt;/code&gt;-এ কী shape-এর data আসবে এবং কোন field-এর type/range কী হবে।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  59. Age Validation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt; &lt;span class="n"&gt;ge&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&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;Required
Integer
Age &amp;gt;= 10
Age &amp;lt;= 100
&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 json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FastAPI/Pydantic 422 validation error দিতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  60. Literal Validation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Literal&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Male&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Female&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;একইভাবে academic level, platform, purpose এবং stress level predefined category-তে restricted।&lt;/p&gt;




&lt;h1&gt;
  
  
  61. Numeric Field Validation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;avg_daily_usage_hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt; &lt;span class="n"&gt;ge&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;daily_unlocks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt; &lt;span class="n"&gt;ge&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;study_hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt; &lt;span class="n"&gt;ge&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;physical_activity_hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt; &lt;span class="n"&gt;ge&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sleep_hours_per_night&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(...,&lt;/span&gt; &lt;span class="n"&gt;ge&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;le&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে physically impossible বা clearly invalid inputs prevent করা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  62. Prediction Response Model
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PredictionResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;predicted_mental_health_score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি API response-এর shape define করে।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"predicted_mental_health_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;6.78&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  63. Root Route
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@app.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Welcome to Sheryians AI School Guys&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Browser-এ root URL hit করলে simple JSON response আসে।&lt;/p&gt;

&lt;p&gt;এটা backend alive কি না basic check হিসেবে useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  64. &lt;code&gt;/predict&lt;/code&gt; Route
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/predict&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PredictionResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;StudentData&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Method = POST&lt;/li&gt;
&lt;li&gt;Endpoint = &lt;code&gt;/predict&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Request validated by &lt;code&gt;StudentData&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Response validated by &lt;code&gt;PredictionResponse&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  65. Backend Country Grouping
&lt;/h1&gt;

&lt;p&gt;Training-এ Country grouping করা হয়েছিল। Prediction-এর সময় একই logic দরকার।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;country_group&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;top_countries&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Training এবং inference preprocessing consistency খুব গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  66. Input DataFrame তৈরি
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;input_row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Gender&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Country&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Academic_Level&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;academic_level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Most_Used_Platform&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;most_used_platform&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Purpose_Of_Use&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;purpose_of_use&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Avg_Daily_Usage_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;avg_daily_usage_hours&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Daily_Unlocks&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;daily_unlocks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Study_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;study_hours&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Physical_Activity_Hours&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;physical_activity_hours&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sleep_Hours_Per_Night&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep_hours_per_night&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Stress_Level&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stress_level&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Grouped_country&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;country_group&lt;/span&gt;
&lt;span class="p"&gt;}])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Saved pipeline column names দিয়ে preprocessing route করে। তাই raw user data-কে training-এর মতো DataFrame schema-তে convert করা হচ্ছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  67. Prediction
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;prediction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_row&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;input_row
   ↓
Saved Pipeline
   ↓
Feature preprocessing
   ↓
Random Forest
   ↓
Array-like prediction
   ↓
[0] দিয়ে first prediction
&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 python"&gt;&lt;code&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prediction&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&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;6.777777
   ↓
6.78
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  68. CORS
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;CORSMiddleware&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;allow_origins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;allow_methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;allow_headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="sh"&gt;'&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;Browser security কারণে frontend এবং backend আলাদা origin/domain হলে request block হতে পারে। CORS policy দিয়ে অনুমতি দেওয়া হয়।&lt;/p&gt;

&lt;h2&gt;
  
  
  Production note
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;allow_origins=['*']&lt;/code&gt; demo project-এর জন্য easy, কিন্তু production-এ specific frontend domain allow করা safer।&lt;/p&gt;




&lt;h1&gt;
  
  
  69. Frontend Technologies
&lt;/h1&gt;

&lt;p&gt;ভিডিওতে বলা হয়েছে Streamlit ব্যবহার করা হয়নি। Frontend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTML
CSS
JavaScript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে project traditional web app architecture follow করছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  70. Frontend Form
&lt;/h1&gt;

&lt;p&gt;User form-এ data দেয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Age
Gender
Country
Academic Level
Most Used Platform
Purpose of Use
Average Daily Usage Hours
Daily Unlocks
Study Hours
Physical Activity Hours
Sleep Hours
Stress Level
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Submit button চাপলে JavaScript payload বানায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  71. &lt;code&gt;collectPayload()&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;JavaScript form values collect করে exact Pydantic shape বানায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt; 
  &lt;span class="na"&gt;gender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;academic_level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;most_used_platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;purpose_of_use&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;avg_daily_usage_hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;daily_unlocks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;study_hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;physical_activity_hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;sleep_hours_per_night&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;...,&lt;/span&gt;
  &lt;span class="na"&gt;stress_level&lt;/span&gt;&lt;span class="p"&gt;:&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;এখানে frontend field names backend Pydantic model-এর field names-এর সাথে match করা খুব গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  72. Client-side Validation
&lt;/h1&gt;

&lt;p&gt;JavaScript backend-এ পাঠানোর আগে numeric ranges check করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Age                  10–100
Daily Usage           0–24
Daily Unlocks         &amp;gt;= 0
Study Hours           0–24
Physical Activity     0–24
Sleep                 0–24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে user instant feedback পায়।&lt;/p&gt;

&lt;p&gt;কিন্তু frontend validation security boundary না; backend Pydantic validation still required।&lt;/p&gt;




&lt;h1&gt;
  
  
  73. Stress Segmented Control
&lt;/h1&gt;

&lt;p&gt;JavaScript stress level button click handle করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Low
Medium
High
Very High
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Selected value hidden input-এ রাখা হয়।&lt;/p&gt;

&lt;p&gt;এটি UI সুন্দর করে, কিন্তু backend শেষ পর্যন্ত string value-টাই পায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  74. API Call with &lt;code&gt;fetch&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Core code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/predict`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&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;Flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JavaScript Object
      ↓
JSON.stringify
      ↓
HTTP POST
      ↓
FastAPI /predict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  75. API Base URL
&lt;/h1&gt;

&lt;p&gt;Project frontend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://mansik-santulan-score.onrender.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে backend Render-এ deployed।&lt;/p&gt;

&lt;p&gt;Local development-এ এটি হতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://127.0.0.1:8000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা project-specific port।&lt;/p&gt;




&lt;h1&gt;
  
  
  76. 422 Validation Error Handling
&lt;/h1&gt;

&lt;p&gt;FastAPI Pydantic validation fail করলে HTTP 422 দেয়।&lt;/p&gt;

&lt;p&gt;Frontend code response-এর &lt;code&gt;detail&lt;/code&gt; array parse করে relevant field-এর পাশে error message দেখানোর চেষ্টা করে।&lt;/p&gt;

&lt;p&gt;এটি UX-এর জন্য ভালো design।&lt;/p&gt;




&lt;h1&gt;
  
  
  77. Loading / Result / Error UI States
&lt;/h1&gt;

&lt;p&gt;JavaScript চারটি state manage করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;idle
loading
result
error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Idle
 ↓
Loading
 ↓
Success → Result
     অথবা
Failure → Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি user-কে application কী করছে বুঝতে সাহায্য করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  78. Result Gauge
&lt;/h1&gt;

&lt;p&gt;Prediction score clamp করা হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clamped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে UI gauge 0–10 range-এর বাইরে যাবে না।&lt;/p&gt;

&lt;p&gt;তারপর arc fill score অনুযায়ী animate হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  79. UI Score Bands
&lt;/h1&gt;

&lt;p&gt;Frontend code-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;score &amp;lt; 4
→ Signal: strained

4 ≤ score &amp;lt; 7
→ Signal: balanced

score ≥ 7
→ Signal: strong
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো product UI labels; medical diagnosis না।&lt;/p&gt;

&lt;p&gt;Mental-health-related application হলে এই distinction খুব important।&lt;/p&gt;




&lt;h1&gt;
  
  
  80. Complete Request-Response Example
&lt;/h1&gt;

&lt;p&gt;ধরো user input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Age = 23
Gender = Female
Country = Bangladesh
Academic Level = Undergraduate
Platform = Instagram
Purpose = Entertainment
Usage = 7 hours
Unlocks = 95
Study = 3 hours
Physical Activity = 1 hour
Sleep = 5.5 hours
Stress = High
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1 — Frontend Payload
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Female"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bangladesh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"academic_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Undergraduate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"most_used_platform"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Instagram"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"purpose_of_use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Entertainment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"avg_daily_usage_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"daily_unlocks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"study_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"physical_activity_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sleep_hours_per_night"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stress_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"High"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2 — FastAPI
&lt;/h2&gt;

&lt;p&gt;Pydantic validate করবে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Country grouping
&lt;/h2&gt;

&lt;p&gt;Bangladesh top list-এ না থাকলে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4 — DataFrame
&lt;/h2&gt;

&lt;p&gt;Input training schema-এর মতো row হবে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5 — Saved Pipeline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Study_Hours
   ↓ log1p + scale

Numeric features
   ↓ scale

Stress
   ↓ ordinal encode

Other categorical
   ↓ one-hot encode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6 — Random Forest
&lt;/h2&gt;

&lt;p&gt;Transformed feature vector থেকে numerical score predict করবে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7 — API Response
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"predicted_mental_health_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.43&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 8 — Frontend
&lt;/h2&gt;

&lt;p&gt;Gauge এবং label update হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  81. Deployment Concept
&lt;/h1&gt;

&lt;p&gt;ভিডিওতে project Render-এ deploy করার কথা বলা হয়েছে।&lt;/p&gt;

&lt;p&gt;Basic deployment flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub Repository
      ↓
Render Web Service
      ↓
Install requirements.txt
      ↓
Start FastAPI using Uvicorn
      ↓
Public API URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;requirements.txt&lt;/code&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;fastapi
uvicorn
pydantic
joblib
pandas
scikit-learn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Typical Render Start Command
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;--port&lt;/span&gt; &lt;span class="nv"&gt;$PORT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Frontend-এ deployed API URL set করা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  82. End-to-End Architecture Diagram
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────┐
│             USER / BROWSER          │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│       HTML + CSS + JavaScript       │
│ Form, validation, loading, gauge    │
└──────────────────┬──────────────────┘
                   │ JSON POST /predict
                   ▼
┌─────────────────────────────────────┐
│              FASTAPI                │
│ Pydantic validation + route logic   │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│     pandas DataFrame input row      │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│        SAVED SKLEARN PIPELINE       │
│                                     │
│ ColumnTransformer                   │
│ ├── Study_Hours → log + scale       │
│ ├── Numeric → scale                 │
│ ├── Stress → ordinal encoding       │
│ └── Categories → one-hot encoding   │
│                 ↓                   │
│       RandomForestRegressor         │
└──────────────────┬──────────────────┘
                   │
                   ▼
┌─────────────────────────────────────┐
│        Predicted Score 0–10         │
└──────────────────┬──────────────────┘
                   │ JSON
                   ▼
┌─────────────────────────────────────┐
│         Frontend Result Gauge       │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  83. Video-এর Important Learning Philosophy
&lt;/h1&gt;

&lt;p&gt;ভিডিওতে technical content-এর পাশাপাশি কয়েকটি mindset point repeated হয়েছে:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;শুধু notebook model বানানো যথেষ্ট না—deployment পর্যন্ত গেলে project অনেক stronger হয়।&lt;/li&gt;
&lt;li&gt;EDA random graph collection না; প্রতিটি graph-এর একটি question থাকা উচিত।&lt;/li&gt;
&lt;li&gt;Kaggle data clean হলেও real-world data messy—cleaning mindset develop করতে হবে।&lt;/li&gt;
&lt;li&gt;Categorical text model সরাসরি বুঝে না; encoding দরকার।&lt;/li&gt;
&lt;li&gt;Different columns-এর জন্য different preprocessing দরকার হতে পারে।&lt;/li&gt;
&lt;li&gt;Pipeline production deployment-এর জন্য খুব useful।&lt;/li&gt;
&lt;li&gt;Training score একা দেখে model choose করা উচিত না; unseen test data performance বেশি important।&lt;/li&gt;
&lt;li&gt;Single metric-এর উপর model decision না নেওয়া ভালো; R² + MAE + RMSE together দেখা উচিত।&lt;/li&gt;
&lt;li&gt;Hyperparameter tuning মানেই automatically better test score নয়।&lt;/li&gt;
&lt;li&gt;Frontend, backend এবং ML pipeline-এর schema consistent থাকা অত্যন্ত গুরুত্বপূর্ণ।&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  84. Important Mismatch / Improvement Notes
&lt;/h1&gt;

&lt;p&gt;এগুলো project ভালোভাবে বুঝতে সবচেয়ে useful অংশগুলোর একটি।&lt;/p&gt;

&lt;h2&gt;
  
  
  84.1 80/20 লেখা, code 70/30
&lt;/h2&gt;

&lt;p&gt;Markdown বলে 80/20। Actual code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;test_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ 70/30। Documentation update করা উচিত।&lt;/p&gt;

&lt;h2&gt;
  
  
  84.2 Tuned model বানানো হলেও default pipeline save
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rf_pipeline&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;এটি default RF। Notebook output-এ default model test metrics tuned model-এর চেয়ে better, তাই choice reasonable; কিন্তু explicit explanation থাকা উচিত।&lt;/p&gt;

&lt;h2&gt;
  
  
  84.3 Country list consistency
&lt;/h2&gt;

&lt;p&gt;Training-এ &lt;code&gt;top_countries&lt;/code&gt; dynamically dataset থেকে বের করা হয়েছে। Backend-এ list hard-coded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;top_countries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Other&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;India&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;USA&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Canada&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Australia&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;UK&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Germany&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mexico&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Turkey&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;France&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Best practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Country grouping logic pipeline-এর ভেতরে রাখা, অথবা&lt;/li&gt;
&lt;li&gt;fitted metadata save করা&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;যাতে training এবং inference mismatch না হয়।&lt;/p&gt;

&lt;h2&gt;
  
  
  84.4 Original &lt;code&gt;Country&lt;/code&gt; input_row-এ আছে, কিন্তু model features-এ ব্যবহার হয় না
&lt;/h2&gt;

&lt;p&gt;Model &lt;code&gt;Grouped_country&lt;/code&gt; ব্যবহার করে; raw &lt;code&gt;Country&lt;/code&gt; ColumnTransformer feature list-এ নেই। এটি harmless extra column হতে পারে, কিন্তু cleaner schema রাখা ভালো।&lt;/p&gt;

&lt;h2&gt;
  
  
  84.5 CORS &lt;code&gt;*&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Demo-র জন্য okay, production-এ specific origin safer।&lt;/p&gt;

&lt;h2&gt;
  
  
  84.6 Medical Interpretation
&lt;/h2&gt;

&lt;p&gt;এই model educational dataset-এর statistical prediction। User-এর real mental health assessment হিসেবে present করা উচিত না। UI-তে clear disclaimer থাকা দরকার।&lt;/p&gt;




&lt;h1&gt;
  
  
  85. কীভাবে project explain করবে Viva-তে
&lt;/h1&gt;

&lt;p&gt;Short answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“আমি একটি end-to-end regression application তৈরি করেছি যেখানে student-এর social media usage, study, sleep, physical activity, stress এবং demographic data থেকে Mental Health Score predict করা হয়। Data cleaning এবং EDA-এর পরে categorical variables ordinal ও one-hot encoding করেছি, numerical features scale করেছি, skewed study-hours feature log transform করেছি এবং এগুলো sklearn ColumnTransformer ও Pipeline-এর মধ্যে combine করেছি। Linear Regression baseline এবং Random Forest compare করেছি, RandomizedSearchCV দিয়ে tuning করেছি এবং R², MAE, RMSE দিয়ে evaluate করেছি। পুরো trained pipeline Joblib দিয়ে save করে FastAPI/Pydantic backend-এ expose করেছি এবং HTML/CSS/JavaScript frontend থেকে &lt;code&gt;/predict&lt;/code&gt; endpoint call করে live prediction দেখিয়েছি।”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  86. Viva Questions + Answers
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Q1. কেন regression?
&lt;/h2&gt;

&lt;p&gt;কারণ target &lt;code&gt;Mental_Health_Score&lt;/code&gt; continuous numerical value।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q2. কেন classification না?
&lt;/h2&gt;

&lt;p&gt;Target class label না; number predict করছি।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q3. &lt;code&gt;df.info()&lt;/code&gt; কেন?
&lt;/h2&gt;

&lt;p&gt;Column types, non-null count এবং schema বুঝতে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q4. negative physical activity কীভাবে handle করেছ?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;clip(lower=0)&lt;/code&gt; ব্যবহার করেছি যাতে invalid negative hour zero হয় এবং পুরো row না হারায়।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q5. Correlation কী?
&lt;/h2&gt;

&lt;p&gt;দুই numerical feature-এর linear relationship-এর strength/direction।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q6. Correlation causation প্রমাণ করে?
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  Q7. IQR কেন?
&lt;/h2&gt;

&lt;p&gt;Potential outlier detect করতে robust statistical method।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q8. Country grouping কেন?
&lt;/h2&gt;

&lt;p&gt;High cardinality reduce করতে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q9. Stress level-এ Ordinal Encoding কেন?
&lt;/h2&gt;

&lt;p&gt;কারণ natural order আছে: Low &amp;lt; Medium &amp;lt; High &amp;lt; Very High।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q10. Platform-এ One-Hot কেন?
&lt;/h2&gt;

&lt;p&gt;কারণ natural order নেই।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q11. ColumnTransformer কেন?
&lt;/h2&gt;

&lt;p&gt;Different column groups-এ different preprocessing apply করতে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q12. Pipeline কেন?
&lt;/h2&gt;

&lt;p&gt;Preprocessing + model এক object-এ chain করতে এবং training/inference consistency রাখতে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q13. Data leakage কী?
&lt;/h2&gt;

&lt;p&gt;Test data-এর information training/preprocessing fitting-এ accidentally চলে যাওয়া।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q14. Random Forest Linear Regression-এর চেয়ে কেন ভালো করতে পারে?
&lt;/h2&gt;

&lt;p&gt;Nonlinear relation এবং feature interaction ধরতে পারে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q15. Hyperparameter কী?
&lt;/h2&gt;

&lt;p&gt;Training-এর আগে configured model setting, যেমন &lt;code&gt;max_depth&lt;/code&gt;, &lt;code&gt;n_estimators&lt;/code&gt;।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q16. RandomizedSearchCV কেন?
&lt;/h2&gt;

&lt;p&gt;সব combination exhaustive search না করে selected random combinations efficiently test করতে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q17. R² কী?
&lt;/h2&gt;

&lt;p&gt;Target variation-এর কতটা model explain করছে তার measure।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q18. MAE কী?
&lt;/h2&gt;

&lt;p&gt;Average absolute prediction error।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q19. RMSE কী?
&lt;/h2&gt;

&lt;p&gt;Squared error-based metric যা large mistakes বেশি penalize করে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q20. Joblib দিয়ে পুরো pipeline save কেন?
&lt;/h2&gt;

&lt;p&gt;Backend-এ preprocessing manually recreate না করতে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q21. Pydantic কেন?
&lt;/h2&gt;

&lt;p&gt;API request validation ও type/range enforcement-এর জন্য।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q22. POST কেন?
&lt;/h2&gt;

&lt;p&gt;Prediction request-এ structured JSON payload পাঠাতে সুবিধাজনক এবং semantics অনুযায়ী data processing action।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q23. CORS কেন?
&lt;/h2&gt;

&lt;p&gt;Browser-এর cross-origin request restriction handle করতে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Q24. 422 error কী?
&lt;/h2&gt;

&lt;p&gt;FastAPI/Pydantic validation fail হলে সাধারণত Unprocessable Entity response।&lt;/p&gt;




&lt;h1&gt;
  
  
  87. Beginner-এর জন্য Project শেখার Order
&lt;/h1&gt;

&lt;p&gt;তুমি যদি raw থেকে শিখতে চাও:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Python basics
2. NumPy basics
3. Pandas
4. Matplotlib / Seaborn
5. Basic Statistics
6. Regression concept
7. Data Cleaning
8. EDA
9. Encoding
10. Scaling
11. Train/Test Split
12. Linear Regression
13. Decision Tree
14. Random Forest
15. Evaluation Metrics
16. ColumnTransformer
17. Pipeline
18. Hyperparameter Tuning
19. Joblib
20. FastAPI
21. Pydantic
22. Basic HTML/CSS/JS
23. Fetch API
24. CORS
25. Render Deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  88. সবচেয়ে Important 4 Concepts
&lt;/h1&gt;

&lt;p&gt;এই project থেকে যদি চারটি জিনিস সবচেয়ে ভালোভাবে শিখতে চাও:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. ColumnTransformer
&lt;/h2&gt;

&lt;p&gt;Different feature group → different preprocessing।&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Pipeline
&lt;/h2&gt;

&lt;p&gt;Preprocessing + model → single reliable object।&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Train/Test + Leakage
&lt;/h2&gt;

&lt;p&gt;Unseen data দিয়ে honest evaluation।&lt;/p&gt;

&lt;h2&gt;
  
  
  4. FastAPI Integration
&lt;/h2&gt;

&lt;p&gt;ML model → usable real-world web API।&lt;/p&gt;




&lt;h1&gt;
  
  
  89. Full Project Mental Model
&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;UNDERSTAND PROBLEM
       ↓
LOAD DATA
       ↓
CHECK SHAPE / HEAD / INFO
       ↓
MISSING / DUPLICATE / INVALID VALUES
       ↓
EDA
       ↓
OUTLIERS
       ↓
CLEAN DATA
       ↓
CHECK SKEWNESS
       ↓
FEATURE ENGINEERING
       ↓
DEFINE X AND y
       ↓
TRAIN / TEST SPLIT
       ↓
COLUMN TRANSFORMER
       ↓
PIPELINE
       ↓
LINEAR REGRESSION BASELINE
       ↓
RANDOM FOREST
       ↓
HYPERPARAMETER TUNING
       ↓
R² + MAE + RMSE
       ↓
SAVE PIPELINE
       ↓
FASTAPI
       ↓
PYDANTIC VALIDATION
       ↓
POST /predict
       ↓
HTML/CSS/JS FRONTEND
       ↓
FETCH API
       ↓
RESULT GAUGE
       ↓
RENDER DEPLOYMENT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  90. One Final Example — Raw Input থেকে Final Prediction
&lt;/h1&gt;

&lt;p&gt;ধরো user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Age = 21
Gender = Male
Country = Bangladesh
Academic Level = Undergraduate
Platform = TikTok
Purpose = Entertainment
Usage = 8 h/day
Unlocks = 120
Study = 2 h/day
Exercise = 0.5 h/day
Sleep = 5 h/night
Stress = Very High
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Backend Request
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Male"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bangladesh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"academic_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Undergraduate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"most_used_platform"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TikTok"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"purpose_of_use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Entertainment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"avg_daily_usage_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"daily_unlocks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"study_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"physical_activity_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sleep_hours_per_night"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stress_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Very High"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Internal transformation conceptually
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Study_Hours = 2
   ↓ log1p
   ↓ scale

Age = 21
Usage = 8
Unlocks = 120
Exercise = 0.5
Sleep = 5
   ↓ StandardScaler

Stress = Very High
   ↓ OrdinalEncoder
   ↓ 3

Gender = Male
Platform = TikTok
Purpose = Entertainment
Academic = Undergraduate
Country Group = Other
   ↓ OneHotEncoder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সব transformed features merge হয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Feature Vector
      ↓
Random Forest
      ↓
Predicted Mental Health Score
&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;4.72
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"predicted_mental_health_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.72&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Frontend result gauge update করবে।&lt;/p&gt;

&lt;p&gt;এই পুরো sequence বুঝতে পারলে তুমি project-এর &lt;strong&gt;মূল architecture সত্যিই বুঝে গেছ&lt;/strong&gt;, শুধু code মুখস্থ করোনি।&lt;/p&gt;




&lt;h1&gt;
  
  
  91. Summary Cheat Sheet
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problem Type       : Regression
Target             : Mental_Health_Score
Dataset Size       : ~5000 rows, 13 columns
EDA                : Histogram, Heatmap, Boxplot, Scatterplot, Countplot
Outlier Method     : IQR
Invalid Value Fix  : clip(lower=0)
Skew Fix           : log1p for Study_Hours
High Cardinality   : Country → Top 10 + Other
Ordinal Encoding   : Stress_Level
One-Hot Encoding   : Gender, Academic, Platform, Purpose, Grouped Country
Scaling            : StandardScaler
Split              : Actual code 70/30
Baseline           : Linear Regression
Main Model         : Random Forest Regressor
Tuning             : RandomizedSearchCV, 5-fold CV
Metrics            : R², MAE, RMSE
Serialization      : joblib / .pkl
Backend            : FastAPI
Validation         : Pydantic
Frontend           : HTML + CSS + JavaScript
API Method         : POST
Endpoint           : /predict
Deployment         : Render
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;এই project-এর সবচেয়ে বড় lesson কোনো একটি algorithm না। সবচেয়ে বড় lesson হলো &lt;strong&gt;Machine Learning model কীভাবে একটি complete application-এর অংশ হয়&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;একজন beginner সাধারণত দেখে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CSV → Model → Accuracy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problem Understanding
→ Data Quality
→ EDA
→ Cleaning
→ Feature Engineering
→ Correct Preprocessing
→ Leakage-free Training
→ Multiple Model Comparison
→ Evaluation
→ Serialization
→ Backend Validation
→ API
→ Frontend
→ Error Handling
→ Deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তুমি যদি এই flow বুঝে নিজের ভাষায় explain করতে পারো, তাহলে project-টা সত্যিকার অর্থে বুঝেছ।&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>🐧 Linux for DevOps — Complete Learning &amp; Interview Preparation</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 11:54:47 +0000</pubDate>
      <link>https://dev.to/ragibcs/linux-for-devops-complete-learning-interview-preparation-k3o</link>
      <guid>https://dev.to/ragibcs/linux-for-devops-complete-learning-interview-preparation-k3o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; একদম raw level থেকে Linux শিখে DevOps/SRE/Cloud/Kubernetes কাজের জন্য production-ready foundation তৈরি করা।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  📌 Table of Contents
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Linux কী?&lt;/li&gt;
&lt;li&gt;Linux Architecture&lt;/li&gt;
&lt;li&gt;Linux Distribution&lt;/li&gt;
&lt;li&gt;Terminal &amp;amp; Shell&lt;/li&gt;
&lt;li&gt;Filesystem&lt;/li&gt;
&lt;li&gt;Essential Commands&lt;/li&gt;
&lt;li&gt;File &amp;amp; Directory Management&lt;/li&gt;
&lt;li&gt;File Permissions&lt;/li&gt;
&lt;li&gt;Users &amp;amp; Groups&lt;/li&gt;
&lt;li&gt;Ownership&lt;/li&gt;
&lt;li&gt;Processes&lt;/li&gt;
&lt;li&gt;Jobs &amp;amp; Signals&lt;/li&gt;
&lt;li&gt;System Monitoring&lt;/li&gt;
&lt;li&gt;Package Management&lt;/li&gt;
&lt;li&gt;Environment Variables&lt;/li&gt;
&lt;li&gt;Shell &amp;amp; Bash&lt;/li&gt;
&lt;li&gt;Pipes &amp;amp; Redirection&lt;/li&gt;
&lt;li&gt;grep, sed, awk&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Ports &amp;amp; Sockets&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;li&gt;SCP &amp;amp; Rsync&lt;/li&gt;
&lt;li&gt;File Compression&lt;/li&gt;
&lt;li&gt;Disk &amp;amp; Storage&lt;/li&gt;
&lt;li&gt;Mounting&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/proc&lt;/code&gt;, &lt;code&gt;/sys&lt;/code&gt;, &lt;code&gt;/dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;systemd &amp;amp; Services&lt;/li&gt;
&lt;li&gt;Logs &amp;amp; journald&lt;/li&gt;
&lt;li&gt;Cron &amp;amp; Scheduling&lt;/li&gt;
&lt;li&gt;Linux Security&lt;/li&gt;
&lt;li&gt;Firewall&lt;/li&gt;
&lt;li&gt;TLS/SSL Basics&lt;/li&gt;
&lt;li&gt;Web Server Basics&lt;/li&gt;
&lt;li&gt;Reverse Proxy&lt;/li&gt;
&lt;li&gt;Linux for Docker&lt;/li&gt;
&lt;li&gt;Linux for Kubernetes&lt;/li&gt;
&lt;li&gt;Performance Troubleshooting&lt;/li&gt;
&lt;li&gt;Production Troubleshooting&lt;/li&gt;
&lt;li&gt;Bash Automation&lt;/li&gt;
&lt;li&gt;DevOps Practical Tasks&lt;/li&gt;
&lt;li&gt;Interview Questions&lt;/li&gt;
&lt;li&gt;Scenario-Based Interview&lt;/li&gt;
&lt;li&gt;Hands-on Projects&lt;/li&gt;
&lt;li&gt;Final Checklist&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  1. Linux কী?
&lt;/h1&gt;

&lt;p&gt;Linux একটি &lt;strong&gt;open-source Unix-like operating system kernel&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;Linux system সাধারণত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Shell
  ↓
System Calls
  ↓
Linux Kernel
  ↓
Hardware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux কেন DevOps-এ গুরুত্বপূর্ণ?
&lt;/h3&gt;

&lt;p&gt;বেশিরভাগ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud server&lt;/li&gt;
&lt;li&gt;Web server&lt;/li&gt;
&lt;li&gt;Docker container&lt;/li&gt;
&lt;li&gt;Kubernetes node&lt;/li&gt;
&lt;li&gt;CI/CD runner&lt;/li&gt;
&lt;li&gt;Database server&lt;/li&gt;
&lt;li&gt;Monitoring server&lt;/li&gt;
&lt;li&gt;Production infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linux-এর উপর চলে।&lt;/p&gt;

&lt;p&gt;তাই DevOps engineer-এর জন্য Linux হলো foundational skill।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Linux Architecture
&lt;/h1&gt;

&lt;p&gt;Basic architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------------+
|        Applications     |
+-------------------------+
|        Shell            |
+-------------------------+
|     System Libraries    |
+-------------------------+
|     Linux Kernel        |
+-------------------------+
|        Hardware         |
+-------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Kernel
&lt;/h2&gt;

&lt;p&gt;Kernel manage করে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Processes&lt;/li&gt;
&lt;li&gt;Filesystem&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Devices&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  3. Linux Distribution
&lt;/h1&gt;

&lt;p&gt;জনপ্রিয় distributions:&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
Fedora
RHEL
Rocky Linux
AlmaLinux
Arch Linux
Amazon Linux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DevOps-এ বিশেষভাবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubuntu
Amazon Linux
RHEL-based systems
Debian
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;জানা useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Terminal &amp;amp; Shell
&lt;/h1&gt;

&lt;p&gt;Terminal হলো interface যেখানে command চালানো হয়।&lt;/p&gt;

&lt;p&gt;Shell command interpret করে।&lt;/p&gt;

&lt;p&gt;Popular shells:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;DevOps-এর জন্য &lt;strong&gt;Bash অবশ্যই শিখতে হবে।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check:&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="nv"&gt;$SHELL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Current shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nv"&gt;$$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  5. Linux Filesystem
&lt;/h1&gt;

&lt;p&gt;Linux filesystem tree:&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
├── opt
├── proc
├── root
├── run
├── sbin
├── srv
├── sys
├── tmp
├── usr
└── var
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  গুরুত্বপূর্ণ directories
&lt;/h2&gt;

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

&lt;p&gt;Root filesystem।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/home&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;User files।&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;/etc&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;System configuration।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/hosts
/etc/fstab
/etc/ssh/
/etc/systemd/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;/var&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Frequently changing data।&lt;/p&gt;

&lt;p&gt;Examples:&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
/var/cache
/var/lib
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;/tmp&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Temporary files।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/usr&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Applications, libraries, utilities।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/opt&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Optional/third-party applications।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/dev&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Device files।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/proc&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Kernel/process information।&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/sys&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Kernel/device information।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Navigation Commands
&lt;/h1&gt;

&lt;p&gt;Current 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;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Detailed:&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;Hidden:&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;Change 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; /etc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Home:&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;Previous 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;Parent:&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;h1&gt;
  
  
  7. File Management
&lt;/h1&gt;

&lt;p&gt;Create 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.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create 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;project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nested directories:&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/app
&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;file.txt backup.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy 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;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; project backup/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Move:&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;file.txt /tmp/
&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;old.txt new.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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;Delete 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;rm&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Force:&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; directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;code&gt;rm -rf&lt;/code&gt; production server-এ অত্যন্ত সতর্কতার সাথে ব্যবহার করতে হবে।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  8. Reading Files
&lt;/h1&gt;

&lt;p&gt;Small 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;cat &lt;/span&gt;file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Large file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;less file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First lines:&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;file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last lines:&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;file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last 100:&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; 100 app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow log:&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;-f&lt;/span&gt; app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  9. Searching Files
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /var/log &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"*.log"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search by type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; f
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-type&lt;/span&gt; d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Search recently modified:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-mtime&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  10. grep
&lt;/h1&gt;

&lt;p&gt;Text search:&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;grep&lt;/span&gt; &lt;span class="s2"&gt;"error"&lt;/span&gt; app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Case insensitive:&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;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"error"&lt;/span&gt; app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recursive:&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;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"database"&lt;/span&gt; /etc/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Line number:&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;grep&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"error"&lt;/span&gt; app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Invert match:&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;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"INFO"&lt;/span&gt; app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multiple patterns:&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;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"error|failed|critical"&lt;/span&gt; app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  11. Pipes
&lt;/h1&gt;

&lt;p&gt;Pipe একটি command-এর output অন্য command-এর input হিসেবে দেয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&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.log | &lt;span class="nb"&gt;grep &lt;/span&gt;ERROR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&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;grep &lt;/span&gt;ERROR app.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;python | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nb"&gt;grep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  12. Redirection
&lt;/h1&gt;

&lt;p&gt;Output 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="o"&gt;&amp;gt;&lt;/span&gt; files.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Append:&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="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; files.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Error redirect:&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;command &lt;/span&gt;2&amp;gt; error.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both stdout + stderr:&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;command&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; output.log 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modern Bash:&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;command&lt;/span&gt; &amp;amp;&amp;gt; output.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  13. Permissions
&lt;/h1&gt;

&lt;p&gt;Linux 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
w = write
x = execute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&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;Breakdown:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Owner      Group      Others
rwx        r-x        r--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Numeric permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r = 4
w = 2
x = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;7 = rwx
6 = rw-
5 = r-x
4 = r--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Therefore:&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;755 script.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Owner:  rwx
Group:  r-x
Others: r-x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  14. chmod
&lt;/h1&gt;

&lt;p&gt;Add execute:&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; +x script.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove write:&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;span class="nt"&gt;-w&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recursive:&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;span class="nt"&gt;-R&lt;/span&gt; 755 directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Symbolic:&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 script.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  15. chown
&lt;/h1&gt;

&lt;p&gt;Change owner:&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 chown &lt;/span&gt;user file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Owner + group:&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 chown &lt;/span&gt;user:group file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recursive:&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 chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; user:group directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  16. Users
&lt;/h1&gt;

&lt;p&gt;Current user:&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;whoami&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User ID:&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;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logged-in users:&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;who&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/etc/passwd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Password information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/etc/shadow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;/etc/shadow&lt;/code&gt; sensitive; normally readable only by privileged users.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  17. Groups
&lt;/h1&gt;

&lt;p&gt;Current groups:&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;Add user:&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;useradd &lt;span class="nt"&gt;-m&lt;/span&gt; devops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set password:&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;passwd devops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add to group:&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;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker devops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List groups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;getent group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  18. sudo
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; allows authorized users to execute commands with elevated privileges.&lt;/p&gt;

&lt;p&gt;Example:&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;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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/sudoers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit safely:&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;visudo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  19. Processes
&lt;/h1&gt;

&lt;p&gt;List processes:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;All processes:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

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

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;Better interactive monitor:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  20. Process IDs
&lt;/h1&gt;

&lt;p&gt;Every process has PID.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Find process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pgrep nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Process details:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  21. kill
&lt;/h1&gt;

&lt;p&gt;Terminate:&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;kill &lt;/span&gt;1234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Force:&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;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; 1234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important signals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SIGTERM = 15
SIGKILL = 9
SIGHUP  = 1
SIGINT  = 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer:&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;kill &lt;/span&gt;PID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;before:&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;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; PID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;because SIGTERM allows graceful shutdown।&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Background Processes
&lt;/h1&gt;

&lt;p&gt;Run background:&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;command&lt;/span&gt; &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jobs:&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;jobs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bring foreground:&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;fg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Background:&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;bg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Detach process:&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;nohup command&lt;/span&gt; &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  23. System Monitoring
&lt;/h1&gt;

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

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Disk:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Directory size:&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;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Load average:&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;uptime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;System 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;uname&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  24. Load Average
&lt;/h1&gt;

&lt;p&gt;Check:&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;uptime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;load average: 1.20, 0.80, 0.50
&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;1 minute
5 minutes
15 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;load average।&lt;/p&gt;

&lt;p&gt;Interview-এ মনে রাখবে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Load average শুধু CPU utilization নয়; runnable এবং কিছু ক্ষেত্রে uninterruptible tasks-এর চাপও reflect করতে পারে।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  25. Package Management
&lt;/h1&gt;

&lt;p&gt;Ubuntu/Debian:&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;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt remove nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RHEL/Fedora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arch:&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;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Package query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pacman &lt;span class="nt"&gt;-Qs&lt;/span&gt; nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DevOps engineer-এর জন্য distribution অনুযায়ী package manager জানা useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  26. Environment Variables
&lt;/h1&gt;

&lt;p&gt;Show:&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;env&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specific:&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="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set:&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;export &lt;/span&gt;&lt;span class="nv"&gt;APP_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check:&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="nv"&gt;$APP_ENV&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Permanent shell variable সাধারণত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.bashrc
~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;server/application configuration-এর ক্ষেত্রে environment variables খুব গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  27. PATH
&lt;/h1&gt;

&lt;p&gt;Check:&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="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কোন executable কোথায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;which python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আরও reliable:&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;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PATH-এর প্রতিটি 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;echo&lt;/span&gt; &lt;span class="nv"&gt;$PATH&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;':'&lt;/span&gt; &lt;span class="s1"&gt;'\n'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  28. Bash Scripting
&lt;/h1&gt;

&lt;p&gt;Basic:&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;#!/bin/bash&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello DevOps"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Variable:&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="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"DevOps"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Condition:&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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; app.log &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"File exists"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Loop:&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="k"&gt;for &lt;/span&gt;file &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;.log&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$file&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;backup&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Running backup"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  29. Exit Codes
&lt;/h1&gt;

&lt;p&gt;শেষ command-এর exit code:&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="nv"&gt;$?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 = success
non-zero = failure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Script:&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;command

&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$?&lt;/span&gt; &lt;span class="nt"&gt;-ne&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Command failed"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Failed"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Production scripts:&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;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর meaning বুঝতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  30. awk
&lt;/h1&gt;

&lt;p&gt;Column processing:&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;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $1, $2}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;logs&lt;/li&gt;
&lt;li&gt;metrics&lt;/li&gt;
&lt;li&gt;CSV-like text&lt;/li&gt;
&lt;li&gt;command output&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  31. sed
&lt;/h1&gt;

&lt;p&gt;Text replacement:&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;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/old/new/g'&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delete 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;sed&lt;/span&gt; &lt;span class="s1"&gt;'3d'&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configuration automation-এ sed frequently দেখা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  32. cut
&lt;/h1&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;"devops:linux:docker"&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;':'&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; 1
&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;devops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  33. sort
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sort &lt;/span&gt;file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reverse:&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;sort&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Numeric:&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;sort&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; numbers.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  34. uniq
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sort &lt;/span&gt;file.txt | &lt;span class="nb"&gt;uniq&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Count:&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;sort &lt;/span&gt;file.txt | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  35. Networking Fundamentals
&lt;/h1&gt;

&lt;p&gt;DevOps-এর জন্য networking অবশ্যই জানতে হবে।&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;IP
MAC
TCP
UDP
HTTP
HTTPS
DNS
DHCP
NAT
Routing
Ports
Sockets
Firewall
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  36. IP Address
&lt;/h1&gt;

&lt;p&gt;IPv4 example:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Private ranges:&lt;br&gt;
&lt;/p&gt;

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

172.16.0.0/12

192.168.0.0/16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip addr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  37. Routing
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip route
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;default via 192.168.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important interview concept:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Default gateway হলো এমন router যেখানে system unknown destinations-এর traffic পাঠায়।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  38. Connectivity
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;traceroute google.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;tracepath google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  39. Ports
&lt;/h1&gt;

&lt;p&gt;Listening ports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tulpn&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specific port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-lntp&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; :8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common ports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;22   SSH
53   DNS
80   HTTP
443  HTTPS
3306 MySQL
5432 PostgreSQL
6379 Redis
8000 FastAPI
8080 Common HTTP alternative
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  40. DNS
&lt;/h1&gt;

&lt;p&gt;DNS domain → IP resolve করে।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig google.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;nslookup google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;getent hosts google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DNS 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/resolv.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  41. curl
&lt;/h1&gt;

&lt;p&gt;HTTP request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"name":"Ragib"}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  http://localhost:8000/predict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DevOps troubleshooting-এর জন্য &lt;code&gt;curl&lt;/code&gt; অত্যন্ত গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  42. wget
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://example.com/file.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  43. SSH
&lt;/h1&gt;

&lt;p&gt;Remote server access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh user@server-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specific key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; key.pem user@server-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SSH config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  44. SSH Keys
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Public key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Private key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ssh/id_ed25519
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Private key কখনো share বা Git repository-তে commit করা যাবে না।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  45. SCP
&lt;/h1&gt;

&lt;p&gt;Copy local → remote:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp file.txt user@server:/tmp/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remote → local:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp user@server:/tmp/file.txt &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  46. rsync
&lt;/h1&gt;

&lt;p&gt;Efficient synchronization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rsync &lt;span class="nt"&gt;-av&lt;/span&gt; project/ server:/backup/project/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delete destination extras:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rsync &lt;span class="nt"&gt;-av&lt;/span&gt; &lt;span class="nt"&gt;--delete&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt;/ destination/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Production backup/deployment workflows-এ useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  47. Compression
&lt;/h1&gt;

&lt;p&gt;tar:&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;tar&lt;/span&gt; &lt;span class="nt"&gt;-cvf&lt;/span&gt; archive.tar directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extract:&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;tar&lt;/span&gt; &lt;span class="nt"&gt;-xvf&lt;/span&gt; archive.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;gzip:&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;tar&lt;/span&gt; &lt;span class="nt"&gt;-czvf&lt;/span&gt; archive.tar.gz directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extract:&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;tar&lt;/span&gt; &lt;span class="nt"&gt;-xzvf&lt;/span&gt; archive.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  48. Disk Management
&lt;/h1&gt;

&lt;p&gt;Disk usage:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-h&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;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /var/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Block devices:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Partitions:&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;fdisk &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  49. Mount
&lt;/h1&gt;

&lt;p&gt;Mount filesystem:&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;mount /dev/sdb1 /mnt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unmount:&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;umount /mnt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Persistent mounts:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  50. Inodes
&lt;/h1&gt;

&lt;p&gt;Filesystem শুধু file size দিয়ে manage করে না; inode-ও ব্যবহার করে।&lt;/p&gt;

&lt;p&gt;Check:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible problem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Disk space available
BUT
Inodes exhausted
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তখন নতুন file তৈরি করতে সমস্যা হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  51. &lt;code&gt;/proc&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;/proc&lt;/code&gt; virtual filesystem।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/proc/&amp;lt;PID&amp;gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/proc/cpuinfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/proc/meminfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/proc/uptime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  52. &lt;code&gt;/dev&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Device files।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/dev/sda
/dev/nvme0n1
/dev/null
/dev/zero
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/dev/null&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;command&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  53. &lt;code&gt;/dev/null&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;Anything written এখানে discard হয়।&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"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suppress output:&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;command&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  54. systemd
&lt;/h1&gt;

&lt;p&gt;Modern Linux systems-এ systemd service manager হিসেবে ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;Service status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl status nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start:&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;systemctl start nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stop:&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;systemctl stop nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart:&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;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable on boot:&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;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Disable:&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;systemctl disable nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  55. systemd Logs
&lt;/h1&gt;



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

&lt;/div&gt;



&lt;p&gt;Specific service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; nginx &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;--since&lt;/span&gt; &lt;span class="s2"&gt;"1 hour ago"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boot logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  56. Linux Logs
&lt;/h1&gt;

&lt;p&gt;Common location:&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;Examples:&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/syslog
/var/log/auth.log
/var/log/nginx/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Distribution অনুযায়ী filenames ভিন্ন হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  57. Log Rotation
&lt;/h1&gt;

&lt;p&gt;Long-running production systems-এ logs unlimited growth করলে disk full হতে পারে।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;logrotate
rotation
compression
retention
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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/logrotate.conf
/etc/logrotate.d/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  58. Cron
&lt;/h1&gt;

&lt;p&gt;Scheduled jobs।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crontab &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minute hour day month weekday command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 2 * * * /home/user/backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে প্রতিদিন রাত ২টায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  59. Linux Security
&lt;/h1&gt;

&lt;p&gt;Must know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users
Groups
Permissions
sudo
SSH
Firewall
SELinux/AppArmor
Secrets
Updates
Least privilege
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  60. Firewall
&lt;/h1&gt;

&lt;p&gt;Common tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ufw
firewalld
nftables
iptables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ubuntu example:&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;ufw status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allow SSH:&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;ufw allow 22
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allow HTTP:&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;ufw allow 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  61. SELinux / AppArmor
&lt;/h1&gt;

&lt;p&gt;Linux security frameworks।&lt;/p&gt;

&lt;p&gt;Know the concepts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mandatory Access Control
Policies
Security Context
Least Privilege
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RHEL ecosystem-এ SELinux গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;Ubuntu-তে AppArmor commonly দেখা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  62. Web Server Basics
&lt;/h1&gt;

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

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

&lt;/div&gt;



&lt;p&gt;Nginx can act as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Web Server
Reverse Proxy
Load Balancer
TLS Termination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  63. Reverse Proxy
&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;Client
  ↓
Nginx
  ↓
FastAPI
  ↓
ML Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nginx backend-এর সামনে থাকে।&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TLS termination&lt;/li&gt;
&lt;li&gt;routing&lt;/li&gt;
&lt;li&gt;load balancing&lt;/li&gt;
&lt;li&gt;buffering&lt;/li&gt;
&lt;li&gt;security controls&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  64. Linux + Docker
&lt;/h1&gt;

&lt;p&gt;Docker Linux-এর নিচের অনেক core concept ব্যবহার করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Namespaces
cgroups
filesystem layers
networking
process isolation
capabilities
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই Docker শেখার আগে Linux fundamentals শক্ত হওয়া খুব useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  65. Docker-এর জন্য Linux Knowledge
&lt;/h1&gt;

&lt;p&gt;বিশেষভাবে জানতে হবে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Process&lt;/li&gt;
&lt;li&gt;PID&lt;/li&gt;
&lt;li&gt;Namespace&lt;/li&gt;
&lt;li&gt;cgroups&lt;/li&gt;
&lt;li&gt;Filesystem&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;networking&lt;/li&gt;
&lt;li&gt;ports&lt;/li&gt;
&lt;li&gt;mounts&lt;/li&gt;
&lt;li&gt;signals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Container-এর ভিতরের process সাধারণত host-এর kernel ব্যবহার করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  66. Linux + Kubernetes
&lt;/h1&gt;

&lt;p&gt;Kubernetes node troubleshooting-এর জন্য:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps
top
free
&lt;span class="nb"&gt;df
du
&lt;/span&gt;ss
ip
journalctl
systemctl
curl
&lt;span class="nb"&gt;grep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;খুব ভালোভাবে জানতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  67. Kubernetes Troubleshooting Example
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CrashLoopBackOff
&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;kubectl logs pod-name
kubectl describe pod pod-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু underlying node problem হলে Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
free &lt;span class="nt"&gt;-h&lt;/span&gt;
top
systemctl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  68. CPU Troubleshooting
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU = 100%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;top
&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;htop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%cpu | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর determine করতে হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which process?
Why?
Application issue?
Infinite loop?
Too much traffic?
CPU throttling?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  69. Memory Troubleshooting
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%mem | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OOM-related logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dmesg | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; oom
&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;journalctl | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; oom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  70. Disk Full Troubleshooting
&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;&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&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;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specific:&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;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /var/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Large files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /var &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-size&lt;/span&gt; +1G
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check inode:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Potential causes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Huge logs
Docker images
Docker volumes
Deleted-but-open files
Temporary files
Backups
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  71. Deleted File Still Using Disk
&lt;/h1&gt;

&lt;p&gt;একটি process file delete করার পরেও file descriptor open রাখতে পারে।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof +L1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটা production troubleshooting interview-এ useful scenario।&lt;/p&gt;




&lt;h1&gt;
  
  
  72. Port Already in Use
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Address already in use
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-lntp&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; :8000
&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;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Process identify করে graceful stop করতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  73. Service Not Starting
&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;systemctl status service
&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;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; service
&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;systemctl &lt;span class="nb"&gt;cat &lt;/span&gt;service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর configuration validate।&lt;/p&gt;




&lt;h1&gt;
  
  
  74. Server Reachable কিন্তু Website কাজ করছে না
&lt;/h1&gt;

&lt;p&gt;Layer-by-layer troubleshoot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. DNS
2. Network
3. Port
4. Firewall
5. Web server
6. Reverse proxy
7. Application
8. Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig domain.com
ping server
ss &lt;span class="nt"&gt;-lntp&lt;/span&gt;
curl localhost
curl backend:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  75. HTTP Status Codes
&lt;/h1&gt;

&lt;p&gt;Must know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 OK
201 Created
204 No Content

301/302 Redirect

400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timeout
409 Conflict
429 Too Many Requests

500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  76. 502 vs 503 vs 504
&lt;/h1&gt;

&lt;h3&gt;
  
  
  502 Bad Gateway
&lt;/h3&gt;

&lt;p&gt;Proxy backend থেকে valid response পায়নি।&lt;/p&gt;

&lt;h3&gt;
  
  
  503 Service Unavailable
&lt;/h3&gt;

&lt;p&gt;Service available নয় বা overloaded হতে পারে।&lt;/p&gt;

&lt;h3&gt;
  
  
  504 Gateway Timeout
&lt;/h3&gt;

&lt;p&gt;Upstream response দিতে বেশি সময় নিয়েছে।&lt;/p&gt;

&lt;p&gt;DevOps interview-এ এগুলোর পার্থক্য জানা গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  77. TCP vs UDP
&lt;/h1&gt;

&lt;h3&gt;
  
  
  TCP
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connection-oriented&lt;/li&gt;
&lt;li&gt;Reliable&lt;/li&gt;
&lt;li&gt;Ordered&lt;/li&gt;
&lt;li&gt;Retransmission&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  UDP
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connectionless&lt;/li&gt;
&lt;li&gt;Lower overhead&lt;/li&gt;
&lt;li&gt;No guaranteed delivery&lt;/li&gt;
&lt;li&gt;Faster for suitable workloads&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TCP → HTTP/HTTPS, SSH
UDP → DNS queries commonly, streaming/real-time workloads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  78. TCP Connection States
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LISTEN
SYN-SENT
SYN-RECEIVED
ESTABLISHED
FIN-WAIT
TIME-WAIT
CLOSE-WAIT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tan&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  79. TIME_WAIT
&lt;/h1&gt;

&lt;p&gt;Connection close হওয়ার পর TCP কিছু সময় state ধরে রাখে যাতে delayed packets সমস্যা না করে।&lt;/p&gt;

&lt;p&gt;High traffic systems-এ অনেক TIME_WAIT দেখা যেতে পারে।&lt;/p&gt;

&lt;p&gt;Interview-এ শুধু “TIME_WAIT is bad” বলা ভুল।&lt;/p&gt;




&lt;h1&gt;
  
  
  80. File Descriptors
&lt;/h1&gt;

&lt;p&gt;Linux-এ process files, sockets ইত্যাদি file descriptors হিসেবে handle করে।&lt;/p&gt;

&lt;p&gt;Check limits:&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;ulimit&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Process open files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof &lt;span class="nt"&gt;-p&lt;/span&gt; PID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  81. Hard Link vs Soft Link
&lt;/h1&gt;

&lt;p&gt;Soft link:&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;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; original.txt link.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hard link:&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;ln &lt;/span&gt;original.txt hardlink.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Soft link
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;আলাদা inode&lt;/li&gt;
&lt;li&gt;target-এর path reference করে&lt;/li&gt;
&lt;li&gt;target delete হলে broken হতে পারে&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hard link
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;একই inode&lt;/li&gt;
&lt;li&gt;একই filesystem-এর মধ্যে সাধারণত&lt;/li&gt;
&lt;li&gt;original filename delete হলেও data থাকতে পারে&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  82. Symbolic Links in DevOps
&lt;/h1&gt;

&lt;p&gt;Common examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/etc/nginx/sites-enabled/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configuration management এবং system files-এ symbolic links দেখতে পাবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  83. Process vs Thread
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Process
&lt;/h3&gt;

&lt;p&gt;Independent execution context।&lt;/p&gt;

&lt;h3&gt;
  
  
  Thread
&lt;/h3&gt;

&lt;p&gt;একই process-এর মধ্যে execution unit।&lt;/p&gt;

&lt;p&gt;Threads সাধারণত একই process-এর memory share করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  84. Zombie Process
&lt;/h1&gt;

&lt;p&gt;Parent process child-এর exit status collect না করলে zombie process হতে পারে।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zombie kill করার বদলে সাধারণত parent process-এর issue investigate করতে হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  85. Orphan Process
&lt;/h1&gt;

&lt;p&gt;Parent process terminate হলে child orphan হতে পারে এবং system-এর init/systemd process তাকে adopt করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  86. Context Switching
&lt;/h1&gt;

&lt;p&gt;CPU এক execution context থেকে অন্যটিতে switch করে।&lt;/p&gt;

&lt;p&gt;Too many processes/threads context-switch overhead তৈরি করতে পারে।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vmstat
pidstat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  87. vmstat
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vmstat 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU
memory
swap
processes
I/O
context switching
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  88. iostat
&lt;/h1&gt;

&lt;p&gt;Disk I/O troubleshooting:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Useful metrics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IOPS
throughput
utilization
latency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  89. sar
&lt;/h1&gt;

&lt;p&gt;Historical/current system performance statistics-এর জন্য useful।&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sar &lt;span class="nt"&gt;-u&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sar &lt;span class="nt"&gt;-r&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sar &lt;span class="nt"&gt;-n&lt;/span&gt; DEV
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  90. Network Troubleshooting Toolkit
&lt;/h1&gt;

&lt;p&gt;Must know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip
ss
ping
traceroute
tracepath
dig
nslookup
curl
wget
nc
tcpdump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  91. netcat
&lt;/h1&gt;

&lt;p&gt;Port testing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; server 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful for checking TCP connectivity।&lt;/p&gt;




&lt;h1&gt;
  
  
  92. tcpdump
&lt;/h1&gt;

&lt;p&gt;Packet capture:&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;tcpdump &lt;span class="nt"&gt;-i&lt;/span&gt; any port 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HTTP traffic investigation:&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;tcpdump &lt;span class="nt"&gt;-i&lt;/span&gt; any host 10.0.0.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Advanced networking troubleshooting-এর জন্য গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  93. Linux Security Checklist
&lt;/h1&gt;

&lt;p&gt;Production server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Disable unnecessary services
[ ] Use SSH keys
[ ] Avoid root login
[ ] Use least privilege
[ ] Keep packages updated
[ ] Configure firewall
[ ] Protect secrets
[ ] Monitor logs
[ ] Rotate credentials
[ ] Backup critical data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  94. DevOps-এ Linux-এর সবচেয়ে গুরুত্বপূর্ণ Commands
&lt;/h1&gt;

&lt;p&gt;এই commandগুলো মুখস্থ না হলেও confidently ব্যবহার করতে পারতে হবে:&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
cp
mv
rm
mkdir
touch
cat
&lt;/span&gt;less
&lt;span class="nb"&gt;head
tail
grep
&lt;/span&gt;find
&lt;span class="nb"&gt;awk
sed
cut
sort
uniq
chmod
chown
sudo
&lt;/span&gt;ps
top
htop
&lt;span class="nb"&gt;kill
&lt;/span&gt;pkill
pgrep
free
&lt;span class="nb"&gt;df
du
&lt;/span&gt;lsblk
mount
ip
ss
ping
curl
wget
dig
nc
tcpdump
ssh
scp
rsync
&lt;span class="nb"&gt;tar
&lt;/span&gt;systemctl
journalctl
crontab
lsof
&lt;span class="nb"&gt;uname
uptime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  95. Production Troubleshooting Method
&lt;/h1&gt;

&lt;p&gt;কখনো random command চালানো উচিত নয়।&lt;/p&gt;

&lt;p&gt;এই framework follow করবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Identify the symptom
        ↓
2. Determine scope
        ↓
3. Check recent changes
        ↓
4. Check logs
        ↓
5. Check metrics
        ↓
6. Check resource usage
        ↓
7. Check network
        ↓
8. Reproduce if possible
        ↓
9. Fix
        ↓
10. Verify
        ↓
11. Document
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  96. DevOps Incident Example
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Problem
&lt;/h3&gt;

&lt;p&gt;Application suddenly slow।&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1
&lt;/h3&gt;

&lt;p&gt;Check CPU:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3
&lt;/h3&gt;

&lt;p&gt;Disk:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5
&lt;/h3&gt;

&lt;p&gt;Application logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6
&lt;/h3&gt;

&lt;p&gt;Recent deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What changed?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 7
&lt;/h3&gt;

&lt;p&gt;Check upstream/database.&lt;/p&gt;

&lt;p&gt;এভাবে systematic troubleshooting করতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  97. Linux + ML Inference Platform
&lt;/h1&gt;

&lt;p&gt;তোমার ML inference project-এ Linux knowledge সরাসরি লাগবে।&lt;/p&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;Linux Server
    ↓
Docker
    ↓
Kubernetes
    ↓
FastAPI
    ↓
ML Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;High CPU
    ↓
top

High memory
    ↓
free / ps

Disk full
    ↓
df / du

Port issue
    ↓
ss

Service issue
    ↓
systemctl / journalctl

Network issue
    ↓
ip / ss / curl / dig

Container issue
    ↓
docker logs / docker stats
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  98. Interview Preparation — Basic Questions
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Q1. Linux কী?
&lt;/h2&gt;

&lt;p&gt;Linux একটি open-source Unix-like operating system kernel; Linux distributions kernel-এর সাথে user-space tools ও package ecosystem প্রদান করে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q2. Kernel কী?
&lt;/h2&gt;

&lt;p&gt;Kernel hardware এবং applications-এর মধ্যে প্রধান interface হিসেবে কাজ করে এবং CPU, memory, processes, devices ও networking-এর মতো resources manage করে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q3. Linux-এ &lt;code&gt;/etc&lt;/code&gt; কী?
&lt;/h2&gt;

&lt;p&gt;System configuration files-এর প্রধান directory।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q4. &lt;code&gt;/var&lt;/code&gt; কী?
&lt;/h2&gt;

&lt;p&gt;Variable data যেমন logs, caches এবং application state-এর জন্য ব্যবহৃত হয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q5. Process কী?
&lt;/h2&gt;

&lt;p&gt;Running program-এর একটি execution instance।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q6. PID কী?
&lt;/h2&gt;

&lt;p&gt;Process Identifier।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q7. &lt;code&gt;kill -9&lt;/code&gt; কী করে?
&lt;/h2&gt;

&lt;p&gt;SIGKILL পাঠায়। Process graceful cleanup করার সুযোগ পায় না।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q8. &lt;code&gt;chmod 755&lt;/code&gt; কী?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Owner  = rwx
Group  = r-x
Other  = r-x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Q9. &lt;code&gt;chmod 644&lt;/code&gt; কী?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Owner  = rw-
Group  = r--
Other  = r--
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Q10. &lt;code&gt;sudo&lt;/code&gt; কী?
&lt;/h2&gt;

&lt;p&gt;Authorized user-কে privileged command execute করার সুযোগ দেয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  99. Intermediate Interview Questions
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Q11. Hard link এবং soft link-এর difference?
&lt;/h2&gt;

&lt;p&gt;Hard link একই inode-এর দিকে নির্দেশ করে; symbolic link একটি path reference করে এবং আলাদা inode ব্যবহার করে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q12. Zombie process কী?
&lt;/h2&gt;

&lt;p&gt;Child process terminate করেছে কিন্তু parent তার exit status collect করেনি—তখন zombie state হতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q13. Load average কী?
&lt;/h2&gt;

&lt;p&gt;System-এর runnable এবং কিছু uninterruptible work-এর queue/load-এর একটি time-windowed indication।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q14. &lt;code&gt;/proc&lt;/code&gt; কী?
&lt;/h2&gt;

&lt;p&gt;Kernel এবং process information expose করা virtual filesystem।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q15. &lt;code&gt;df&lt;/code&gt; এবং &lt;code&gt;du&lt;/code&gt; difference?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df → filesystem-level disk usage
du → directory/file-level usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Q16. &lt;code&gt;systemctl&lt;/code&gt; কী?
&lt;/h2&gt;

&lt;p&gt;systemd-managed services এবং system state control করার command।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q17. &lt;code&gt;journalctl&lt;/code&gt; কী?
&lt;/h2&gt;

&lt;p&gt;systemd journal-এর logs query করার tool।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q18. &lt;code&gt;ss&lt;/code&gt; কী?
&lt;/h2&gt;

&lt;p&gt;Network sockets এবং listening connections inspect করার tool।&lt;/p&gt;




&lt;h1&gt;
  
  
  100. Advanced Interview Questions
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Q19. Linux-এ একটি process CPU 100% ব্যবহার করলে কীভাবে troubleshoot করবে?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;top/htop
   ↓
identify PID
   ↓
ps
   ↓
inspect process
   ↓
logs
   ↓
application behavior
   ↓
profiling/metrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Q20. Disk 100% full। কী করবে?
&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;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /&lt;span class="k"&gt;*&lt;/span&gt;
find /var &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-size&lt;/span&gt; +1G
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
lsof +L1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর identify করে safe cleanup।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q21. Port 8080 already in use। কী করবে?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-lntp&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; :8080
&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;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর owning process identify করে root cause অনুযায়ী ব্যবস্থা নেব।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q22. Server ping করা যাচ্ছে কিন্তু application access করা যাচ্ছে না। কেন?
&lt;/h2&gt;

&lt;p&gt;Possible layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DNS
Firewall
Port
Service
Application
Reverse Proxy
Routing
Security Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Q23. Nginx 502 দিচ্ছে। কীভাবে troubleshoot করবে?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nginx status
    ↓
Nginx logs
    ↓
Backend service
    ↓
Backend port
    ↓
curl backend directly
    ↓
Application logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Q24. Memory শেষ হয়ে গেলে Linux কী করতে পারে?
&lt;/h2&gt;

&lt;p&gt;System swap ব্যবহার করতে পারে; extreme memory pressure-এ OOM killer process terminate করতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Q25. Docker container-এর Linux process কেন host-এর kernel ব্যবহার করে?
&lt;/h2&gt;

&lt;p&gt;Containers সাধারণত full VM নয়; Linux kernel-এর isolation primitives যেমন namespaces এবং cgroups ব্যবহার করে process/environment isolate করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  101. Scenario-Based Interview
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Scenario 1
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Production API suddenly returning 500.&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;1. Check application logs
2. Check recent deployment
3. Check dependencies
4. Check CPU/memory/disk
5. Check database/network
6. Reproduce request
7. Rollback if necessary
8. Verify recovery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Scenario 2
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;API latency suddenly increased.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU
Memory
Load
Network
Disk I/O
Database latency
Upstream services
Application logs
Recent changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Scenario 3
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Server disk full.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Check:&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;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /var/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt;
lsof +L1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common causes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Logs
Docker
Backups
Temporary files
Deleted open files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Scenario 4
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Kubernetes Pod বারবার restart করছে।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linux-level এবং Kubernetes-level দুটো দিক:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl logs
kubectl describe pod
        ↓
Application logs
        ↓
OOM?
CPU?
Configuration?
Dependency?
        ↓
Node health
        ↓
journalctl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  102. Hands-on Lab 1 — Linux Server
&lt;/h1&gt;

&lt;p&gt;একটি VM বা cloud server তৈরি করে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&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;nginx
git
docker
curl
htop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;SSH করো&lt;/li&gt;
&lt;li&gt;user তৈরি করো&lt;/li&gt;
&lt;li&gt;permissions change করো&lt;/li&gt;
&lt;li&gt;Nginx চালাও&lt;/li&gt;
&lt;li&gt;logs দেখো&lt;/li&gt;
&lt;li&gt;port check করো&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  103. Hands-on Lab 2 — Nginx
&lt;/h1&gt;

&lt;p&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;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl status nginx
&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 localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-lntp&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; :80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  104. Hands-on Lab 3 — Deploy FastAPI
&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;Linux VM
   ↓
Python
   ↓
FastAPI
   ↓
Uvicorn
   ↓
Nginx
   ↓
Internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটা তোমার ML inference platform-এর foundation হিসেবে ব্যবহার করতে পারো।&lt;/p&gt;




&lt;h1&gt;
  
  
  105. Hands-on Lab 4 — Monitoring
&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;top
free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
ss &lt;span class="nt"&gt;-lntp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;observe করবে।&lt;/p&gt;

&lt;p&gt;তারপর artificial load তৈরি করে CPU/memory behavior দেখবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  106. Hands-on Lab 5 — Bash Automation
&lt;/h1&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;backup.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 plaintext"&gt;&lt;code&gt;1. Application directory backup করবে
2. Timestamp যোগ করবে
3. tar.gz বানাবে
4. পুরনো backup delete করবে
5. success/failure log করবে
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর cron দিয়ে schedule করো।&lt;/p&gt;




&lt;h1&gt;
  
  
  107. Hands-on Lab 6 — Linux Troubleshooting
&lt;/h1&gt;

&lt;p&gt;নিজে intentionally problem তৈরি করো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stop nginx
Kill application
Fill temporary disk
Block a port
Wrong permissions
Wrong environment variable
Wrong DNS entry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর নিজে troubleshoot করো।&lt;/p&gt;

&lt;p&gt;এটা interview preparation-এর জন্য সবচেয়ে valuable exerciseগুলোর একটি।&lt;/p&gt;




&lt;h1&gt;
  
  
  108. DevOps Linux Skill Matrix
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linux basics&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filesystem&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permissions&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Users/Groups&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Processes&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Networking&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemd&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logs&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bash&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker/Linux relationship&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Troubleshooting&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk/storage&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP/IP&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nginx&lt;/td&gt;
&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cron&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;awk/sed&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tcpdump&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SELinux/AppArmor&lt;/td&gt;
&lt;td&gt;⭐⭐⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  109. 30-Day Linux → DevOps Foundation Plan
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Week 1 — Linux Basics
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 1
Linux + filesystem

Day 2
Navigation + file management

Day 3
Permissions + ownership

Day 4
Users + groups + sudo

Day 5
Processes + signals

Day 6
Package management

Day 7
Revision + practical lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Week 2 — Linux Administration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 8
Environment variables

Day 9
Bash basics

Day 10
grep + pipes

Day 11
awk + sed

Day 12
systemd

Day 13
journalctl + logs

Day 14
cron + automation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Week 3 — Networking + Storage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 15
IP + subnet basics

Day 16
TCP/UDP + ports

Day 17
DNS

Day 18
SSH

Day 19
curl + wget + nc

Day 20
Disk + filesystem

Day 21
mount + inode + troubleshooting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Week 4 — DevOps Linux
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 22
Nginx

Day 23
Reverse proxy

Day 24
Linux security

Day 25
Docker + Linux

Day 26
Kubernetes + Linux

Day 27
Performance troubleshooting

Day 28
Production troubleshooting

Day 29
Interview preparation

Day 30
Complete practical project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  110. Final Linux Project
&lt;/h1&gt;

&lt;p&gt;একটি complete mini-production environment বানাও:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Internet
                       |
                       v
                    Nginx
                       |
                       v
                   FastAPI
                       |
                       v
                  ML Model
                       |
                  +----+----+
                  |         |
                Logs      Metrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubuntu
Nginx
FastAPI
systemd
SSH
Firewall
Bash
cron
logging
monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] SSH authentication&lt;/li&gt;
&lt;li&gt;[ ] Non-root application user&lt;/li&gt;
&lt;li&gt;[ ] FastAPI service&lt;/li&gt;
&lt;li&gt;[ ] systemd service&lt;/li&gt;
&lt;li&gt;[ ] Nginx reverse proxy&lt;/li&gt;
&lt;li&gt;[ ] HTTPS&lt;/li&gt;
&lt;li&gt;[ ] firewall&lt;/li&gt;
&lt;li&gt;[ ] log rotation&lt;/li&gt;
&lt;li&gt;[ ] backup script&lt;/li&gt;
&lt;li&gt;[ ] cron&lt;/li&gt;
&lt;li&gt;[ ] monitoring&lt;/li&gt;
&lt;li&gt;[ ] troubleshooting documentation&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  111. Final Interview Checklist
&lt;/h1&gt;

&lt;p&gt;Interview-এর আগে confidently explain করতে পারবে:&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Linux architecture&lt;/li&gt;
&lt;li&gt;[ ] Kernel&lt;/li&gt;
&lt;li&gt;[ ] Filesystem&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;/etc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;/var&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;/proc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] permissions&lt;/li&gt;
&lt;li&gt;[ ] users/groups&lt;/li&gt;
&lt;li&gt;[ ] sudo&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Processes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] PID&lt;/li&gt;
&lt;li&gt;[ ] signals&lt;/li&gt;
&lt;li&gt;[ ] zombie&lt;/li&gt;
&lt;li&gt;[ ] orphan&lt;/li&gt;
&lt;li&gt;[ ] process vs thread&lt;/li&gt;
&lt;li&gt;[ ] CPU troubleshooting&lt;/li&gt;
&lt;li&gt;[ ] memory troubleshooting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] IP&lt;/li&gt;
&lt;li&gt;[ ] subnet&lt;/li&gt;
&lt;li&gt;[ ] routing&lt;/li&gt;
&lt;li&gt;[ ] TCP/UDP&lt;/li&gt;
&lt;li&gt;[ ] DNS&lt;/li&gt;
&lt;li&gt;[ ] ports&lt;/li&gt;
&lt;li&gt;[ ] sockets&lt;/li&gt;
&lt;li&gt;[ ] HTTP/HTTPS&lt;/li&gt;
&lt;li&gt;[ ] firewall&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Administration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] SSH&lt;/li&gt;
&lt;li&gt;[ ] systemd&lt;/li&gt;
&lt;li&gt;[ ] journalctl&lt;/li&gt;
&lt;li&gt;[ ] cron&lt;/li&gt;
&lt;li&gt;[ ] package management&lt;/li&gt;
&lt;li&gt;[ ] storage&lt;/li&gt;
&lt;li&gt;[ ] mount&lt;/li&gt;
&lt;li&gt;[ ] inode&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  DevOps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Linux + Docker&lt;/li&gt;
&lt;li&gt;[ ] Linux + Kubernetes&lt;/li&gt;
&lt;li&gt;[ ] Nginx&lt;/li&gt;
&lt;li&gt;[ ] reverse proxy&lt;/li&gt;
&lt;li&gt;[ ] Bash automation&lt;/li&gt;
&lt;li&gt;[ ] monitoring&lt;/li&gt;
&lt;li&gt;[ ] troubleshooting&lt;/li&gt;
&lt;li&gt;[ ] security&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🎯 Final Goal
&lt;/h1&gt;

&lt;p&gt;Linux শেখার উদ্দেশ্য শুধু command মুখস্থ করা নয়।&lt;/p&gt;

&lt;p&gt;তোমার goal হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"I can operate and troubleshoot a Linux production server."
&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;Linux
   ↓
Git
   ↓
Docker
   ↓
Kubernetes
   ↓
Terraform
   ↓
GitHub Actions
   ↓
ArgoCD
   ↓
Prometheus/Grafana
   ↓
Production DevOps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linux-এর ক্ষেত্রে বিশেষ করে command মুখস্থ করার চেয়ে troubleshooting skill বেশি গুরুত্বপূর্ণ।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;একজন DevOps engineer হিসেবে তুমি যেন একটি সমস্যা দেখে বলতে পারো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What is broken?
        ↓
Where is it broken?
        ↓
Why is it broken?
        ↓
How can I verify it?
        ↓
How can I fix it safely?
        ↓
How can I prevent it from happening again?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই এই Linux roadmap-এর মূল লক্ষ্য।&lt;/p&gt;

</description>
      <category>devops</category>
      <category>interview</category>
      <category>linux</category>
      <category>sre</category>
    </item>
    <item>
      <title>A Complete Guide to Writing Dockerfiles from Beginner to Production</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Mon, 07 Sep 2026 19:37:15 +0000</pubDate>
      <link>https://dev.to/ragibcs/a-complete-guide-to-writing-dockerfiles-from-beginner-to-production-3hc7</link>
      <guid>https://dev.to/ragibcs/a-complete-guide-to-writing-dockerfiles-from-beginner-to-production-3hc7</guid>
      <description>&lt;p&gt;Docker শিখতে গেলে সবচেয়ে গুরুত্বপূর্ণ জিনিসগুলোর একটি হলো &lt;strong&gt;Dockerfile&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;অনেকে Dockerfile-কে শুধু কয়েকটি command-এর 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; node:22&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু আসলে Dockerfile-এর প্রতিটি instruction-এর পেছনে একটি নির্দিষ্ট ধারণা আছে।&lt;/p&gt;

&lt;p&gt;কেন &lt;code&gt;FROM&lt;/code&gt; লাগবে?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;COPY&lt;/code&gt; আর &lt;code&gt;ADD&lt;/code&gt;-এর পার্থক্য কী?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RUN&lt;/code&gt; আর &lt;code&gt;CMD&lt;/code&gt; কি একই জিনিস?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; এবং &lt;code&gt;ENTRYPOINT&lt;/code&gt; কখন ব্যবহার করব?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ARG&lt;/code&gt; আর &lt;code&gt;ENV&lt;/code&gt; কখন?&lt;/p&gt;

&lt;p&gt;কেন &lt;code&gt;COPY package*.json ./&lt;/code&gt; আগে লিখলে build অনেক দ্রুত হয়?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.dockerignore&lt;/code&gt; কেন গুরুত্বপূর্ণ?&lt;/p&gt;

&lt;p&gt;Production-এ কেন multi-stage build ব্যবহার করা হয়?&lt;/p&gt;

&lt;p&gt;এই blog-এর শেষে তুমি শুধু Dockerfile পড়তে পারবে না—&lt;strong&gt;নিজে requirement দেখে Dockerfile design করতে পারবে।&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Dockerfile আসলে কী?
&lt;/h1&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Dockerfile হলো একটি text file যেখানে Docker image কীভাবে তৈরি হবে তার instructions লেখা থাকে।&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;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12&lt;/span&gt;

&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; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker এই instructions-গুলো &lt;strong&gt;উপর থেকে নিচে&lt;/strong&gt; execute করে image তৈরি করে। Docker-এর documentation অনুযায়ী Dockerfile একটি ordered set of instructions, এবং প্রতিটি instruction build-এর অংশ তৈরি করে।&lt;/p&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;Dockerfile
     ↓
docker build
     ↓
Docker Image
     ↓
docker run
     ↓
Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  2. Dockerfile এবং Docker Image-এর সম্পর্ক
&lt;/h1&gt;

&lt;p&gt;ধরো তোমার কাছে একটি Python application আছে।&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;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12&lt;/span&gt;

&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; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&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; my-python-app &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile
   ↓
FROM
   ↓
WORKDIR
   ↓
COPY
   ↓
RUN
   ↓
CMD
   ↓
Image
&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 run my-python-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image থেকে container তৈরি হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Dockerfile-এর basic structure
&lt;/h1&gt;

&lt;p&gt;একটি সাধারণ Dockerfile-এর structure:&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; base-image&lt;/span&gt;

&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; files .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;commands

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; VARIABLE=value&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8000&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; appuser&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["command"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সব Dockerfile-এ সব instruction থাকতে হবে—এমন নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Dockerfile-এর সবচেয়ে গুরুত্বপূর্ণ instructions
&lt;/h1&gt;

&lt;p&gt;Dockerfile-এ অনেক instruction আছে। সবচেয়ে বেশি যেগুলো ব্যবহার করবে:&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
COPY
ADD
WORKDIR
ENV
ARG
EXPOSE
USER
CMD
ENTRYPOINT
HEALTHCHECK
VOLUME
LABEL
SHELL
ONBUILD
STOPSIGNAL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker-এর official reference-এ এসব instruction-এর পাশাপাশি তাদের syntax ও behaviour বিস্তারিতভাবে দেওয়া আছে।&lt;/p&gt;

&lt;p&gt;শেখার priority হিসেবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
 ↓
WORKDIR
 ↓
COPY
 ↓
RUN
 ↓
ENV / ARG
 ↓
EXPOSE
 ↓
CMD
 ↓
ENTRYPOINT
 ↓
USER
 ↓
HEALTHCHECK
 ↓
Multi-stage build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  5. FROM — Dockerfile-এর starting point
&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; image&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 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;অথবা:&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; python:3.12&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:22-alpine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;FROM&lt;/code&gt; বলে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"আমার image কোন existing image-এর উপর তৈরি হবে?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Docker-এর নিয়ম অনুযায়ী &lt;code&gt;FROM&lt;/code&gt; একটি নতুন build stage শুরু করে এবং সাধারণ Dockerfile-এ এটিই প্রথম মূল instruction। একাধিক &lt;code&gt;FROM&lt;/code&gt; ব্যবহার করেও multi-stage build করা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Image tag কেন গুরুত্বপূর্ণ?
&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;FROM&lt;/span&gt;&lt;span class="s"&gt; python&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে version নির্দিষ্ট করা হয়নি।&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;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আরও predictable।&lt;/p&gt;

&lt;p&gt;আরও specific:&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; python:3.12.6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে কোন version ব্যবহার হচ্ছে তা নির্দিষ্ট থাকে।&lt;/p&gt;

&lt;p&gt;আরও reproducible build-এর জন্য image digest-ও ব্যবহার করা যায়:&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; python:3.12@sha256:...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তবে beginner হিসেবে শুরু করো:&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; python:3.12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  7. Alpine image কী?
&lt;/h1&gt;

&lt;p&gt;অনেক language-এর Alpine variant পাওয়া যায়:&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; node:22-alpine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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; python:3.12-alpine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alpine সাধারণত ছোট base image হিসেবে ব্যবহৃত হয়।&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"ছোট image" মানেই সব ক্ষেত্রে "best image" নয়।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;কিছু package বা native dependency-এর ক্ষেত্রে Debian/Ubuntu-based image ব্যবহার করা সহজ হতে পারে।&lt;/p&gt;

&lt;p&gt;তাই blindly &lt;code&gt;alpine&lt;/code&gt; ব্যবহার না করে application compatibility পরীক্ষা করতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. WORKDIR — container-এর working 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 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-এর জন্য working directory হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12&lt;/span&gt;

&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; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.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;WORKDIR /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;COPY . .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;মানে বর্তমান working location হবে &lt;code&gt;/app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Docker-এর documentation-ও unintended directory-তে কাজ এড়াতে explicit &lt;code&gt;WORKDIR&lt;/code&gt; ব্যবহারের best practice উল্লেখ করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  9. WORKDIR path manually mkdir করতে হয়?
&lt;/h1&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 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;প্রয়োজনে 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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; /app
&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;h1&gt;
  
  
  10. COPY — local files image-এ নেওয়া
&lt;/h1&gt;

&lt;p&gt;সবচেয়ে বেশি ব্যবহৃত instruction:&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; source destination&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;build context-এর files বর্তমান working directory-তে copy করো।&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;COPY&lt;/span&gt;&lt;span class="s"&gt; app.py /app/&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  11. COPY . . মানে কী?
&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অনেক beginner-কে confuse করে।&lt;/p&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;my-project/
├── Dockerfile
├── app.py
├── requirements.txt
└── config/
    └── settings.json
&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 build &lt;span class="nt"&gt;-t&lt;/span&gt; myapp &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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;build context = current directory
&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;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;/app/
├── Dockerfile
├── app.py
├── requirements.txt
└── config/
    └── settings.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তবে &lt;code&gt;.dockerignore&lt;/code&gt; থাকলে কিছু file বাদ যাবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  12. Build context বুঝতেই হবে
&lt;/h1&gt;

&lt;p&gt;এই 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 build &lt;span class="nt"&gt;-t&lt;/span&gt; myapp &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;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;খুব গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;এটি Docker-কে বলে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"এই directory-কে build context হিসেবে ব্যবহার করো।"&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;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; myapp ./backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে &lt;code&gt;./backend&lt;/code&gt; build context হবে।&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;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;লিখলে &lt;code&gt;.&lt;/code&gt; বলতে সেই build context-কে বোঝাবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. .dockerignore
&lt;/h1&gt;

&lt;p&gt;ধরো project directory-তে আছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules/
.git/
.env
logs/
dist/
Dockerfile
README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সবকিছু Docker build context-এ পাঠানোর দরকার নেই।&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;.dockerignore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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 plaintext"&gt;&lt;code&gt;node_modules
.git
.env
*.log
dist
coverage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker-এর documentation অনুযায়ী &lt;code&gt;.dockerignore&lt;/code&gt; build context থেকে files/directories বাদ দিতে ব্যবহার করা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. কেন .dockerignore এত গুরুত্বপূর্ণ?
&lt;/h1&gt;

&lt;p&gt;কারণ build context-এ unnecessary file পাঠালে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build slow
+
Large context
+
Potential secret exposure
+
Unnecessary data
&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;node_modules = 500 MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু application build করতে এটি context-এ পাঠানোরই দরকার নেই, কারণ container-এর ভেতরে dependency install করা যেতে পারে।&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;.dockerignore

node_modules
.git
.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;খুব সাধারণ এবং গুরুত্বপূর্ণ setup।&lt;/p&gt;




&lt;h1&gt;
  
  
  15. RUN — image build করার সময় command চালানো
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;RUN&lt;/code&gt; Dockerfile-এর অন্যতম গুরুত্বপূর্ণ instruction।&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-get 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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো &lt;strong&gt;image build-এর সময়&lt;/strong&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 shell"&gt;&lt;code&gt;docker build &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চালানোর সময় &lt;code&gt;RUN&lt;/code&gt; execute হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. RUN বনাম CMD
&lt;/h1&gt;

&lt;p&gt;এখানে beginners-এর সবচেয়ে common confusion।&lt;/p&gt;

&lt;h3&gt;
  
  
  RUN
&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;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;image build করার সময় npm install করো।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  CMD
&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;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;container চালু হলে default হিসেবে npm start execute করো।&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;docker build
    ↓
RUN
    ↓
Image তৈরি

docker run
    ↓
CMD / ENTRYPOINT
    ↓
Application start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  17. RUN দিয়ে application start করা উচিত?
&lt;/h1&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কারণ এটি build-এর সময় 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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  18. RUN-এর command combine করা
&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;RUN &lt;/span&gt;apt-get update

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

&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; git
&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;RUN &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; curl git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর ফলে Dockerfile clean থাকে এবং package-manager সম্পর্কিত state একই build step-এ handle করা যায়।&lt;/p&gt;

&lt;p&gt;Debian/Ubuntu package installation-এর ক্ষেত্রে stale package index রেখে যাওয়ার বদলে update/install একসাথে করা সাধারণত ভালো practice:&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-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; curl git &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/apt/lists/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  19. Shell form এবং Exec form
&lt;/h1&gt;

&lt;p&gt;Dockerfile-এ command লেখার দুটি গুরুত্বপূর্ণ style আছে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Shell form
&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;hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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; npm start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো shell-এর মাধ্যমে execute হতে পারে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Exec form
&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; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে JSON-array style ব্যবহার করা হয়েছে।&lt;/p&gt;

&lt;p&gt;বিশেষ করে &lt;code&gt;CMD&lt;/code&gt; এবং &lt;code&gt;ENTRYPOINT&lt;/code&gt;-এর ক্ষেত্রে exec form খুব গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;Docker-এর official reference shell form ও exec form দুটোই আলাদা করে ব্যাখ্যা করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  20. CMD — container-এর default command
&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;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12&lt;/span&gt;

&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; . .&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&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 myapp
&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;python app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চলবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  21. CMD overwrite করা যায়
&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; ["python", "app.py"]&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 myapp python test.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে default &lt;code&gt;CMD&lt;/code&gt; পরিবর্তিত হয়ে নতুন command execute হতে পারে।&lt;/p&gt;

&lt;p&gt;এই কারণেই &lt;code&gt;CMD&lt;/code&gt;-কে সাধারণত:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;default command&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;হিসেবে ভাবতে পারো।&lt;/p&gt;




&lt;h1&gt;
  
  
  22. ENTRYPOINT — container-এর executable
&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;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন container-এর primary executable হিসেবে এটিকে ধরা হচ্ছে।&lt;/p&gt;

&lt;p&gt;ENTRYPOINT এবং CMD একসঙ্গেও ব্যবহার করা যায়।&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;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["python"]&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["app.py"]&lt;/span&gt;
&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 shell"&gt;&lt;code&gt;python app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;চলবে।&lt;/p&gt;

&lt;p&gt;আর user command-line argument দিলে CMD অংশ replace হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  23. CMD বনাম ENTRYPOINT
&lt;/h1&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;ENTRYPOINT = আমি কী চালাব?
CMD        = default argument / default command কী?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি practical example:&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;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["python"]&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python app.py
&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 myapp test.py
&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;python test.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  24. কখন শুধু CMD ব্যবহার করব?
&lt;/h1&gt;

&lt;p&gt;Simple application হলে:&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; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যথেষ্ট হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  25. কখন ENTRYPOINT ব্যবহার করব?
&lt;/h1&gt;

&lt;p&gt;যখন container-কে একটি নির্দিষ্ট executable/tool হিসেবে 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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["python"]&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["app.py"]&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["./server"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  26. ENV — runtime environment variable
&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;ENV&lt;/span&gt;&lt;span class="s"&gt; APP_ENV=production&lt;/span&gt;
&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;APP_ENV=production
&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PORT=8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Application এটি ব্যবহার করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  27. ENV আর ARG-এর পার্থক্য
&lt;/h1&gt;

&lt;p&gt;এটি অবশ্যই বুঝতে হবে।&lt;/p&gt;

&lt;h2&gt;
  
  
  ARG
&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;ARG&lt;/span&gt;&lt;span class="s"&gt; VERSION=1.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ARG&lt;/code&gt; মূলত &lt;strong&gt;build-time variable&lt;/strong&gt;।&lt;/p&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;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2.0 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেওয়া যায়।&lt;/p&gt;

&lt;h2&gt;
  
  
  ENV
&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;ENV&lt;/span&gt;&lt;span class="s"&gt; APP_ENV=production&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ENV&lt;/code&gt; image/container 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 plaintext"&gt;&lt;code&gt;ARG → build-time
ENV → runtime environment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker-এর documentation অনুযায়ী &lt;code&gt;ARG&lt;/code&gt; build-time variable, এবং এটি final container environment-এ automatically available নয়; &lt;code&gt;ENV&lt;/code&gt; আলাদা behaviour রাখে।&lt;/p&gt;




&lt;h1&gt;
  
  
  28. ARG-এর গুরুত্বপূর্ণ security warning
&lt;/h1&gt;

&lt;p&gt;এটা অত্যন্ত গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;এভাবে secret দেওয়া উচিত নয়:&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="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;secret123 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কারণ Docker documentation অনুযায়ী build arguments secrets pass করার জন্য recommended নয়; এগুলো image history বা build provenance-এ প্রকাশিত হতে পারে। Secret-এর জন্য BuildKit secret mounts ব্যবহার করা উচিত।&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;ARG ≠ Secret storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  29. ENV-এও password রাখা উচিত?
&lt;/h1&gt;

&lt;p&gt;এটিও avoid করা উচিত।&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;ENV&lt;/span&gt;&lt;span class="s"&gt; DB_PASSWORD=supersecret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Credentials management-এর জন্য environment variables, secret manager, Docker secrets অথবা orchestration platform-এর secret mechanism ব্যবহার করা উচিত—application ও deployment environment অনুযায়ী।&lt;/p&gt;




&lt;h1&gt;
  
  
  30. EXPOSE — port সম্পর্কে documentation
&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;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর মানে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Application এই container port-এ listen করার কথা।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;কিন্তু &lt;code&gt;EXPOSE&lt;/code&gt; নিজে host port publish করে না।&lt;/p&gt;

&lt;p&gt;এটি খুব গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  31. EXPOSE বনাম -p
&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;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8080&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 &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 myapp
&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:8080
     ↓
Container:8080
&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;EXPOSE = metadata/documentation
-p      = actual port publishing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  32. USER — container কোন user হিসেবে চলবে
&lt;/h1&gt;

&lt;p&gt;Default ভাবে অনেক base image-এ root user থাকতে পারে।&lt;/p&gt;

&lt;p&gt;Production-এর জন্য non-root user ব্যবহার করা security-এর দিক থেকে ভালো practice।&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;useradd &lt;span class="nt"&gt;-m&lt;/span&gt; appuser

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; appuser&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর পরে container-এর process &lt;code&gt;appuser&lt;/code&gt; হিসেবে চলবে।&lt;/p&gt;

&lt;p&gt;তবে application-এর file permission ঠিকভাবে configure করতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  33. LABEL — image metadata
&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;LABEL&lt;/span&gt;&lt;span class="s"&gt; maintainer="example"&lt;/span&gt;
&lt;span class="k"&gt;LABEL&lt;/span&gt;&lt;span class="s"&gt; version="1.0"&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;LABEL&lt;/span&gt;&lt;span class="s"&gt; org.opencontainers.image.source="https://github.com/example/project"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Metadata রাখতে useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  34. HEALTHCHECK
&lt;/h1&gt;

&lt;p&gt;Container process চলছে মানেই application healthy—এমন নয়।&lt;/p&gt;

&lt;p&gt;ধরো application process চলছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PID exists ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু HTTP server response দিচ্ছে না:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;তাই &lt;code&gt;HEALTHCHECK&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;HEALTHCHECK&lt;/span&gt;&lt;span class="s"&gt; --interval=30s --timeout=5s \&lt;/span&gt;
  CMD curl -f http://localhost:8080/health || exit 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তখন Docker application-এর health যাচাই করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  35. ADD — কেন আলাদা?
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;ADD&lt;/code&gt; এবং &lt;code&gt;COPY&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; app.py /app/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সাধারণ local file copy-এর ক্ষেত্রে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;COPY-কে default choice হিসেবে ব্যবহার করো।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;ADD&lt;/code&gt; কিছু অতিরিক্ত behaviour দেয়, যেমন archive extraction এবং remote URL-related capabilities। Docker-এর reference-এ &lt;code&gt;ADD&lt;/code&gt; এবং &lt;code&gt;COPY&lt;/code&gt; আলাদা instruction হিসেবে defined।&lt;/p&gt;

&lt;p&gt;সাধারণ application-এর জন্য:&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বেশিরভাগ সময় যথেষ্ট।&lt;/p&gt;




&lt;h1&gt;
  
  
  36. প্রথম একটি Python Dockerfile
&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;project/
├── Dockerfile
├── requirements.txt
└── app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;app.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello Docker&lt;/span&gt;&lt;span class="sh"&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; python:3.12&lt;/span&gt;

&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; requirements.txt .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

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

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&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; hello-python &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 hello-python
&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 Docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  37. এই Dockerfile কীভাবে কাজ করল?
&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;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python environment নিলাম।&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;working directory &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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;শুধু dependency file copy করলাম।&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;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dependency install করলাম।&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; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;application code copy করলাম।&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; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;container start হলে application চালালাম।&lt;/p&gt;

&lt;p&gt;এটাই Dockerfile-এর fundamental pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Base
 ↓
Directory
 ↓
Dependencies
 ↓
Application
 ↓
Start command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  38. Node.js Dockerfile
&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;project/
├── Dockerfile
├── package.json
├── package-lock.json
└── src/
    └── index.js
&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; node:22-alpine&lt;/span&gt;

&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; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "src/index.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  39. কেন package.json আগে copy করা হলো?
&lt;/h1&gt;

&lt;p&gt;এই pattern:&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; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;খুব গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;কারণ Docker build cache reuse করতে পারে।&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;src/index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;পরিবর্তন করেছ।&lt;/p&gt;

&lt;p&gt;যদি dependency file অপরিবর্তিত থাকে, Docker cached dependency installation reuse করতে পারে।&lt;/p&gt;

&lt;p&gt;Docker-এর build cache instruction/layer reuse করে, এবং একটি layer invalidated হলে পরবর্তী layers-ও rebuild হতে পারে।&lt;/p&gt;

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

&lt;p&gt;খারাপ pattern:&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; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর সাধারণভাবে ভালো pattern:&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; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  40. Docker layer কী?
&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; node:22&lt;/span&gt;

&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; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে প্রতিটি build instruction image-এর build process-এর একটি layer/cacheable step তৈরি করতে পারে।&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;Layer 1 → FROM
Layer 2 → WORKDIR
Layer 3 → COPY package.json
Layer 4 → npm ci
Layer 5 → COPY source
Layer 6 → CMD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker cache ব্যবহার করে unchanged parts পুনরায় তৈরি না করে reuse করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  41. Cache invalidation বুঝে Dockerfile লিখো
&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; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তুমি code-এর একটি ছোট file পরিবর্তন করলেও:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;layer পরিবর্তিত হবে।&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;RUN npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটিও আবার execute হতে পারে।&lt;/p&gt;

&lt;p&gt;তাই dependency ও source code আলাদা করা ভালো:&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; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;এতে source পরিবর্তন করলে dependency installation cache করা সম্ভব।&lt;/p&gt;




&lt;h1&gt;
  
  
  42. Dockerfile order কেন এত গুরুত্বপূর্ণ?
&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 plaintext"&gt;&lt;code&gt;Least-changing files
        ↓
Most-changing files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই order অনুসরণ করে।&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;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json package-lock.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;/div&gt;



&lt;p&gt;এখানে dependency file কম change হয়।&lt;/p&gt;

&lt;p&gt;Source code বেশি change হয়।&lt;/p&gt;

&lt;p&gt;তাই expensive dependency installation আগে রেখে cache benefit পাওয়া যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  43. Python dependency caching pattern
&lt;/h1&gt;

&lt;p&gt;ভালো structure:&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; python:3.12&lt;/span&gt;

&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; requirements.txt .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

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

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কারণ source code change হলেও:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;না বদলালে dependency install cache reuse হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  44. Dockerfile-এ comments
&lt;/h1&gt;

&lt;p&gt;Comment:&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;# Base image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12&lt;/span&gt;

&lt;span class="c"&gt;# Application directory&lt;/span&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;Comments readability বাড়ায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  45. Environment variable ব্যবহার
&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 python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PORT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&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; python:3.12&lt;/span&gt;

&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; . .&lt;/span&gt;

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PORT=8000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&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 myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা runtime override:&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;-e&lt;/span&gt; &lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9000 myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  46. Build ARG ব্যবহার
&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;ARG&lt;/span&gt;&lt;span class="s"&gt; PYTHON_VERSION=3.12&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:${PYTHON_VERSION}&lt;/span&gt;

&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; . .&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&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="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;PYTHON_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.13 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-t&lt;/span&gt; myapp &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে build-time configuration পরিবর্তন করা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  47. ARG এবং FROM
&lt;/h1&gt;

&lt;p&gt;একটি বিশেষ case:&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;ARG&lt;/span&gt;&lt;span class="s"&gt; VERSION=3.12&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:${VERSION}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;FROM&lt;/code&gt;-এর আগে globally scoped &lt;code&gt;ARG&lt;/code&gt; ব্যবহার করা যায়। Docker-এর official reference-এ &lt;code&gt;ARG&lt;/code&gt; এবং &lt;code&gt;FROM&lt;/code&gt; interaction আলাদাভাবে documented।&lt;/p&gt;




&lt;h1&gt;
  
  
  48. Multi-stage build — production-এর জন্য অত্যন্ত গুরুত্বপূর্ণ
&lt;/h1&gt;

&lt;p&gt;ধরো Go application build করতে compiler লাগবে।&lt;/p&gt;

&lt;p&gt;Development stage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go compiler
Source code
Build tools
Dependencies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু final application চালাতে শুধু:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;দরকার।&lt;/p&gt;

&lt;p&gt;তাহলে কেন final image-এ compiler রাখবে?&lt;/p&gt;

&lt;p&gt;এখানেই &lt;strong&gt;multi-stage build&lt;/strong&gt;।&lt;/p&gt;




&lt;h1&gt;
  
  
  49. Multi-stage build-এর basic structure
&lt;/h1&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="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;golang:1.26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

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

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

&lt;span class="k"&gt;RUN &lt;/span&gt;go build &lt;span class="nt"&gt;-o&lt;/span&gt; app .

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; alpine:3.22&lt;/span&gt;

&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; --from=builder /src/app .&lt;/span&gt;

&lt;span class="k"&gt;CMD&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;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stage 1
builder
 ↓
compile application

Stage 2
runtime
 ↓
copy only binary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker-এর official documentation অনুযায়ী multi-stage build-এ একাধিক &lt;code&gt;FROM&lt;/code&gt; ব্যবহার করে build environment এবং final runtime environment আলাদা করা যায়; &lt;code&gt;COPY --from&lt;/code&gt; দিয়ে আগের stage থেকে প্রয়োজনীয় artifact আনা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  50. Multi-stage build কেন দরকার?
&lt;/h1&gt;

&lt;p&gt;এতে final image-এ থাকতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Only runtime dependencies
+
Application
&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;Compiler
Source build tools
Development dependencies
Debug tools
&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;Smaller image
+
Smaller attack surface
+
Cleaner production image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker-এর current guidance multi-stage builds-কে build বনাম runtime separation এবং final image optimization-এর জন্য recommended approach হিসেবে দেখায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  51. Node.js production multi-stage example
&lt;/h1&gt;

&lt;p&gt;একটি frontend application ধরো।&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="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:22-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&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; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build


&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; nginx:alpine&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/dist /usr/share/nginx/html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;Node image
   ↓
Install dependencies
   ↓
Build frontend
   ↓
dist/
   ↓
Nginx image
   ↓
Production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Final image-এ Node compiler/development dependencies রাখার দরকার নেই।&lt;/p&gt;




&lt;h1&gt;
  
  
  52. Python production multi-stage ধারণা
&lt;/h1&gt;

&lt;p&gt;Python-এ multi-stage একটু application-dependent।&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;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;python:3.12&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&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; requirements.txt .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/install &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt


&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12-slim&lt;/span&gt;

&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; --from=builder /install /usr/local&lt;/span&gt;

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

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে dependency install একটি builder stage-এ করা হচ্ছে এবং runtime image-এ তা copy করা হচ্ছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  53. Development এবং production Dockerfile এক নয়
&lt;/h1&gt;

&lt;p&gt;Development-এ তুমি চাইতে পারো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Debugger
Hot reload
Source code
Development dependencies
CLI tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Production-এ চাইতে পারো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Small image
Only required dependencies
Non-root user
Healthcheck
Deterministic dependencies
No secrets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই development এবং production requirements আলাদা করে চিন্তা করতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  54. Dockerfile security-এর মূল ধারণা
&lt;/h1&gt;

&lt;p&gt;একটি production Dockerfile-এর checklist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use trusted base image
Pin appropriate versions
Use .dockerignore
Do not bake secrets
Use non-root user
Use multi-stage builds
Keep image minimal
Remove unnecessary packages
Use vulnerability scanning
Define healthcheck where appropriate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  55. Secret কখনো COPY কোরো না
&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;.env
&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;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর মাধ্যমে accidentally secret image-এর build context-এ ঢুকে যেতে পারে।&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;.dockerignore
&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;.env
*.pem
*.key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;জাতীয় sensitive files বাদ দেওয়ার কথা বিবেচনা করো।&lt;/p&gt;




&lt;h1&gt;
  
  
  56. Secrets-এর জন্য ARG ব্যবহার না করা
&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;ARG&lt;/span&gt;&lt;span class="s"&gt; SECRET_KEY&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;"&lt;/span&gt;&lt;span class="nv"&gt;$SECRET_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; secret.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;docker build &lt;span class="nt"&gt;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;abc123 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কারণ sensitive data build metadata/history-তে expose হওয়ার risk আছে। Docker সরাসরি build arguments-এর মাধ্যমে secrets pass না করার সতর্কতা দেয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  57. BuildKit secret mount
&lt;/h1&gt;

&lt;p&gt;Sensitive build-time secret প্রয়োজন হলে BuildKit-এর secret mount ব্যবহার করা যায়।&lt;/p&gt;

&lt;p&gt;ধারণাগত example:&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="nt"&gt;--mount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;secret,id&lt;span class="o"&gt;=&lt;/span&gt;mysecret &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;cat&lt;/span&gt; /run/secrets/mysecret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build command environment অনুযায়ী secret:&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="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--secret&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mysecret,src&lt;span class="o"&gt;=&lt;/span&gt;secret.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি Docker-এর modern build tooling-এর secure secret mechanism-এর অংশ।&lt;/p&gt;




&lt;h1&gt;
  
  
  58. Non-root container
&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;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12-slim&lt;/span&gt;

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

&lt;span class="k"&gt;RUN &lt;/span&gt;useradd &lt;span class="nt"&gt;--create-home&lt;/span&gt; appuser

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --chown=appuser:appuser . .&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; appuser&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে application root হিসেবে চলছে না।&lt;/p&gt;

&lt;p&gt;এটি security hardening-এর একটি গুরুত্বপূর্ণ layer।&lt;/p&gt;




&lt;h1&gt;
  
  
  59. HEALTHCHECK practical example
&lt;/h1&gt;

&lt;p&gt;ধরো API server:&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; python:3.12-slim&lt;/span&gt;

&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; requirements.txt .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

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

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8000&lt;/span&gt;

&lt;span class="k"&gt;HEALTHCHECK&lt;/span&gt;&lt;span class="s"&gt; --interval=30s --timeout=5s \&lt;/span&gt;
    CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" \
    || exit 1

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python", "app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে &lt;code&gt;/health&lt;/code&gt; endpoint application-এর health report করবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  60. একটি complete production-oriented example
&lt;/h1&gt;

&lt;p&gt;ধরো FastAPI application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
├── Dockerfile
├── .dockerignore
├── requirements.txt
└── app/
    └── main.py
&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; python:3.12-slim&lt;/span&gt;

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

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PYTHONDONTWRITEBYTECODE=1&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PYTHONUNBUFFERED=1&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;useradd &lt;span class="nt"&gt;--create-home&lt;/span&gt; appuser

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; requirements.txt .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --chown=appuser:appuser ./app ./app&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; appuser&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;FROM
WORKDIR
ENV
RUN
COPY
USER
EXPOSE
CMD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  61. CMD-এর একটি common ভুল
&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; ["uvicorn app.main:app --host 0.0.0.0 --port 8000"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে পুরো command একটিমাত্র argument হয়ে যেতে পারে।&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; [&lt;/span&gt;
    "uvicorn",
    "app.main:app",
    "--host",
    "0.0.0.0",
    "--port",
    "8000"
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা single line:&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; ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  62. Dockerfile-এ &lt;code&gt;cd&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /app &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;WORKDIR&lt;/code&gt; Dockerfile-কে cleaner এবং predictable করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  63. Relative path বনাম absolute path
&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;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; app.py .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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;/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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; app.py /app/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;explicit।&lt;/p&gt;

&lt;p&gt;দুটিই valid, কিন্তু consistent style গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  64. &lt;code&gt;COPY . .&lt;/code&gt; সবসময় best নয়
&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; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু অনেক production Dockerfile-এ আরও precise হওয়া ভালো।&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;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; src ./src&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; public ./public&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;Clear
+
Less accidental files
+
Better control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তবে &lt;code&gt;.dockerignore&lt;/code&gt; সঠিক থাকলে &lt;code&gt;COPY . .&lt;/code&gt;-ও practical।&lt;/p&gt;




&lt;h1&gt;
  
  
  65. Dependency lock file ব্যবহার করো
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package-lock.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python ecosystem-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;poetry.lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modern dependency managers-এ lock file ব্যবহার reproducibility বাড়ায়।&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;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json package-lock.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci
&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;npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর বদলে CI/production build-এ lockfile-respecting:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;ভালো choice হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  66. Package install এবং cache
&lt;/h1&gt;

&lt;p&gt;Python:&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;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--no-cache-dir&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে pip-এর local package cache image-এ unnecessarily রেখে না দেওয়ার উদ্দেশ্য থাকে।&lt;/p&gt;

&lt;p&gt;Node:&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;npm ci
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং multi-stage production build-এ dev dependencies final image থেকে বাদ দিতে পারো।&lt;/p&gt;




&lt;h1&gt;
  
  
  67. One process per container?
&lt;/h1&gt;

&lt;p&gt;Docker-এর প্রচলিত design philosophy অনুযায়ী একটি container-কে একটি primary service/process-এর চারপাশে design করা সাধারণ এবং operationally সহজ।&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 1 → Nginx
Container 2 → API
Container 3 → PostgreSQL
Container 4 → Redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি giant container-এর মধ্যে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nginx
+
API
+
Database
+
Redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ঢোকানো সাধারণত ভালো architecture নয়।&lt;/p&gt;

&lt;p&gt;Multi-container application-এর জন্য পরে Docker Compose/Kubernetes-এর মতো orchestration layer শেখা দরকার।&lt;/p&gt;




&lt;h1&gt;
  
  
  68. Dockerfile এবং Docker Compose এক জিনিস নয়
&lt;/h1&gt;

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

&lt;blockquote&gt;
&lt;p&gt;একটি image কীভাবে build হবে?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Compose:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;একাধিক container/service কীভাবে একসাথে চলবে?&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;Dockerfile
   ↓
Build API image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API
 ↓
PostgreSQL
 ↓
Redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি complete application stack manage করবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  69. Dockerfile filename
&lt;/h1&gt;

&lt;p&gt;Default filename:&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;কোন extension লাগে না।&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.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ভুল।&lt;/p&gt;




&lt;h1&gt;
  
  
  70. Different Dockerfiles
&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;Dockerfile
Dockerfile.dev
Dockerfile.prod
Dockerfile.test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;রাখতে পারো।&lt;/p&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;-f&lt;/span&gt; Dockerfile.dev &lt;span class="nt"&gt;-t&lt;/span&gt; myapp:dev &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;docker build &lt;span class="nt"&gt;-f&lt;/span&gt; Dockerfile.prod &lt;span class="nt"&gt;-t&lt;/span&gt; myapp:prod &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  71. Build command পুরোপুরি বুঝে নাও
&lt;/h1&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; myapp &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;= image build&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;= image-এর name/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;= build context&lt;/p&gt;




&lt;h1&gt;
  
  
  72. Tag ব্যবহার
&lt;/h1&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; myapp:1.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;repository = myapp
tag        = 1.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 build &lt;span class="nt"&gt;-t&lt;/span&gt; myapp:latest &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা production-এ meaningful versioning:&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; myapp:2026.09.08 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  73. Build তারপর inspect
&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 build &lt;span class="nt"&gt;-t&lt;/span&gt; myapp &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Images:&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;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 myapp
&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;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&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;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;container&amp;gt; sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই basic commandগুলো Dockerfile শেখার সঙ্গে সঙ্গে practice করা জরুরি।&lt;/p&gt;




&lt;h1&gt;
  
  
  74. Dockerfile debug করার method
&lt;/h1&gt;

&lt;p&gt;Build error হলে প্রথমে দেখো কোন instruction fail করেছে।&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;Step 4/7 : RUN npm ci
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তার মানে dependency installation step-এ problem।&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 shell"&gt;&lt;code&gt;docker logs &amp;lt;container&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দেখো।&lt;/p&gt;

&lt;p&gt;Container-এর ভেতর 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 &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &amp;lt;container&amp;gt; sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  75. Shell না থাকলে?
&lt;/h1&gt;

&lt;p&gt;Slim/minimal image-এ সবসময় &lt;code&gt;bash&lt;/code&gt; নাও থাকতে পারে।&lt;/p&gt;

&lt;p&gt;যেমন Alpine image-এ সাধারণত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;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 &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; container sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  76. ENTRYPOINT-এর একটি গুরুত্বপূর্ণ বিষয়: signal handling
&lt;/h1&gt;

&lt;p&gt;Production container-এ application যেন OS signals ঠিকভাবে receive করে, তার জন্য exec form গুরুত্বপূর্ণ।&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;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["./server"]&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "server.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shell wrapper-এর মাধ্যমে unnecessarily:&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; ./start.sh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ব্যবহার করলে signal behaviour ভিন্ন হতে পারে।&lt;/p&gt;

&lt;p&gt;এজন্য process management ও PID 1 behaviour সম্পর্কে পরে শেখা গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  77. Shell script দিয়ে startup
&lt;/h1&gt;

&lt;p&gt;যদি script প্রয়োজন হয়:&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; entrypoint.sh /entrypoint.sh&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x /entrypoint.sh

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["/entrypoint.sh"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;entrypoint.sh&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="c"&gt;#!/bin/sh&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Starting application..."&lt;/span&gt;

&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$@&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে &lt;code&gt;exec&lt;/code&gt; ব্যবহার করলে child process proper PID/signal behaviour পেতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  78. Dockerfile lint ও checks
&lt;/h1&gt;

&lt;p&gt;Modern Docker build tooling-এ Dockerfile checks পাওয়া যায়।&lt;/p&gt;

&lt;p&gt;Dockerfile-এর syntax ও কিছু common issue detect করতে build/checking facilities ব্যবহার করা যায়। Docker-এর reference-এ parser directives এবং &lt;code&gt;check&lt;/code&gt; সম্পর্কিত capability-ও documented।&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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;জানলেই হবে না।&lt;/p&gt;

&lt;p&gt;Production-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build
+
Lint/check
+
Security scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;workflow রাখা ভালো।&lt;/p&gt;




&lt;h1&gt;
  
  
  79. Base image selection কীভাবে করবে?
&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;আমার application কী চালাতে চায়?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python হলে:&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; python:3.12-slim&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node হলে:&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; node:22-alpine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go হলে:&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="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;golang:1.26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর runtime image আলাদা হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  80. "সবচেয়ে ছোট image" খুঁজলেই হবে?
&lt;/h1&gt;

&lt;p&gt;না।&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;Harder debugging
+
Missing libraries
+
Compatibility problems
+
More complexity
&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;Small enough, secure enough, maintainable enough, reproducible enough.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  81. Dockerfile-এ package cleanup কেন করা হয়?
&lt;/h1&gt;

&lt;p&gt;Ubuntu/Debian:&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-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; curl &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/apt/lists/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে package index cleanup করা হচ্ছে যাতে unnecessary package metadata image-এ পড়ে না থাকে।&lt;/p&gt;




&lt;h1&gt;
  
  
  82. Multiple RUN বনাম single RUN
&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;RUN &lt;/span&gt;apt-get update
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; curl
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/apt/lists/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এর চেয়ে এই pattern সাধারণত ভালো:&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-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; curl &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/apt/lists/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কারণ related package setup একটি coherent build step-এ রাখা হয়।&lt;/p&gt;

&lt;p&gt;তবে "সব RUN সবসময় এক লাইনে combine করতে হবে"—এমন কোনো rule নেই।&lt;/p&gt;

&lt;p&gt;Readability ও caching-এর balance রাখতে হবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  83. Dockerfile design করার formula
&lt;/h1&gt;

&lt;p&gt;একটি নতুন application পেলে এই প্রশ্নগুলো করো:&lt;/p&gt;

&lt;h3&gt;
  
  
  প্রশ্ন ১
&lt;/h3&gt;

&lt;p&gt;Application কোন runtime চায়?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Python?
Node?
Java?
Go?
Rust?
PHP?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ২
&lt;/h3&gt;

&lt;p&gt;কোন base image?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;official/runtime image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ৩
&lt;/h3&gt;

&lt;p&gt;Working directory?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ৪
&lt;/h3&gt;

&lt;p&gt;কী dependencies দরকার?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requirements.txt
package.json
pom.xml
go.mod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ৫
&lt;/h3&gt;

&lt;p&gt;কীভাবে install হবে?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ৬
&lt;/h3&gt;

&lt;p&gt;কোন files copy করতে হবে?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ৭
&lt;/h3&gt;

&lt;p&gt;কোন port?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ৮
&lt;/h3&gt;

&lt;p&gt;কী command দিয়ে application start হবে?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ৯
&lt;/h3&gt;

&lt;p&gt;Production image আরও ছোট করা যায়?&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  প্রশ্ন ১০
&lt;/h3&gt;

&lt;p&gt;Security hardening কী?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USER
.dockerignore
No secrets
Minimal packages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই ১০টি প্রশ্নের উত্তর দিতে পারলে তুমি বেশিরভাগ application-এর Dockerfile লিখতে পারবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  84. Beginner Dockerfile Template
&lt;/h1&gt;

&lt;p&gt;সবচেয়ে basic template:&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; &amp;lt;base-image&amp;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="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; &amp;lt;dependency-files&amp;gt; .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&amp;lt;install-dependencies&amp;gt;

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

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; &amp;lt;port&amp;gt;&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["&amp;lt;command&amp;gt;", "&amp;lt;arg&amp;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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:22-alpine&lt;/span&gt;

&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; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  85. Production Dockerfile Template
&lt;/h1&gt;

&lt;p&gt;আরও production-oriented structure:&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="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;builder-image&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&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; dependency-files ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;&amp;lt;&lt;span class="nb"&gt;install&lt;/span&gt;/build&amp;gt;

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

&lt;span class="k"&gt;RUN &lt;/span&gt;&amp;lt;build&amp;gt;


&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; &amp;lt;runtime-image&amp;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="k"&gt;RUN &lt;/span&gt;&amp;lt;create-non-root-user&amp;gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder &amp;lt;artifact&amp;gt; &amp;lt;destination&amp;gt;&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; &amp;lt;non-root-user&amp;gt;&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; &amp;lt;port&amp;gt;&lt;/span&gt;

&lt;span class="k"&gt;HEALTHCHECK&lt;/span&gt;&lt;span class="s"&gt; ...&lt;/span&gt;

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["..."]&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;সব application-এ এই exact template লাগবে না, কিন্তু design pattern হিসেবে অত্যন্ত useful।&lt;/p&gt;




&lt;h1&gt;
  
  
  86. Common mistakes
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Mistake 1 — Dockerfile-এর শেষে extension
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dockerfile.txt
&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;Dockerfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Mistake 2 — &lt;code&gt;RUN npm start&lt;/code&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 docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;npm start
&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; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Mistake 3 — Secret COPY করা
&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;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং &lt;code&gt;.env&lt;/code&gt; ignore না করা।&lt;/p&gt;

&lt;p&gt;এটি dangerous হতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 4 — &lt;code&gt;ARG&lt;/code&gt; দিয়ে secret
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;secret storage হিসেবে ব্যবহার করা উচিত নয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 5 — Dependency cache নষ্ট করা
&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;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci
&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;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ভালো।&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 6 — Container root হিসেবে চালানো
&lt;/h2&gt;

&lt;p&gt;সম্ভব হলে non-root user ব্যবহার করো।&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 7 — Production-এ development tools রেখে দেওয়া
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gcc
go compiler
Node build tools
debug utilities
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এসব final runtime image-এ সবসময় প্রয়োজন নেই।&lt;/p&gt;

&lt;p&gt;Multi-stage build দিয়ে আলাদা করা যায়।&lt;/p&gt;




&lt;h2&gt;
  
  
  Mistake 8 — &lt;code&gt;COPY . .&lt;/code&gt; দিয়ে সবকিছু ঢুকিয়ে দেওয়া
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;.dockerignore&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;.git
node_modules
.env
logs
build artifacts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অনিচ্ছাকৃতভাবে build context-এ ঢুকতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  87. একটি real-world workflow
&lt;/h1&gt;

&lt;p&gt;ধরো তোমার Node API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-api/
├── src/
├── package.json
├── package-lock.json
├── .env
├── node_modules/
└── Dockerfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h3&gt;
  
  
  Step 1
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;.dockerignore&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;node_modules
.git
.env
npm-debug.log
coverage
dist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2
&lt;/h3&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; node:22-alpine&lt;/span&gt;

&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; package*.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "src/index.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3
&lt;/h3&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; my-api &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4
&lt;/h3&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 &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 my-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5
&lt;/h3&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:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই workflow-টাই Dockerfile শেখার জন্য খুব effective।&lt;/p&gt;




&lt;h1&gt;
  
  
  88. Dockerfile-এর mental model
&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 plaintext"&gt;&lt;code&gt;FROM
আমি কোথা থেকে শুরু করছি?

WORKDIR
আমি কোথায় কাজ করছি?

COPY
কী কী দরকার?

RUN
Image build হওয়ার সময় কী করতে হবে?

ENV / ARG
Configuration কোথায়?

EXPOSE
Application কোন port-এ?

USER
কে application চালাবে?

HEALTHCHECK
Application healthy কিনা কীভাবে জানব?

ENTRYPOINT / CMD
Container start হলে কী হবে?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই mental model তৈরি হয়ে গেলে Dockerfile আর মুখস্থ করতে হবে না।&lt;/p&gt;




&lt;h1&gt;
  
  
  89. Dockerfile শেখার জন্য ৫টি project
&lt;/h1&gt;

&lt;p&gt;শুধু theory পড়লে Dockerfile পুরোপুরি শেখা যাবে না।&lt;/p&gt;

&lt;p&gt;এই sequence-এ project করো।&lt;/p&gt;

&lt;h3&gt;
  
  
  Project 1 — Python CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Python script
 ↓
Dockerfile
 ↓
Image
 ↓
Container
&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;FROM
WORKDIR
COPY
CMD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Project 2 — Node API
&lt;/h3&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.json
npm ci
EXPOSE
ENV
.dockerignore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Project 3 — FastAPI/Flask
&lt;/h3&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;Port
Environment variable
USER
HEALTHCHECK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Project 4 — React/Vite
&lt;/h3&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;Multi-stage build
Node builder
Nginx runtime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Project 5 — Full stack
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
+
Backend
+
Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Dockerfile-এর সঙ্গে Docker Compose শেখা শুরু করবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  90. Dockerfile বনাম Image বনাম Container
&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;Dockerfile
    │
    │ docker build
    ↓
Docker Image
    │
    │ docker run
    ↓
Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dockerfile
&lt;/h3&gt;

&lt;p&gt;Recipe।&lt;/p&gt;

&lt;h3&gt;
  
  
  Image
&lt;/h3&gt;

&lt;p&gt;Built package/template।&lt;/p&gt;

&lt;h3&gt;
  
  
  Container
&lt;/h3&gt;

&lt;p&gt;Running instance।&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 = রান্নার recipe
Image      = তৈরি খাবারের package
Container  = সেই package থেকে চালু হওয়া instance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  91. Dockerfile-এর সবচেয়ে important ১২টি instruction
&lt;/h1&gt;

&lt;p&gt;শুরুতে এইগুলো solid করো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM
WORKDIR
COPY
RUN
ENV
ARG
EXPOSE
USER
CMD
ENTRYPOINT
HEALTHCHECK
&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;.dockerignore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অবশ্যই শিখবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  92. Production-level Dockerfile checklist
&lt;/h1&gt;

&lt;p&gt;Deploy করার আগে নিজের Dockerfile-কে জিজ্ঞাসা করো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ ] Base image কি যথাযথ?
[ ] Version কি predictable?
[ ] WORKDIR explicitly set?
[ ] .dockerignore আছে?
[ ] Dependency আগে copy করা হয়েছে?
[ ] Cache ভালোভাবে ব্যবহার হচ্ছে?
[ ] Unnecessary packages বাদ?
[ ] Secrets image-এ ঢুকছে না?
[ ] ARG দিয়ে secret দেওয়া হচ্ছে না?
[ ] Non-root user ব্যবহার করা যায়?
[ ] Multi-stage build দরকার কি?
[ ] Correct EXPOSE?
[ ] Correct CMD/ENTRYPOINT?
[ ] Healthcheck প্রয়োজন?
[ ] Final image unnecessarily বড় কি?
[ ] Dependency lock file ব্যবহার করা হয়েছে?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  93. একটি complete example — সবকিছু একসঙ্গে
&lt;/h1&gt;

&lt;p&gt;ধরো Node backend production-এর জন্য:&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;# syntax=docker/dockerfile:1&lt;/span&gt;

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:22-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&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; package.json package-lock.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

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

&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build


&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:22-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;production&lt;/span&gt;

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

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; NODE_ENV=production&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;addgroup &lt;span class="nt"&gt;-S&lt;/span&gt; appgroup &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    adduser &lt;span class="nt"&gt;-S&lt;/span&gt; appuser &lt;span class="nt"&gt;-G&lt;/span&gt; appgroup

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json package-lock.json ./&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci &lt;span class="nt"&gt;--omit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dev

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder --chown=appuser:appgroup /app/dist ./dist&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; appuser&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;HEALTHCHECK&lt;/span&gt;&lt;span class="s"&gt; --interval=30s --timeout=5s \&lt;/span&gt;
    CMD wget --spider -q http://localhost:3000/health || exit 1

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "dist/index.js"]&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;syntax directive
        ↓
multi-stage build
        ↓
WORKDIR
        ↓
dependency caching
        ↓
npm ci
        ↓
production dependencies
        ↓
non-root user
        ↓
EXPOSE
        ↓
HEALTHCHECK
        ↓
CMD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এ ধরনের structure production Dockerfile বোঝার জন্য একটি ভালো reference pattern।&lt;/p&gt;




&lt;h1&gt;
  
  
  94. Dockerfile লেখার golden rules
&lt;/h1&gt;

&lt;p&gt;এগুলো মুখস্থ করার চেয়ে বুঝে রাখো:&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 1
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Base image carefully choose করো।&lt;/strong&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; python:3.12-slim&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rule 2
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;WORKDIR explicitly set করো।&lt;/strong&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;h3&gt;
  
  
  Rule 3
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dependency files আগে copy করো।&lt;/strong&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; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rule 4
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Source code পরে copy করো।&lt;/strong&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; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rule 5
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Build command আর startup command আলাদা করো।&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;RUN → build time
CMD → runtime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rule 6
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Secret Dockerfile-এ bake কোরো না।&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 7
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;.dockerignore&lt;/code&gt; ব্যবহার করো।&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 8
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Production-এ non-root user বিবেচনা করো।&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 9
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Compiled/build-heavy applications-এ multi-stage build ব্যবহার করো।&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 10
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Docker cache কীভাবে কাজ করে তা বুঝে instruction order করো।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Docker-এর current build guidance-ও cache efficiency, multi-stage builds এবং clean runtime images-এর ওপর বিশেষ গুরুত্ব দেয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  95. শেষ পর্যন্ত Dockerfile কীভাবে নিজে লিখবে?
&lt;/h1&gt;

&lt;p&gt;এখন ধরো তোমাকে একজন বলল:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"আমার একটি Java Spring Boot application আছে। এর Dockerfile লিখে দাও।"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;তখন তোমার মাথায় automatically এই প্রশ্নগুলো আসা উচিত:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. কোন Java version?
2. কোন build system?
   Maven না Gradle?
3. Dependency file কোনটি?
4. Build artifact কী?
5. Application কোন port-এ চলে?
6. Runtime-এর জন্য পুরো JDK লাগবে?
7. JRE/runtime image যথেষ্ট?
8. Multi-stage build করা যায়?
9. Non-root user ব্যবহার করা যায়?
10. Health endpoint আছে?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Builder stage
    ↓
Copy dependency descriptors
    ↓
Download dependencies
    ↓
Copy source
    ↓
Build
    ↓
Runtime stage
    ↓
Copy artifact
    ↓
USER
    ↓
EXPOSE
    ↓
ENTRYPOINT/CMD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই Dockerfile লেখার আসল skill।&lt;/p&gt;




&lt;h1&gt;
  
  
  96. সবচেয়ে গুরুত্বপূর্ণ বিষয়
&lt;/h1&gt;

&lt;p&gt;Dockerfile শেখার সময় &lt;strong&gt;instruction মুখস্থ করার চেষ্টা কোরো না&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;FROM
    ↓
Environment কোথা থেকে?

WORKDIR
    ↓
কোথায় কাজ?

COPY
    ↓
কী দরকার?

RUN
    ↓
Build-এর সময় কী করতে হবে?

ENV / ARG
    ↓
Configuration কী?

USER
    ↓
কে process চালাবে?

EXPOSE
    ↓
কোন port?

HEALTHCHECK
    ↓
Healthy কিনা কীভাবে বুঝব?

ENTRYPOINT / CMD
    ↓
Container start হলে কী করবে?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই logic বুঝে গেলে language বদলালেও Dockerfile লিখতে পারবে।&lt;/p&gt;

&lt;p&gt;Python:&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; python:3.12-slim&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Node:&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; node:22-alpine&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&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; eclipse-temurin:21&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go:&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="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;golang:1.26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Language আলাদা হলেও Dockerfile-এর চিন্তার পদ্ধতি একই থাকে।&lt;/p&gt;




&lt;h1&gt;
  
  
  97. এক লাইনে পুরো Dockerfile philosophy
&lt;/h1&gt;

&lt;p&gt;শেষে এই pattern-টি মনে রাখো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Choose base
     ↓
Set working directory
     ↓
Copy dependency files
     ↓
Install dependencies
     ↓
Copy source code
     ↓
Build application
     ↓
Remove unnecessary build/runtime baggage
     ↓
Create non-root runtime
     ↓
Expose application port
     ↓
Define health
     ↓
Define startup command
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর production application হলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;           Dockerfile
               │
               ↓
       Multi-stage build
          ┌────┴────┐
          ↓         ↓
       Builder    Runtime
          │         │
    Build tools    Minimal
    Dependencies   Dependencies
    Source         Artifact
          │         │
          └────┬────┘
               ↓
        Small production
             image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই mental model আয়ত্ত করতে পারলে Dockerfile আর "মুখস্থ করার syntax" থাকবে না—এটি হয়ে যাবে &lt;strong&gt;application packaging ও deployment design-এর একটি tool&lt;/strong&gt;।&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>TCP (Transmission Control Protocol) বাংলায়: Port, Segment, 3-Way Handshake, Sequence, ACK, Window, Retransmission ও Connection Closing</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Wed, 02 Sep 2026 07:57:06 +0000</pubDate>
      <link>https://dev.to/ragibcs/tcp-transmission-control-protocol-baanlaayy-port-segment-3-way-handshake-sequence-ack-window-1d73</link>
      <guid>https://dev.to/ragibcs/tcp-transmission-control-protocol-baanlaayy-port-segment-3-way-handshake-sequence-ack-window-1d73</guid>
      <description>&lt;h2&gt;
  
  
  ভূমিকা: TCP আসলে কী?
&lt;/h2&gt;

&lt;p&gt;ইন্টারনেটে আমরা সাধারণত খুব সহজভাবে বলি:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Client সার্ভারকে একটা request পাঠালো, server response দিল।”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;কিন্তু operating system এবং networking stack-এর নিচে ঘটনাটা অনেক বেশি সংগঠিত।&lt;/p&gt;

&lt;p&gt;তুমি browser-এ একটি URL লিখলে application layer থেকে শুরু করে TCP, IP, Data Link এবং physical medium পর্যন্ত একাধিক ধাপে data encapsulate হয়। TCP এই পুরো যাত্রায় &lt;strong&gt;connection-oriented, ordered এবং reliable byte-stream communication&lt;/strong&gt; দেওয়ার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে।&lt;/p&gt;

&lt;p&gt;দেওয়া ক্লাস-নোটে এই ধারণাটা খুব practicalভাবে বোঝানো হয়েছে: application layer শুধু বলে “আমি data পাঠাতে চাই”; transport layer সেই data-কে TCP segment-এ সাজিয়ে নিচের layer-এ পাঠায়।&lt;/p&gt;

&lt;p&gt;বাস্তব TCP বোঝার জন্য আমাদের কয়েকটি জিনিস গভীরভাবে বুঝতে হবে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Port&lt;/li&gt;
&lt;li&gt;TCP segment ও header&lt;/li&gt;
&lt;li&gt;Sequence Number&lt;/li&gt;
&lt;li&gt;Acknowledgment Number&lt;/li&gt;
&lt;li&gt;SYN / ACK / FIN / RST&lt;/li&gt;
&lt;li&gt;Three-Way Handshake&lt;/li&gt;
&lt;li&gt;Flow Control ও Window&lt;/li&gt;
&lt;li&gt;Checksum&lt;/li&gt;
&lt;li&gt;Retransmission&lt;/li&gt;
&lt;li&gt;MSS ও TCP Options&lt;/li&gt;
&lt;li&gt;Four-Step Connection Termination&lt;/li&gt;
&lt;li&gt;Full duplex communication&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  1. প্রথমে একটি mental model তৈরি করি
&lt;/h1&gt;

&lt;p&gt;ধরো দুইটি computer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+------------------+ +------------------+
| CLIENT | | SERVER |
| | | |
| Browser / App | | Web Server |
| TCP | &amp;lt;---------------------&amp;gt; | TCP |
| IP | | IP |
+------------------+ +------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Client বলছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“আমি তোমার কাছে data পাঠাতে চাই।”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server বলছে:&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;তারপর data exchange হবে।&lt;/p&gt;

&lt;p&gt;কিন্তু TCP সরাসরি “Hello World” পাঠিয়ে দেয় না। Data-এর সঙ্গে metadata যোগ করে একটি &lt;strong&gt;TCP segment&lt;/strong&gt; তৈরি করা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Application Data থেকে TCP Segment
&lt;/h1&gt;

&lt;p&gt;Application layer-এর কাছে:&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;TCP layer-এর কাছে এটা শুধু application data। TCP এই data-এর সঙ্গে TCP header যোগ করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+--------------------------------------+
| TCP HEADER |
+--------------------------------------+
| APPLICATION DATA |
+--------------------------------------+
&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;TCP Segment = TCP Header + Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;HTTP request ≠ TCP request&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;HTTP হলো application-layer protocol। TCP হলো transport-layer protocol।&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;HTTP
 ↓
TCP
 ↓
IP
 ↓
Ethernet / Wi-Fi
 ↓
Physical medium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বাস্তবে HTTP data TCP byte stream-এর অংশ হিসেবে যায়; HTTP request-এর boundary এবং TCP segment boundary এক জিনিস নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. OSI Layer-এর সঙ্গে TCP-এর সম্পর্ক
&lt;/h1&gt;

&lt;p&gt;Networking নিয়ে আলোচনা করতে OSI model ব্যবহার করলে TCP থাকে &lt;strong&gt;Transport Layer / Layer 4&lt;/strong&gt;-এ।&lt;/p&gt;

&lt;p&gt;একটি simplified view:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Layer 7 Application
 HTTP / HTTPS / SMTP / DNS application usage
 │
 ▼
Layer 4 Transport
 TCP / UDP
 │
 ▼
Layer 3 Network
 IP
 │
 ▼
Layer 2 Data Link
 Ethernet / Wi-Fi
 │
 ▼
Layer 1 Physical
 Bits / electrical / radio / optical signals
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে mental model হিসেবে বলা যায়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Application data পাঠাতে চায় → TCP তার delivery semantics যোগ করে → IP addressing/routing-এর ব্যবস্থা করে → lower layers actual transmission করে।&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  4. Encapsulation: Data কীভাবে বড় packet structure-এর মধ্যে ঢোকে?
&lt;/h1&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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTCPIP_encapsulation.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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTCPIP_encapsulation.png" alt="TCP/IP Encapsulation Overview" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TCP/IP encapsulation-এর visual overview — Wikimedia Commons.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ধরো application data:&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;TCP layer যোগ করলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------+
| TCP Header |
+-------------------+
| Hello World |
+-------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর IP layer TCP segment-কে payload হিসেবে নেয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------+
| IP Header |
+-------------------+
| TCP Header |
| Hello World |
+-------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর Data Link layer নিজের header/trailer যোগ করতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------+
| Ethernet/Wi-Fi |
| Header |
+-------------------+
| IP Header |
| TCP Header |
| Hello World |
+-------------------+
| Link Trailer |
+-------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই &lt;strong&gt;encapsulation&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;Receiver side-এ উল্টো প্রক্রিয়া:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Physical
 ↓
Data Link header/trailer remove
 ↓
IP header remove
 ↓
TCP header process
 ↓
Application data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাকে &lt;strong&gt;decapsulation&lt;/strong&gt; বলা যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  5. TCP কেন দরকার?
&lt;/h1&gt;

&lt;p&gt;IP packet delivery-এর দায়িত্ব নেয়, কিন্তু application-এর প্রয়োজনীয় সব reliability guarantee IP দেয় না।&lt;/p&gt;

&lt;p&gt;TCP মূলত কয়েকটি গুরুত্বপূর্ণ কাজ করে:&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Ordered delivery
&lt;/h3&gt;

&lt;p&gt;Data যে order-এ পাঠানো হয়েছে, application যেন সেই order-এ byte stream পায়।&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Reliable delivery
&lt;/h3&gt;

&lt;p&gt;Data হারিয়ে গেলে TCP loss detect করে এবং প্রয়োজন হলে retransmission করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Flow control
&lt;/h3&gt;

&lt;p&gt;Receiver যতটুকু data নিতে পারে, sender যেন তার capacity-এর বাইরে চাপিয়ে না দেয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Connection management
&lt;/h3&gt;

&lt;p&gt;Connection establish ও close করার জন্য TCP state machine ব্যবহার করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  5.5 Full-duplex communication
&lt;/h3&gt;

&lt;p&gt;একই established connection-এর দুই দিকেই একই সময়ে data চলতে পারে।&lt;/p&gt;

&lt;p&gt;TCP-এর connection-oriented nature, sequencing এবং acknowledgment সম্পর্কে RFC 9293-এ বিস্তারিত specification দেওয়া হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Port কী?
&lt;/h1&gt;

&lt;p&gt;একটি IP address তোমাকে সাধারণত &lt;strong&gt;কোন host&lt;/strong&gt;-এর কাছে যেতে হবে তা বুঝতে সাহায্য করে।&lt;/p&gt;

&lt;p&gt;কিন্তু একটি host-এর মধ্যে অনেক process/application একসঙ্গে network communication করতে পারে।&lt;/p&gt;

&lt;p&gt;তাই দরকার:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Port Number&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;IP Address = কোন computer?
Port = সেই computer-এর কোন network service/process?
&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;203.0.113.10:443
&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;203.0.113.10 = IP address
443 = destination port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TCP header-এ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source Port = 16 bits&lt;/li&gt;
&lt;li&gt;Destination Port = 16 bits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;দুটো field-ই RFC 9293-এ 16-bit হিসেবে সংজ্ঞায়িত।&lt;/p&gt;




&lt;h1&gt;
  
  
  7. 16-bit Port মানে সর্বোচ্চ কত?
&lt;/h1&gt;

&lt;p&gt;16 bits দিয়ে মোট:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2^16 = 65,536
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;টি numeric value represent করা যায়।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 → 65,535
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তবে “সব 65,536 port-ই বাস্তবে application-এর জন্য সমানভাবে usable” — এভাবে বলা ঠিক নয়। Port 0 বিশেষ-purpose/reserved context-এ থাকে, এবং কোন process কোন port bind করবে তা operating system ও protocol ব্যবহারের উপর নির্ভর করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Port-এর তিনটি IANA range
&lt;/h1&gt;

&lt;p&gt;IANA port registry অনুযায়ী port range তিনভাবে ভাগ করা হয়:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;th&gt;IANA নাম&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0–1023&lt;/td&gt;
&lt;td&gt;System Ports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1024–49151&lt;/td&gt;
&lt;td&gt;User Ports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49152–65535&lt;/td&gt;
&lt;td&gt;Dynamic and/or Private Ports&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;IANA বর্তমানে এই range-গুলোকেই ব্যবহার করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  System / Well-Known Ports
&lt;/h3&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;HTTP → 80
HTTPS → 443
SSH → 22
DNS → 53
SMTP → 25
Telnet → 23
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো service identification-এর জন্য widely recognized port assignments।&lt;/p&gt;

&lt;h3&gt;
  
  
  Registered / User Ports
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1024 → 49151
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিছু application/service নির্দিষ্ট port register করতে পারে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic / Private / Ephemeral Ports
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;49152 → 65535
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই range client-side outgoing connections-এর temporary source port হিসেবে খুব commonly ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;গুরুত্বপূর্ণ:&lt;/strong&gt; “Ephemeral port range মানেই সব operating system-এ সবসময় 49152–65535” — এটা বলা যাবে না। IANA range একটি registry classification; operating system নিজস্ব ephemeral allocation range ব্যবহার করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Browser-এর source port কোথা থেকে আসে?
&lt;/h1&gt;

&lt;p&gt;ধরো browser যাচ্ছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;Browser-এর জন্য client-side TCP endpoint হতে পারে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;তখন connection-এর একটি ধারণাগত 4-tuple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source IP = 192.0.2.50
Source Port = 52000

Destination IP = 198.51.100.20
Destination Port = 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TCP connection matching-এর জন্য এই endpoint information গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;দেওয়া লেকচারে browser-এর জন্য operating system-এর মাধ্যমে dynamic/ephemeral source port নেওয়ার উদাহরণটি বিশেষভাবে বোঝানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  10. “এক computer সর্বোচ্চ 16,384 connection পাঠাতে পারবে”—এটা কেন ঠিক নয়?
&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;65535 - 49152 + 1 = 16384
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;করা হয়েছে। এটি &lt;strong&gt;IANA Dynamic/Private range-এর সংখ্যক port value&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;কিন্তু এখান থেকে সরাসরি বলা যাবে না:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“একটি computer সর্বোচ্চ 16,384 TCP connection করতে পারবে।”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;কারণ TCP connection শুধু source port দিয়ে identify হয় না। সাধারণভাবে connection-এর endpoint pair:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source IP + source port
+
destination IP + destination port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দিয়ে flow distinguish করা হয়।&lt;/p&gt;

&lt;p&gt;একই client-side source port ভিন্ন destination endpoint-এর সঙ্গে ভিন্ন TCP connection-এর অংশ হতে পারে। উপরন্তু:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OS ephemeral port range পরিবর্তন করতে পারে&lt;/li&gt;
&lt;li&gt;IPv4 ও IPv6 আলাদা address space তৈরি করতে পারে&lt;/li&gt;
&lt;li&gt;একই host-এ বহু local IP থাকতে পারে&lt;/li&gt;
&lt;li&gt;NAT/PAT middlebox আলাদা mappings তৈরি করতে পারে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;তাই 16,384-কে “maximum total simultaneous TCP connections” হিসেবে মুখস্থ করা উচিত নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  11. TCP Segment-এর Anatomy
&lt;/h1&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%2F700umdgu2747wc3e7vli.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%2F700umdgu2747wc3e7vli.png" alt="TCP Header Diagram" width="771" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TCP header-এর প্রধান field-গুলোর visual diagram — Wikimedia Commons.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;এখন TCP-এর আসল “ব্লকের” ভিতরে ঢুকি।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------------------+-------------------------------+
| Source Port (16) | Destination Port (16) |
+-------------------------------+-------------------------------+
| Sequence Number (32) |
+---------------------------------------------------------------+
| Acknowledgment Number (32) |
+------+----------+--------------------------------------------+
| Data | Reserved | Flags | Window |
|Offset| | | |
+------+----------+--------------------------------------------+
| Checksum | Urgent Pointer |
+---------------------------------------------------------------+
| Options (optional) |
+---------------------------------------------------------------+
| Padding (as needed) |
+---------------------------------------------------------------+
| Data / Payload |
+---------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি RFC 9293-এর TCP header format-এর সঙ্গে মিলিয়ে দেখা উচিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  12. TCP Header-এর গুরুত্বপূর্ণ Field
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;কাজ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source Port&lt;/td&gt;
&lt;td&gt;16 bits&lt;/td&gt;
&lt;td&gt;sender-side port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Destination Port&lt;/td&gt;
&lt;td&gt;16 bits&lt;/td&gt;
&lt;td&gt;receiver-side port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sequence Number&lt;/td&gt;
&lt;td&gt;32 bits&lt;/td&gt;
&lt;td&gt;byte stream-এর sequence tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acknowledgment Number&lt;/td&gt;
&lt;td&gt;32 bits&lt;/td&gt;
&lt;td&gt;next expected sequence number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Offset&lt;/td&gt;
&lt;td&gt;4 bits&lt;/td&gt;
&lt;td&gt;TCP header কত বড়&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reserved&lt;/td&gt;
&lt;td&gt;4 bits&lt;/td&gt;
&lt;td&gt;future use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Control Flags&lt;/td&gt;
&lt;td&gt;8 bits বর্তমানে assigned core header flags; RFC diagram-এ control bits field&lt;/td&gt;
&lt;td&gt;connection/control state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Window&lt;/td&gt;
&lt;td&gt;16 bits&lt;/td&gt;
&lt;td&gt;receiver কত data accept করতে পারে&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Checksum&lt;/td&gt;
&lt;td&gt;16 bits&lt;/td&gt;
&lt;td&gt;error detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Urgent Pointer&lt;/td&gt;
&lt;td&gt;16 bits&lt;/td&gt;
&lt;td&gt;URG ব্যবহারের ক্ষেত্রে urgent data সম্পর্কিত তথ্য&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Options&lt;/td&gt;
&lt;td&gt;variable&lt;/td&gt;
&lt;td&gt;MSS, Window Scale, SACK ইত্যাদি&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;variable&lt;/td&gt;
&lt;td&gt;application payload&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;বিশেষ technical correction:&lt;/strong&gt; অনেক পুরনো TCP diagram-এ Reserved 3 bits এবং flags 9 bits দেখা যায়। আধুনিক RFC 9293-এর header layout-এ Reserved অংশ &lt;strong&gt;4 bits&lt;/strong&gt; এবং assigned control bits &lt;strong&gt;8 bits: CWR, ECE, URG, ACK, PSH, RST, SYN, FIN&lt;/strong&gt;।&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Data Offset কী?
&lt;/h1&gt;

&lt;p&gt;Data Offset হলো 4-bit field।&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;TCP header কতগুলো 32-bit word দীর্ঘ।&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;Header Size = Data Offset × 4 bytes
&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;1 word = 32 bits = 4 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Data Offset = 5
5 × 4 = 20 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Data Offset = 15
15 × 4 = 60 bytes
&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;Minimum TCP Header = 20 bytes
Maximum TCP Header = 60 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RFC 9293-ও Data Offset-কে 32-bit words-এর সংখ্যা হিসেবে সংজ্ঞায়িত করেছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Data Offset-এর practical example
&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;Data Offset = 5
&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;Header = 5 × 4
 = 20 bytes
&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;Data Offset = 10
&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;Header = 10 × 4
 = 40 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এতে receiver বুঝতে পারে TCP data কোথা থেকে শুরু হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Sequence Number — TCP বোঝার সবচেয়ে গুরুত্বপূর্ণ ধারণা
&lt;/h1&gt;

&lt;p&gt;ধরো client server-এ data পাঠাচ্ছে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;TCP byte stream-কে sequence number-এর মাধ্যমে track করে।&lt;/p&gt;

&lt;p&gt;ধরা যাক client-এর Initial Sequence Number:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;SYN-এর ক্ষেত্রে sequence number 1000 হলে, SYN নিজে sequence space-এ &lt;strong&gt;1 unit consume করে&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;তাই established data-এর প্রথম byte-এর sequence number হবে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;RFC 9293 স্পষ্টভাবে বলে: SYN set থাকলে segment-এর sequence number হলো ISN, এবং প্রথম data octet-এর sequence number হবে ISN+1।&lt;/p&gt;




&lt;h1&gt;
  
  
  16. “Sequence number মানে packet number”—এটা ঠিক নয়
&lt;/h1&gt;

&lt;p&gt;এটি খুব common ভুল।&lt;/p&gt;

&lt;p&gt;TCP sequence number মূলত &lt;strong&gt;byte sequence space&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;Sequence = 1001
Payload Length = 5 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে পরের expected sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1001 + 5 = 1006
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ ACK সাধারণত:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;এর মানে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“1005 পর্যন্ত bytes পেয়েছি; এখন 1006 থেকে চাই।”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;RFC 9293 acknowledgment number-কে “next sequence number expected to be received” হিসেবে সংজ্ঞায়িত করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  17. Acknowledgment Number কী?
&lt;/h1&gt;

&lt;p&gt;ধরো sender পাঠালো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEQ = 1001
LEN = 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Receiver data পেল:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1001
1002
1003
1004
1005
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;এখানে একটি অসাধারণ mental rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ACK number = “next byte I want”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এটা মনে রাখতে পারলে TCP-এর অনেক অংশ সহজ হয়ে যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  18. Three-Way Handshake
&lt;/h1&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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTcp-handshake.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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTcp-handshake.png" alt="TCP Three-Way Handshake" width="384" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TCP three-way handshake-এর visual sequence — Wikimedia Commons.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TCP connection শুরু হওয়ার সময় সাধারণভাবে তিনটি control segment exchange হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client Server
 | |
 | -------- SYN, Seq = X ----------&amp;gt; |
 | |
 | &amp;lt;---- SYN + ACK, Seq = Y, |
 | ACK = X + 1 -------------- |
 | |
 | -------- ACK = Y + 1 ------------&amp;gt;|
 | |
 | CONNECTION READY |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cloudflare-এর explanation-ও তিনটি ধাপকে SYN → SYN/ACK → ACK হিসেবে দেখায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  19. Step 1 — Client sends SYN
&lt;/h1&gt;

&lt;p&gt;Client বলছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;আমি connection establish করতে চাই।
&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;SYN = 1
SEQ = Client ISN
&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;Client ISN = 1000
&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;Client → Server

SYN = 1
SEQ = 1000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  20. Step 2 — Server sends SYN + ACK
&lt;/h1&gt;

&lt;p&gt;Server client-এর SYN পেয়ে:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Client-এর SYN acknowledge করে&lt;/li&gt;
&lt;li&gt;নিজের initial sequence number জানায়&lt;/li&gt;
&lt;/ol&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 ISN = 2000
&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 → Client

SYN = 1
ACK = 1001
SEQ = 2000
&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;ACK = 1001?
&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;Client-এর SYN sequence = 1000
SYN consumes one sequence number
Next expected = 1001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  21. Step 3 — Client sends final ACK
&lt;/h1&gt;

&lt;p&gt;Client এখন server-এর SYN acknowledge করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client → Server

ACK = 2001
SEQ = 1001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন handshake complete।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client Server
 | |
 | SYN, SEQ=1000 ------------------&amp;gt; |
 | |
 | &amp;lt;----------- SYN, SEQ=2000 ------ |
 | &amp;lt;----------- ACK=1001 ------------|
 | |
 | ACK=2001 ------------------------&amp;gt;|
 | |
 | ESTABLISHED |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  22. কেন Three-Way Handshake দরকার?
&lt;/h1&gt;

&lt;p&gt;কারণ দুই side-ই নিজেদের sequence number establish করতে চায়।&lt;/p&gt;

&lt;p&gt;Client-এর জন্য:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My ISN = 1000
Server must know it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server-এর জন্য:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;My ISN = 2000
Client must know it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;শেষ ACK-এর মাধ্যমে client server-এর sequence space সম্পর্কে confirmation দেয়।&lt;/p&gt;

&lt;p&gt;এই handshake থেকেই TCP-এর &lt;strong&gt;connection-oriented&lt;/strong&gt; nature স্পষ্ট হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  24. TCP-তে Data Transfer শুরু হয় Handshake-এর পর
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYN
SYN/ACK
ACK
&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;ESTABLISHED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন application data flow শুরু হতে পারে।&lt;/p&gt;

&lt;p&gt;ধরো client পাঠাচ্ছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HELLO
&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;Client SEQ = 1001
Payload = 5 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে receiver-এর ACK:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h1&gt;
  
  
  25. Client ও Server—দুই দিকেই data পাঠাতে পারে
&lt;/h1&gt;

&lt;p&gt;TCP full-duplex।&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;Client → Server
&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;Client → Server
Server → Client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দুই দিকেই independent byte stream চলতে পারে।&lt;/p&gt;

&lt;p&gt;তাই দুই side-এর নিজস্ব:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sequence number&lt;/li&gt;
&lt;li&gt;Acknowledgment number&lt;/li&gt;
&lt;li&gt;Sending state&lt;/li&gt;
&lt;li&gt;Receiving state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;থাকে।&lt;/p&gt;




&lt;h1&gt;
  
  
  26. Full-Duplex Example
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client Server
 | |
 | -------- SEQ=1001, "HELLO" --------&amp;gt;|
 | |
 | &amp;lt;--------- ACK=1006 ---------------- |
 | |
 | &amp;lt;------ SEQ=2001, "WELCOME" --------|
 | |
 | ---------- ACK=2008 ---------------&amp;gt;|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Client-এর data sequence এবং server-এর data sequence আলাদা।&lt;/p&gt;

&lt;p&gt;এটি TCP বোঝার আরেকটি গুরুত্বপূর্ণ mental model।&lt;/p&gt;




&lt;h1&gt;
  
  
  27. TCP Flags
&lt;/h1&gt;

&lt;p&gt;TCP header-এর control bits-এর মাধ্যমে connection state/control behavior signal করা হয়।&lt;/p&gt;

&lt;p&gt;RFC 9293-এর assigned control bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CWR
ECE
URG
ACK
PSH
RST
SYN
FIN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  28. SYN Flag
&lt;/h1&gt;



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

&lt;/div&gt;



&lt;p&gt;Connection establishment-এ sequence space synchronize করতে ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;Three-way handshake:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYN
SYN + ACK
ACK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  29. ACK Flag
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACK = Acknowledgment field is significant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ACK flag set থাকলে TCP acknowledgment field meaningful।&lt;/p&gt;

&lt;p&gt;Established connection-এ ACK সাধারণত ongoing traffic-এর অংশ হিসেবেই আসে; “প্রতিটি ACK অবশ্যই আলাদা আলাদা packet হবে”—এটা ঠিক নয়।&lt;/p&gt;

&lt;p&gt;একটি data-bearing TCP segment-ই simultaneously data পাঠাতে এবং আগের data acknowledge করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  30. FIN Flag
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FIN = No more data from sender
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এক side বলছে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“আমার sending direction-এর আর data নেই।”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FIN graceful close-এর অংশ।&lt;/p&gt;

&lt;p&gt;গুরুত্বপূর্ণ:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FIN মানে পুরো connection মুহূর্তেই দুই দিক থেকে বন্ধ হয়ে গেল — এমন নয়।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TCP full-duplex হওয়ায় এক direction close হওয়ার পর অন্য direction কিছুক্ষণের জন্য চলতে পারে।&lt;/p&gt;

&lt;p&gt;RFC 9293 FIN-কে “No more data from sender” হিসেবে সংজ্ঞায়িত করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  31. RST Flag
&lt;/h1&gt;



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

&lt;/div&gt;



&lt;p&gt;এটি connection-কে abruptly reset করতে ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;FIN হলো graceful close-এর ধারণার সঙ্গে সম্পর্কিত।&lt;/p&gt;

&lt;p&gt;RST হলো hard reset।&lt;/p&gt;

&lt;p&gt;Cloudflare-ও FIN-based graceful close এবং RST-এর abrupt reset-এর পার্থক্য উল্লেখ করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  32. PSH, URG, ECE, CWR
&lt;/h1&gt;

&lt;h3&gt;
  
  
  PSH
&lt;/h3&gt;

&lt;p&gt;Push function-এর সঙ্গে সম্পর্কিত।&lt;/p&gt;

&lt;h3&gt;
  
  
  URG
&lt;/h3&gt;

&lt;p&gt;Urgent Pointer field significant হলে URG set হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  ECE
&lt;/h3&gt;

&lt;p&gt;ECN-এর signalling-এর সঙ্গে সম্পর্কিত।&lt;/p&gt;

&lt;h3&gt;
  
  
  CWR
&lt;/h3&gt;

&lt;p&gt;Congestion Window Reduced-এর signalling-এর সঙ্গে সম্পর্কিত।&lt;/p&gt;

&lt;p&gt;Beginner হিসেবে প্রথমে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYN
ACK
FIN
RST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই চারটি ভালোভাবে বুঝলেই সবচেয়ে বেশি লাভ হবে।&lt;/p&gt;

&lt;p&gt;RFC 9293 সব assigned control bits-এর precise definition দেয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  33. Window Size — TCP কীভাবে একসঙ্গে অনেক data manage করে?
&lt;/h1&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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTCP_windowing.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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTCP_windowing.png" alt="TCP Sliding Window" width="378" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sliding window ও acknowledgment-এর relationship — Wikimedia Commons.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ধরো sender প্রতিটি segment পাঠিয়ে আবার reply পাওয়ার জন্য থেমে থাকলে throughput ভয়াবহ কমে যেতে পারে।&lt;/p&gt;

&lt;p&gt;তাই TCP একাধিক unacknowledged byte/segment “in flight” রাখতে পারে।&lt;/p&gt;

&lt;p&gt;এখানে window গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;RFC 9293 অনুযায়ী Window field receiver কত data গ্রহণ করতে প্রস্তুত তা advertise করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  34. Simple Window Example
&lt;/h1&gt;

&lt;p&gt;ধরো receiver বললো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Window = 10,000 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mental model:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“আমি এখন পর্যন্ত প্রায় 10,000 bytes পর্যন্ত নতুন data accept করতে প্রস্তুত।”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;তখন sender প্রতিটি segment-এর পর stop না করে multiple segment পাঠাতে পারে, যতক্ষণ advertised receive window এবং অন্যান্য TCP constraints তা allow করে।&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;Sender
 |
 | Segment 1
 | Segment 2
 | Segment 3
 | Segment 4
 | Segment 5
 |
 +---- ACKs arrive later ----&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই reliable high-throughput communication-এর ভিত্তিগুলোর একটি।&lt;/p&gt;




&lt;h1&gt;
  
  
  35. Flow Control বনাম Congestion Control
&lt;/h1&gt;

&lt;p&gt;এ দুটোকে এক করে ফেললে TCP বোঝায় সমস্যা হবে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Flow Control
&lt;/h3&gt;

&lt;p&gt;Receiver-এর capacity কেন্দ্রিক।&lt;/p&gt;

&lt;p&gt;প্রশ্ন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Receiver আর কত data নিতে পারবে?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে receive window গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;h3&gt;
  
  
  Congestion Control
&lt;/h3&gt;

&lt;p&gt;Network-এর congestion কেন্দ্রিক।&lt;/p&gt;

&lt;p&gt;প্রশ্ন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;পুরো network path এখন কত traffic handle করতে পারছে?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Congestion control-এর জন্য sender-side congestion window (&lt;code&gt;cwnd&lt;/code&gt;) গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;বাস্তব TCP throughput সাধারণভাবে একাধিক constraint-এর উপর নির্ভর করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;usable sending window ≈ min(rwnd, cwnd)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;rwnd&lt;/code&gt; = receiver advertised window&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cwnd&lt;/code&gt; = congestion control limit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এটি একটি practical mental model; exact implementation আরও complex।&lt;/p&gt;




&lt;h1&gt;
  
  
  36. Checksum — Data বদলে গেছে কিনা কীভাবে বোঝে?
&lt;/h1&gt;

&lt;p&gt;TCP header-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Checksum = 16 bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি transmission corruption/error detect করতে ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;RFC 9293 অনুযায়ী TCP checksum one's-complement ভিত্তিক calculation ব্যবহার করে এবং header ও data-এর ওপর checksum computation হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  37. Checksum কি “ভুল data ঠিক করে”?
&lt;/h1&gt;

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

&lt;p&gt;Checksum নিজে corrupted data repair করে না।&lt;/p&gt;

&lt;p&gt;এটি mainly detect করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“আমি যা পেয়েছি, সেটা expected integrity check pass করছে কি?”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Error detect হলে segment গ্রহণ না-ও করা হতে পারে, এরপর TCP recovery mechanisms—যেমন retransmission—দিয়ে sender আবার data পাঠাতে পারে।&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;Checksum
 ↓
Error detected
 ↓
Bad segment discarded / recovery needed
 ↓
Retransmission mechanisms
 ↓
Correct data arrives
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  38. Retransmission — Packet হারিয়ে গেলে কী হয়?
&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;Segment 1 → পৌঁছালো
Segment 2 → হারিয়ে গেল
Segment 3 → পৌঁছালো
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Receiver cumulative ACK দিয়ে missing point signal করতে পারে।&lt;/p&gt;

&lt;p&gt;ধরো receiver-এর next expected byte:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;কিন্তু পরের data sequence শুরু হলো:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;তাহলে sender বুঝতে পারে stream-এর মাঝখানে কিছু missing থাকতে পারে।&lt;/p&gt;

&lt;p&gt;TCP loss recovery-এর অংশ হিসেবে timeout, duplicate acknowledgment এবং আধুনিক ব্যবহারে SACK-এর মতো mechanisms ব্যবহার করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  39. Duplicate ACK — সহজ mental model
&lt;/h1&gt;

&lt;p&gt;ধরো receiver আশা করছিল:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEQ = 1006
&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;SEQ = 1106
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অর্থাৎ মাঝখানে data missing।&lt;/p&gt;

&lt;p&gt;Receiver repeated ACK করতে পারে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;কারণ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“আমার 1006 থেকেই missing; এর পরেরটা আগে এসেছে।”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Repeated duplicate ACK sender-কে loss-এর সম্ভাবনা signal করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  40. Retransmission মানে সবসময় “ACK না আসা পর্যন্ত resend”
&lt;/h1&gt;

&lt;p&gt;এটা অতিরিক্ত simplistic model।&lt;/p&gt;

&lt;p&gt;বাস্তবে TCP loss detection বিভিন্ন mechanism ব্যবহার করে, যেমন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retransmission Timeout (RTO)&lt;/li&gt;
&lt;li&gt;Duplicate ACK-based fast retransmit&lt;/li&gt;
&lt;li&gt;SACK-based recovery&lt;/li&gt;
&lt;li&gt;modern congestion-control/recovery behavior&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;No ACK → blindly resend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই model-কে exact TCP behavior হিসেবে মনে রাখা উচিত নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  41. SACK
&lt;/h1&gt;

&lt;p&gt;SACK = &lt;strong&gt;Selective Acknowledgment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি TCP-কে আরও efficiently জানাতে পারে কোন কোন block পাওয়া গেছে এবং কোন block missing।&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;Received:
1001–2000
3001–4000

Missing:
2001–3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SACK থাকলে receiver sender-কে more precise information দিতে পারে।&lt;/p&gt;

&lt;p&gt;এটি retransmission efficiency বাড়াতে সাহায্য করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  42. TCP Options
&lt;/h1&gt;

&lt;p&gt;TCP header সবসময় শুধু fixed 20 bytes নয়।&lt;/p&gt;

&lt;p&gt;Options থাকলে header বড় হতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 bytes → minimum
up to 60 bytes → maximum
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MSS&lt;/li&gt;
&lt;li&gt;Window Scale&lt;/li&gt;
&lt;li&gt;SACK Permitted&lt;/li&gt;
&lt;li&gt;SACK&lt;/li&gt;
&lt;li&gt;Timestamp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TCP Options-এর কারণে Data Offset field দরকার।&lt;/p&gt;




&lt;h1&gt;
  
  
  43. MSS — Maximum Segment Size
&lt;/h1&gt;

&lt;p&gt;একটি TCP connection-এ endpoint-গুলো প্রায়ই জানায় তারা একটি TCP segment-এ কত application data গ্রহণ করতে চায়।&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;MSS = Maximum Segment Size
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বলা হয়।&lt;/p&gt;

&lt;p&gt;এখানে “segment size” বললে অনেক সময় মানুষ পুরো IP packet 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;TCP payload ≈ MSS
&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;IP packet size
≈ IP header + TCP header + TCP payload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ethernet path-এ 1500-byte MTU হলে এবং TCP/IP header normal হলে 1460-byte MSS-এর উদাহরণ খুব common:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1500 - 20 IP header - 20 TCP header = 1460
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তবে options, IPv6 এবং path-এর actual MTU অনুযায়ী effective numbers পরিবর্তিত হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  44. “Hello World” কি একাধিক TCP segment হবেই?
&lt;/h1&gt;

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

&lt;p&gt;এটি data size এবং TCP stack-এর segmentation-এর উপর নির্ভর করে।&lt;/p&gt;

&lt;p&gt;ছোট data:&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;একটি TCP segment-এর payload-এ সহজেই থাকতে পারে।&lt;/p&gt;

&lt;p&gt;বড় data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Large JSON
Large file
Large response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অনেক TCP segment-এ ভাগ হয়ে যেতে পারে।&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;1 HTTP request = 1 TCP segment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি guaranteed নয়।&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;1 TCP segment = 1 complete HTTP message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটিও guaranteed নয়।&lt;/p&gt;

&lt;p&gt;TCP হলো &lt;strong&gt;byte stream&lt;/strong&gt;, message protocol নয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  45. TCP byte stream-এর সবচেয়ে গুরুত্বপূর্ণ শিক্ষা
&lt;/h1&gt;

&lt;p&gt;ধরো application দুইবার write করলো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;write("HELLO")
write("WORLD")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TCP receiver-side application-এর কাছে network packet boundary preserve করার promise দেয় না।&lt;/p&gt;

&lt;p&gt;Receiver দেখতে পারে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;অথবা implementation/application buffering অনুযায়ী read boundaries অন্যরকম হতে পারে।&lt;/p&gt;

&lt;p&gt;তাই application protocol-কে নিজের message framing দরকার হতে পারে।&lt;/p&gt;

&lt;p&gt;HTTP, WebSocket, custom binary protocol—প্রতিটির framing semantics আলাদা।&lt;/p&gt;




&lt;h1&gt;
  
  
  46. Four-Step TCP Connection Termination
&lt;/h1&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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTCP_connection_Termination.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%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FTCP_connection_Termination.png" alt="TCP Connection Termination" width="703" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;FIN/ACK দিয়ে TCP connection termination-এর visual diagram — Wikimedia Commons.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Connection close সাধারণভাবে চার ধাপের exchange হিসেবে শেখানো হয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client Server
 | |
 | -------- FIN -------------------&amp;gt; |
 | |
 | &amp;lt;-------- ACK ------------------- |
 | |
 | &amp;lt;-------- FIN ------------------- |
 | |
 | -------- ACK -------------------&amp;gt; |
 | |
 | CLOSED |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একে beginner-friendlyভাবে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;মনে রাখা যায়।&lt;/p&gt;

&lt;p&gt;Cloudflare-ও graceful close-এ FIN ব্যবহারের কথা বলে।&lt;/p&gt;




&lt;h1&gt;
  
  
  47. কেন চার ধাপ?
&lt;/h1&gt;

&lt;p&gt;কারণ TCP full duplex।&lt;/p&gt;

&lt;p&gt;প্রতিটি side-এর sending direction independently close হতে পারে।&lt;/p&gt;

&lt;p&gt;ধরো Client বলে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;“আমার আর data পাঠানোর নেই।”&lt;/p&gt;
&lt;/blockquote&gt;

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

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

&lt;/div&gt;



&lt;p&gt;দিয়ে Client-এর FIN acknowledge করে।&lt;/p&gt;

&lt;p&gt;কিন্তু Server-এর নিজের sending direction তখনও data পাঠাতে পারে।&lt;/p&gt;

&lt;p&gt;শেষে Server:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;পাঠায়।&lt;/p&gt;

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

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

&lt;/div&gt;



&lt;p&gt;পাঠায়।&lt;/p&gt;

&lt;p&gt;এরপর connection পুরোপুরি শেষ হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  48. গুরুত্বপূর্ণ: সব connection-এ exact “FIN, ACK, FIN, ACK” packet pattern দেখা যাবে না
&lt;/h1&gt;

&lt;p&gt;Network captures-এ ACK সঙ্গে অন্য data/FIN-এর সঙ্গে combine হতে পারে।&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;FIN + ACK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি segment-এই থাকতে পারে।&lt;/p&gt;

&lt;p&gt;তাই “চারটি segment না হলে TCP close হয়নি”—এটা ঠিক নয়।&lt;/p&gt;

&lt;p&gt;“Four-way termination” হলো conceptual state transition model।&lt;/p&gt;




&lt;h1&gt;
  
  
  49. Simultaneous Close
&lt;/h1&gt;

&lt;p&gt;দুই side কাছাকাছি সময়ে FIN পাঠাতেও পারে।&lt;/p&gt;

&lt;p&gt;TCP state machine-এর কারণে real packet trace textbook diagram-এর মতো perfectly symmetric নাও হতে পারে।&lt;/p&gt;

&lt;p&gt;Networking শেখার সময় diagram-কে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Conceptual sequence”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;হিসেবে দেখো; real packet capture-এর প্রতিটি flow exact একই হবে—এটা ধরে নিও না।&lt;/p&gt;




&lt;h1&gt;
  
  
  50. RST দিয়ে Connection বন্ধ হওয়া বনাম FIN
&lt;/h1&gt;

&lt;h3&gt;
  
  
  FIN
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  RST
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;p&gt;যদি application abruptly socket destroy করে বা remote endpoint-এর state invalid হয়, RST দেখা যেতে পারে।&lt;/p&gt;

&lt;p&gt;Packet capture debugging-এ FIN বনাম RST দেখে connection lifecycle সম্পর্কে গুরুত্বপূর্ণ clues পাওয়া যায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  51. TCP Header-এর field-by-field deep explanation
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Source Port
&lt;/h2&gt;

&lt;p&gt;Sender-এর local transport endpoint-এর port।&lt;/p&gt;

&lt;h2&gt;
  
  
  Destination Port
&lt;/h2&gt;

&lt;p&gt;Receiver-side transport endpoint-এর port।&lt;/p&gt;

&lt;h2&gt;
  
  
  Sequence Number
&lt;/h2&gt;

&lt;p&gt;এই segment-এর data-এর sequence space position।&lt;/p&gt;

&lt;p&gt;SYN segment-এ এটি ISN।&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgment Number
&lt;/h2&gt;

&lt;p&gt;পরবর্তী expected sequence number।&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Offset
&lt;/h2&gt;

&lt;p&gt;TCP header-এর actual length, 32-bit word-এ।&lt;/p&gt;

&lt;h2&gt;
  
  
  Reserved
&lt;/h2&gt;

&lt;p&gt;Future protocol evolution-এর জন্য reserved bits।&lt;/p&gt;

&lt;p&gt;RFC 9293 অনুযায়ী generated segments-এ এগুলো zero হওয়া উচিত।&lt;/p&gt;

&lt;h2&gt;
  
  
  Flags
&lt;/h2&gt;

&lt;p&gt;Control/state signaling।&lt;/p&gt;

&lt;h2&gt;
  
  
  Window
&lt;/h2&gt;

&lt;p&gt;Receiver কত data accept করতে পারবে তার advertised receive capacity।&lt;/p&gt;

&lt;h2&gt;
  
  
  Checksum
&lt;/h2&gt;

&lt;p&gt;Integrity/error detection।&lt;/p&gt;

&lt;h2&gt;
  
  
  Urgent Pointer
&lt;/h2&gt;

&lt;p&gt;URG flag ব্যবহৃত হলে relevant urgent pointer field।&lt;/p&gt;

&lt;h2&gt;
  
  
  Options
&lt;/h2&gt;

&lt;p&gt;Additional TCP capabilities/parameters।&lt;/p&gt;

&lt;h2&gt;
  
  
  Data
&lt;/h2&gt;

&lt;p&gt;Application payload।&lt;/p&gt;




&lt;h1&gt;
  
  
  52. TCP Header-এর একটা visual memory trick
&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;PORT
 ↓
আমি কার সঙ্গে কথা বলছি?

SEQUENCE
 ↓
আমার data কোথায়?

ACK
 ↓
আমি পরের কোন byte চাই?

WINDOW
 ↓
আমি কতটা receive করতে পারি?

CHECKSUM
 ↓
Data corrupt হয়েছে?

FLAGS
 ↓
Connection-এর control instruction কী?

OPTIONS
 ↓
আর কী capability/parameter negotiated?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  53. Complete Example: Client → Server
&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;Client IP = 192.0.2.10
Client Port = 52000

Server IP = 198.51.100.20
Server Port = 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 1
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client → Server

Src Port = 52000
Dst Port = 443
SEQ = 1000
SYN = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server → Client

Src Port = 443
Dst Port = 52000
SEQ = 2000
ACK = 1001
SYN = 1
ACK = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client → Server

Src Port = 52000
Dst Port = 443
SEQ = 1001
ACK = 2001
ACK = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন established।&lt;/p&gt;




&lt;h1&gt;
  
  
  54. এবার data পাঠাই
&lt;/h1&gt;

&lt;p&gt;ধরো client পাঠালো:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;5 bytes।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEQ = 1001
LEN = 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server-এর acknowledgement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACK = 1006
&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;1001 + 5 = 1006
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই “next byte expected” rule।&lt;/p&gt;




&lt;h1&gt;
  
  
  55. Server reply দিলে
&lt;/h1&gt;

&lt;p&gt;ধরো server পাঠালো:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;2 bytes।&lt;/p&gt;

&lt;p&gt;Server-এর প্রথম data sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2001
&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 → Client

SEQ = 2001
LEN = 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Client ACK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ACK = 2003
&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;2001 + 2 = 2003
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  56. Data হারিয়ে গেলে
&lt;/h1&gt;

&lt;p&gt;ধরো client পাঠালো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEQ=1001, LEN=100
SEQ=1101, LEN=100
SEQ=1201, LEN=100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু দ্বিতীয় segment হারিয়ে গেল।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1001–1200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর 1201-এর segment out-of-order হিসেবে আসতে পারে।&lt;/p&gt;

&lt;p&gt;Receiver cumulative ACK দিয়ে missing sequence point signal করতে পারে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1001–1100 পেয়েছি, এখন 1101 চাই।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এটি loss recovery-এর একটি core mental model।&lt;/p&gt;




&lt;h1&gt;
  
  
  57. TCP কি packets reorder করে?
&lt;/h1&gt;

&lt;p&gt;IP network-এ packets বিভিন্ন path দিয়ে যেতে পারে।&lt;/p&gt;

&lt;p&gt;ফলে arrival order বদলে যেতে পারে।&lt;/p&gt;

&lt;p&gt;TCP sequence number ব্যবহার করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Out-of-order data
 ↓
Sequence tracking
 ↓
Reassembly / buffering
 ↓
Application sees ordered byte stream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cloudflare-এর TCP/IP explanation-এও IP packet ordering guarantee না দেওয়ার এবং TCP sequence-based reassembly/reliability handling-এর practical explanation দেওয়া হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  58. TCP reliability-এর formula মনে রাখো
&lt;/h1&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;Sequence
 +
Acknowledgment
 +
Checksum
 +
Retransmission
 +
Window
 +
Congestion Control
 ↓
Reliable transport behavior
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো আলাদা feature হলেও একসঙ্গে TCP-এর transport behavior তৈরি করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  59. TCP বনাম UDP
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connection-oriented
Reliable
Ordered byte stream
ACK
Retransmission
Flow control
Congestion control
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connectionless datagram transport
No TCP-style connection establishment
No TCP-style ordered reliable byte-stream semantics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cloudflare-এর UDP overview-তেও TCP-এর handshake/reliability/ordering-এর সঙ্গে UDP-এর lightweight datagram behavior তুলনা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  60. Application layer থেকে TCP পর্যন্ত full picture
&lt;/h1&gt;

&lt;p&gt;ধরো browser:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Application layer:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Transport layer:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Network layer:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Data Link:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ethernet/Wi-Fi frame
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;/div&gt;



&lt;p&gt;Receiver side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signals
 ↓
frame
 ↓
IP packet
 ↓
TCP segment
 ↓
HTTP bytes
 ↓
Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই layered abstraction-ই software engineer হিসেবে networking বোঝার জন্য শক্তিশালী mental model।&lt;/p&gt;




&lt;h1&gt;
  
  
  61. “TCP সরাসরি server-এ data পাঠায়” — কতটা ঠিক?
&lt;/h1&gt;

&lt;p&gt;Conceptual context-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client TCP → Server TCP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;বলা হয়।&lt;/p&gt;

&lt;p&gt;এটা শেখার জন্য ভালো abstraction।&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client TCP
 ↓
Client IP
 ↓
Data Link
 ↓
Physical
 ↓
Router(s)
 ↓
Physical/Data Link
 ↓
Server IP
 ↓
Server TCP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TCP নিজে router-by-router forwarding করে না।&lt;/p&gt;

&lt;p&gt;TCP endpoint-to-endpoint transport behavior manage করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  62. Socket কোথায় আসে?
&lt;/h1&gt;

&lt;p&gt;একটি TCP communication endpoint-কে practical programming context-এ socket হিসেবে দেখা যায়।&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;Socket ≈ local address + local port + transport protocol
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Established connection-কে identify করতে remote endpoint-ও গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;Programming-এ সাধারণত developer socket API ব্যবহার করে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;connect()
send()
recv()
close()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং kernel TCP implementation নিচের protocol mechanics manage করে।&lt;/p&gt;

&lt;p&gt;দেওয়া লেকচারে application developer-এর perspective-এ operating system TCP handling-এর এই abstraction জোর দিয়ে বোঝানো হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  63. Operating System আসলে কী করে?
&lt;/h1&gt;

&lt;p&gt;Application যখন socket API দিয়ে communication চায়, তখন kernel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TCP state maintain করে&lt;/li&gt;
&lt;li&gt;Sequence tracking করে&lt;/li&gt;
&lt;li&gt;ACK process করে&lt;/li&gt;
&lt;li&gt;Retransmission manage করে&lt;/li&gt;
&lt;li&gt;Receive window maintain করে&lt;/li&gt;
&lt;li&gt;Congestion control চালায়&lt;/li&gt;
&lt;li&gt;TCP headers তৈরি/parse করে&lt;/li&gt;
&lt;li&gt;IP stack-এর সঙ্গে কাজ করে&lt;/li&gt;
&lt;li&gt;NIC-এর মাধ্যমে network I/O-তে অংশ নেয়&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;তাই software engineer হিসেবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You write:
send(data)

Kernel does:
TCP + IP + driver + NIC machinery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  64. Wireshark-এ TCP দেখতে গেলে কী দেখবে?
&lt;/h1&gt;

&lt;p&gt;একটি TCP packet capture-এ সাধারণত এগুলো দেখতে পারো:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transmission Control Protocol
 Source Port
 Destination Port
 Sequence Number
 Acknowledgment Number
 Header Length
 Flags
 Window Size
 Checksum
 Options
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;সবচেয়ে beginner-friendly filter:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;আর নির্দিষ্ট handshake খুঁজতে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tcp.flags.syn == 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ACK-related analysis-এর জন্য:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tcp.flags.ack == 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tcp.flags.fin == 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tcp.flags.reset == 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  65. Wireshark-এ 3-Way Handshake চিনবে কীভাবে?
&lt;/h1&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. SYN
2. SYN, ACK
3. ACK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যদি capture-এ sequence এমন হয়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client → Server [SYN]
Server → Client [SYN, ACK]
Client → Server [ACK]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাহলে connection establishment successfully দেখতে পাচ্ছ।&lt;/p&gt;




&lt;h1&gt;
  
  
  66. SYN Flood কেন TCP-এর সঙ্গে সম্পর্কিত?
&lt;/h1&gt;

&lt;p&gt;TCP server SYN পাওয়ার পর connection establishment-এর state maintain করে এবং SYN/ACK response পাঠায়।&lt;/p&gt;

&lt;p&gt;একজন attacker অনেক SYN পাঠিয়ে দিলে server-এর pending connection state resource consume হতে পারে।&lt;/p&gt;

&lt;p&gt;এটাকে SYN flood attack-এর সঙ্গে দেখা যায়।&lt;/p&gt;

&lt;p&gt;Cloudflare-এর SYN flood explanation-এ SYN → SYN/ACK → final ACK sequence এবং incomplete handshakes-এর resource impact ব্যাখ্যা করা হয়েছে।&lt;/p&gt;




&lt;h1&gt;
  
  
  67. TCP State Machine-এর খুব সংক্ষিপ্ত map
&lt;/h1&gt;

&lt;p&gt;সব implementation detail না ধরে একটি simplified model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLOSED
 |
 | connect / active open
 v
SYN-SENT
 |
 | SYN+ACK
 v
ESTABLISHED
 |
 | FIN
 v
FIN-related states
 |
 v
CLOSED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server-side connection establishment-এ &lt;code&gt;LISTEN&lt;/code&gt;, &lt;code&gt;SYN-RECEIVED&lt;/code&gt; ইত্যাদি states-ও থাকে।&lt;/p&gt;

&lt;p&gt;TCP debugging-এর জন্য state machine পরে আরও গভীরভাবে শেখা খুব উপকারী।&lt;/p&gt;




&lt;h1&gt;
  
  
  68. Common ভুলগুলো
&lt;/h1&gt;

&lt;h2&gt;
  
  
  ভুল ১: TCP packet বলে শেষ
&lt;/h2&gt;

&lt;p&gt;Technicalভাবে TCP transport-এর data unit-কে সাধারণত &lt;strong&gt;segment&lt;/strong&gt; বলা হয়।&lt;/p&gt;

&lt;p&gt;IP layer-এ সেটা &lt;strong&gt;packet&lt;/strong&gt; context পায়।&lt;/p&gt;

&lt;p&gt;Data Link layer-এ &lt;strong&gt;frame&lt;/strong&gt; হতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ভুল ২: Sequence number = packet number
&lt;/h2&gt;

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

&lt;p&gt;TCP sequence number byte-oriented sequence space track করে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ভুল ৩: ACK = “এই packet পেলাম”
&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;ACK = next sequence number expected
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ভুল ৪: SYN-এর data sequence X হলে next data X
&lt;/h2&gt;

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

&lt;p&gt;SYN sequence space-এর 1 unit consume করে।&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;SYN SEQ = X
first data SEQ = X + 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ভুল ৫: প্রতি data segment-এর জন্য আলাদা ACK packet লাগেই
&lt;/h2&gt;

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

&lt;p&gt;ACK অন্য data-bearing segment-এর সঙ্গেও piggyback হতে পারে।&lt;/p&gt;




&lt;h2&gt;
  
  
  ভুল ৬: HTTP request = one TCP segment
&lt;/h2&gt;

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

&lt;p&gt;TCP byte stream।&lt;/p&gt;




&lt;h2&gt;
  
  
  ভুল ৭: TCP checksum ভুল data fix করে
&lt;/h2&gt;

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

&lt;p&gt;Checksum error detect করতে সাহায্য করে; recovery retransmission mechanisms দিয়ে হয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  ভুল ৮: Ephemeral ports সব OS-এ 49152–65535
&lt;/h2&gt;

&lt;p&gt;IANA registry range এবং OS-এর actual ephemeral allocation policy এক জিনিস নয়।&lt;/p&gt;




&lt;h2&gt;
  
  
  ভুল ৯: 16384 source ports = 16384 total TCP connections
&lt;/h2&gt;

&lt;p&gt;এটি সরাসরি বলা ঠিক নয়।&lt;/p&gt;

&lt;p&gt;Connection uniqueness-এর জন্য endpoint tuple, address selection এবং OS/network behavior গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h2&gt;
  
  
  ভুল ১০: FIN মানে সঙ্গে সঙ্গে পুরো connection shutdown
&lt;/h2&gt;

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

&lt;p&gt;TCP full-duplex বলে direction-wise shutdown হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  69. সবচেয়ে গুরুত্বপূর্ণ সংখ্যাগুলো
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Port field = 16 bits
Port numeric space = 0–65535

Sequence Number = 32 bits
Acknowledgment Number = 32 bits

Data Offset = 4 bits

TCP header = 20–60 bytes

Window = 16 bits
Checksum = 16 bits
Urgent Pointer = 16 bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RFC 9293-এর TCP header specification-এর সঙ্গে এই field sizes মিলিয়ে দেখা উচিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  70. এক পাতায় পুরো TCP
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; APPLICATION
 |
 | data
 v
 TCP
 |
 +----------+----------+
 | |
 Ports Sequence
 | |
 | ACK number
 | |
 | Window
 | |
 | Checksum
 | |
 | Flags
 +----------+----------+
 |
 Segment
 |
 v
 IP
 |
 Packet
 |
 v
 Ethernet / Wi-Fi
 |
 Frame
 |
 v
 Physical
 |
 Bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর connection lifecycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; START
 |
 v
 SYN
 |
 v
 SYN + ACK
 |
 v
 ACK
 |
 v
 ESTABLISHED
 |
 v
 DATA TRANSFER
 |
 v
 FIN/ACK
 |
 v
 FIN/ACK
 |
 v
 CLOSED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  71. TCP বোঝার জন্য একটি “five question” framework
&lt;/h1&gt;

&lt;p&gt;যেকোনো TCP packet দেখলে নিজেকে পাঁচটি প্রশ্ন করো:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. কে পাঠাচ্ছে?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source IP + Source Port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. কার কাছে যাচ্ছে?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Destination IP + Destination Port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. কোন byte থেকে শুরু?
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Receiver পরের কোন byte চায়?
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Control situation কী?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYN / ACK / FIN / RST / ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলো ধরতে পারলে Wireshark-এর একটি TCP packet অনেক কম scary লাগবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  72. Software Engineer-এর জন্য TCP-এর practical mental model
&lt;/h1&gt;

&lt;p&gt;Browser-এ তুমি লিখলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তোমার application logic সাধারণত এভাবে ভাববে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;request পাঠাও
response নাও
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কিন্তু নিচে TCP ভাবছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;আমার local port কী?
remote port কী?
connection established?
আমার sequence space কী?
receiver কত data নিতে পারবে?
কোন bytes acknowledged?
কোন bytes missing?
retransmission দরকার?
connection close হবে?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই difference-টাই abstraction।&lt;/p&gt;




&lt;h1&gt;
  
  
  73. শেষ কথা: TCP-কে কীভাবে মনে রাখবে?
&lt;/h1&gt;

&lt;p&gt;TCP মনে রাখার সবচেয়ে ভালো উপায় শুধু সংজ্ঞা মুখস্থ করা নয়।&lt;/p&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;Application Data
 ↓
TCP Segment
 ↓
Ports
 ↓
Sequence Number
 ↓
ACK Number
 ↓
Flags
 ↓
Window
 ↓
Checksum
 ↓
Options
 ↓
IP
 ↓
Network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connection-এর lifecycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SYN
 ↓
SYN + ACK
 ↓
ACK
 ↓
DATA
 ↓
ACK / WINDOW / RETRANSMISSION
 ↓
FIN
 ↓
ACK
 ↓
FIN
 ↓
ACK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর সবচেয়ে গুরুত্বপূর্ণ তিনটি mental rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sequence number বলে data stream-এর কোন জায়গায় আছি।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACK number বলে receiver পরের কোন sequence number আশা করছে।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Window বলে receiver বর্তমানে কত data গ্রহণ করতে প্রস্তুত।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এই তিনটি ভালোভাবে আয়ত্ত করতে পারলে TCP-এর বাকি অংশ অনেক বেশি logical হয়ে যাবে।&lt;/p&gt;




&lt;h1&gt;
  
  
  74. Quick Revision Sheet
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TCP
├── Layer 4
├── Connection-oriented
├── Reliable
├── Ordered byte stream
├── Full duplex
│
├── Header
│ ├── Source Port
│ ├── Destination Port
│ ├── Sequence Number
│ ├── ACK Number
│ ├── Data Offset
│ ├── Reserved
│ ├── Flags
│ ├── Window
│ ├── Checksum
│ ├── Urgent Pointer
│ ├── Options
│ └── Data
│
├── Connection Start
│ ├── SYN
│ ├── SYN+ACK
│ └── ACK
│
├── Data Transfer
│ ├── SEQ
│ ├── ACK
│ ├── Window
│ ├── Checksum
│ └── Retransmission
│
└── Connection Close
 ├── FIN
 ├── ACK
 ├── FIN
 └── ACK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  75. References ও Further Reading
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Primary technical specification
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RFC 9293 — Transmission Control Protocol (TCP)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.rfc-editor.org/rfc/rfc9293.html" rel="noopener noreferrer"&gt;https://www.rfc-editor.org/rfc/rfc9293.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RFC Editor — RFC 9293 information page&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.rfc-editor.org/info/rfc9293/" rel="noopener noreferrer"&gt;https://www.rfc-editor.org/info/rfc9293/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Port registry
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;IANA — Service Name and Transport Protocol Port Number Registry&lt;/strong&gt;
&lt;a href="https://www.iana.org/assignments/service-names-port-numbers" rel="noopener noreferrer"&gt;https://www.iana.org/assignments/service-names-port-numbers&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Online diagrams
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wikimedia Commons — TCP Header.png&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://commons.wikimedia.org/wiki/File:TCP_Header.png" rel="noopener noreferrer"&gt;https://commons.wikimedia.org/wiki/File:TCP_Header.png&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wikimedia Commons — TCP Protocol Diagram.png&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://commons.wikimedia.org/wiki/File:TCP_Protocol_Diagram.png" rel="noopener noreferrer"&gt;https://commons.wikimedia.org/wiki/File:TCP_Protocol_Diagram.png&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wikimedia Commons — Tcp-handshake.png&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://commons.wikimedia.org/wiki/File:Tcp-handshake.png" rel="noopener noreferrer"&gt;https://commons.wikimedia.org/wiki/File:Tcp-handshake.png&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Practical explanations
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloudflare — What is TCP/IP?&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.cloudflare.com/learning/ddos/glossary/tcp-ip/" rel="noopener noreferrer"&gt;https://www.cloudflare.com/learning/ddos/glossary/tcp-ip/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloudflare — SYN Flood DDoS Attack&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.cloudflare.com/learning/ddos/syn-flood-ddos-attack/" rel="noopener noreferrer"&gt;https://www.cloudflare.com/learning/ddos/syn-flood-ddos-attack/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




</description>
      <category>computerscience</category>
      <category>learning</category>
      <category>networking</category>
    </item>
    <item>
      <title>TCP/IP Model: সফটওয়্যার ইঞ্জিনিয়ারদের জন্য Practical Guide</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Tue, 01 Sep 2026 10:03:33 +0000</pubDate>
      <link>https://dev.to/ragibcs/tcpip-model-sphttoyyyaar-inyjiniyyaarder-jny-practical-guide-2p1c</link>
      <guid>https://dev.to/ragibcs/tcpip-model-sphttoyyyaar-inyjiniyyaarder-jny-practical-guide-2p1c</guid>
      <description>&lt;p&gt;নেটওয়ার্কিং শিখতে গেলে আমরা সাধারণত প্রথমে &lt;strong&gt;OSI 7-Layer Model&lt;/strong&gt;-এর কথা শুনি। কিন্তু বাস্তব জীবনে কম্পিউটার নেটওয়ার্ক কীভাবে কাজ করে, সেটা বুঝতে গেলে &lt;strong&gt;TCP/IP Model&lt;/strong&gt; সম্পর্কে পরিষ্কার ধারণা থাকা আরও গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;এই লেখায় আমরা TCP/IP Model-এর ৫টি layer, OSI Model-এর সঙ্গে এর পার্থক্য, TCP বনাম UDP, data encapsulation এবং TCP/IP-এর ঐতিহাসিক পটভূমি—সবকিছু সহজভাবে বুঝব।&lt;/p&gt;




&lt;h2&gt;
  
  
  OSI বনাম TCP/IP: Layerগুলো কোথায় গেল?
&lt;/h2&gt;

&lt;p&gt;OSI Model-এ মোট ৭টি layer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Application&lt;/li&gt;
&lt;li&gt;Presentation&lt;/li&gt;
&lt;li&gt;Session&lt;/li&gt;
&lt;li&gt;Transport&lt;/li&gt;
&lt;li&gt;Network&lt;/li&gt;
&lt;li&gt;Data Link&lt;/li&gt;
&lt;li&gt;Physical&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;অন্যদিকে, TCP/IP Model-কে সাধারণভাবে ৪ বা ৫টি layer-এ উপস্থাপন করা হয়। এই লেখায় আমরা &lt;strong&gt;৫-layer representation&lt;/strong&gt; ব্যবহার করছি:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Application&lt;/li&gt;
&lt;li&gt;Transport&lt;/li&gt;
&lt;li&gt;Network&lt;/li&gt;
&lt;li&gt;Data Link&lt;/li&gt;
&lt;li&gt;Physical&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;TCP/IP-এর ক্ষেত্রে &lt;strong&gt;Presentation&lt;/strong&gt; এবং &lt;strong&gt;Session&lt;/strong&gt;-এর কাজ আলাদা standalone layer হিসেবে থাকে না; সেগুলোর দায়িত্ব Application layer-এর বিভিন্ন protocol/application-এর মধ্যে বাস্তবায়িত হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  একটি গুরুত্বপূর্ণ বিষয়: L7, L4, L3, L2, L1
&lt;/h3&gt;

&lt;p&gt;Software engineering এবং networking-এর কথাবার্তায় এখনও OSI-এর layer numbering ব্যাপকভাবে ব্যবহার করা হয়।&lt;/p&gt;

&lt;p&gt;তাই TCP/IP Model-এর ৫টি layer হলেও আমরা সাধারণত বলি:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Application → L7&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transport → L4&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network → L3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Link → L2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Physical → L1&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;অর্থাৎ TCP/IP Model-এর Application layer-কে সাধারণত &lt;strong&gt;L7&lt;/strong&gt; বলেই আলোচনা করা হয়। একইভাবে Transport হলো &lt;strong&gt;L4&lt;/strong&gt;, Network হলো &lt;strong&gt;L3&lt;/strong&gt; ইত্যাদি।&lt;/p&gt;




&lt;h1&gt;
  
  
  TCP/IP Model-এর ৫টি Layer
&lt;/h1&gt;

&lt;p&gt;ধরুন, আপনি একটি কম্পিউটার থেকে আরেকটি কম্পিউটারে &lt;code&gt;"Hello"&lt;/code&gt; পাঠাতে চান। এই data এক layer থেকে আরেক layer-এ যাওয়ার সময় বিভিন্ন ধরনের information যোগ করে আরও বড় network unit-এ পরিণত হয়।&lt;/p&gt;

&lt;p&gt;চলুন layer by layer দেখি।&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Application Layer — L7
&lt;/h2&gt;

&lt;p&gt;এটাই software engineer-এর জন্য সবচেয়ে কাছের layer।&lt;/p&gt;

&lt;p&gt;আপনি browser, Messenger, WhatsApp বা অন্য কোনো application-এ যখন &lt;code&gt;"Hello"&lt;/code&gt; লিখে Send চাপেন, তখন application সেই data নিয়ে কাজ শুরু করে।&lt;/p&gt;

&lt;p&gt;Application layer-এর কাজের মধ্যে থাকতে পারে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data format করা&lt;/li&gt;
&lt;li&gt;JSON/XML-এর মতো format ব্যবহার করা&lt;/li&gt;
&lt;li&gt;Compression&lt;/li&gt;
&lt;li&gt;Encryption-এর মতো application-level processing&lt;/li&gt;
&lt;li&gt;Application-level session/state management&lt;/li&gt;
&lt;li&gt;HTTP, HTTPS, DNS ইত্যাদি protocol ব্যবহার করা&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;সহজভাবে:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Data → Application Processing → Network-এর জন্য প্রস্তুত Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;উদাহরণ হিসেবে, আপনার application &lt;code&gt;"Hello"&lt;/code&gt;-কে একটি structured format-এ রূপান্তর করতে পারে, প্রয়োজন অনুযায়ী compress বা encrypt করতে পারে, এবং এরপর Transport layer-এ পাঠাতে পারে।&lt;/p&gt;

&lt;h3&gt;
  
  
  Software Engineer হিসেবে কেন L7 গুরুত্বপূর্ণ?
&lt;/h3&gt;

&lt;p&gt;কারণ আমরা যে web application, API, mobile application বা distributed system তৈরি করি, সেগুলোর communication-এর বড় অংশ Application layer-এর protocol-এর ওপর নির্ভর করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Transport Layer — L4
&lt;/h1&gt;

&lt;p&gt;Application layer-এর data এবার Transport layer-এ আসে।&lt;/p&gt;

&lt;p&gt;এখানে সবচেয়ে গুরুত্বপূর্ণ দুটি protocol হলো:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TCP — Transmission Control Protocol&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UDP — User Datagram Protocol&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এখানেই একটি গুরুত্বপূর্ণ decision আসে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Data কি reliable delivery চাইছে, নাকি speed এবং low overhead বেশি গুরুত্বপূর্ণ?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  TCP: Reliable এবং Controlled Communication
&lt;/h2&gt;

&lt;p&gt;TCP connection-oriented এবং reliable transport প্রদান করে।&lt;/p&gt;

&lt;p&gt;ধরুন আপনি একটি গুরুত্বপূর্ণ text message বা API request পাঠাচ্ছেন। Data-এর কোনো অংশ হারিয়ে গেলে বা ভুলভাবে পৌঁছালে সমস্যা হতে পারে।&lt;/p&gt;

&lt;p&gt;TCP এই ধরনের communication-এর জন্য sequence, acknowledgement, retransmission, flow control এবং congestion control-এর মতো mechanism ব্যবহার করে reliable byte-stream delivery দেয়।&lt;/p&gt;

&lt;p&gt;TCP ব্যবহার করার সাধারণ উদাহরণ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web traffic (HTTP/HTTPS, যখন TCP ব্যবহৃত হয়)&lt;/li&gt;
&lt;li&gt;API communication&lt;/li&gt;
&lt;li&gt;File transfer&lt;/li&gt;
&lt;li&gt;Database connection&lt;/li&gt;
&lt;li&gt;অন্যান্য reliable application communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TCP-তে Transport-layer data unit-কে সাধারণত &lt;strong&gt;Segment&lt;/strong&gt; বলা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  UDP: Fast এবং Low-Overhead Communication
&lt;/h1&gt;

&lt;p&gt;UDP-এর design TCP-এর তুলনায় অনেক lightweight।&lt;/p&gt;

&lt;p&gt;UDP connection establish করে TCP-এর মতো reliable byte stream তৈরি করে না এবং retransmission-এর মতো reliability mechanism নিজে থেকে প্রদান করে না।&lt;/p&gt;

&lt;p&gt;ফলে application-এর জন্য speed, low latency এবং control বেশি গুরুত্বপূর্ণ হলে UDP উপযোগী হতে পারে।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live streaming-এর কিছু use case&lt;/li&gt;
&lt;li&gt;Online gaming&lt;/li&gt;
&lt;li&gt;Real-time communication&lt;/li&gt;
&lt;li&gt;DNS query&lt;/li&gt;
&lt;li&gt;এমন application যেখানে কিছু packet হারানো acceptable এবং application নিজেই প্রয়োজনীয় logic handle করতে পারে&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UDP-এর Transport-layer data unit-কে সাধারণত &lt;strong&gt;Datagram&lt;/strong&gt; বলা হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  TCP বনাম UDP — দ্রুত মনে রাখার উপায়
&lt;/h3&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;TCP&lt;/th&gt;
&lt;th&gt;UDP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;Reliable delivery&lt;/td&gt;
&lt;td&gt;Delivery guarantee নেই&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connection&lt;/td&gt;
&lt;td&gt;Connection-oriented&lt;/td&gt;
&lt;td&gt;Connectionless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ordering&lt;/td&gt;
&lt;td&gt;Ordered byte stream&lt;/td&gt;
&lt;td&gt;Ordering guarantee নেই&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retransmission&lt;/td&gt;
&lt;td&gt;আছে&lt;/td&gt;
&lt;td&gt;নেই&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overhead&lt;/td&gt;
&lt;td&gt;বেশি&lt;/td&gt;
&lt;td&gt;কম&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Unit&lt;/td&gt;
&lt;td&gt;Segment&lt;/td&gt;
&lt;td&gt;Datagram&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ব্যবহার&lt;/td&gt;
&lt;td&gt;Reliable communication&lt;/td&gt;
&lt;td&gt;Low-latency/low-overhead communication&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Interview Tip:&lt;/strong&gt; শুধু “TCP 100% guarantee দেয়” বললে বিষয়টি oversimplified হয়। ভালো উত্তর হবে—TCP reliable, ordered byte-stream delivery এবং retransmission/acknowledgement-এর মতো mechanism প্রদান করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Network Layer — L3
&lt;/h1&gt;

&lt;p&gt;Transport layer-এর Segment বা Datagram এবার Network layer-এ আসে।&lt;/p&gt;

&lt;p&gt;এখানে মূল বিষয় হলো &lt;strong&gt;IP addressing এবং routing&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;Network layer source এবং destination-এর IP address ব্যবহার করে data-কে network-এর মধ্যে কোথায় যেতে হবে সেটা নির্ধারণে সাহায্য করে।&lt;/p&gt;

&lt;p&gt;এ পর্যায়ে:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transport Data + IP Header → IP Packet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এখানে গুরুত্বপূর্ণ protocol হলো:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IPv4&lt;/li&gt;
&lt;li&gt;IPv6&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;সহজভাবে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IP address বলে data কোন host/network-এর দিকে যাবে।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  4. Data Link Layer — L2
&lt;/h1&gt;

&lt;p&gt;এখন আমাদের Packet local network-এর মধ্যে কীভাবে পৌঁছাবে, সেটা গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;Data Link layer-এ Ethernet বা Wi-Fi-এর মতো technologies কাজ করে এবং local network delivery-এর জন্য &lt;strong&gt;MAC address&lt;/strong&gt; গুরুত্বপূর্ণ ভূমিকা পালন করে।&lt;/p&gt;

&lt;p&gt;এখানে Packet-এর সঙ্গে Data Link header/trailer যুক্ত হয়ে সাধারণত একটি &lt;strong&gt;Frame&lt;/strong&gt; তৈরি হয়।&lt;/p&gt;

&lt;p&gt;সহজভাবে:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Packet → Data Link Frame&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এখানে source এবং destination MAC address-এর মতো information থাকতে পারে।&lt;/p&gt;

&lt;h3&gt;
  
  
  IP বনাম MAC
&lt;/h3&gt;

&lt;p&gt;সহজভাবে মনে রাখুন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IP Address → Logical addressing / routing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MAC Address → Local link-level addressing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;একটি router সাধারণত IP routing-এর ভিত্তিতে packet forward করে, আর একটি Ethernet switch local network-এ MAC address table ব্যবহার করে frame forward করতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Physical Layer — L1
&lt;/h1&gt;

&lt;p&gt;সবশেষে data বাস্তব transmission medium-এর মধ্য দিয়ে যেতে হবে।&lt;/p&gt;

&lt;p&gt;Physical layer bits-কে physical signals হিসেবে transmit করার বিষয়টি handle করে।&lt;/p&gt;

&lt;p&gt;Medium হতে পারে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copper cable&lt;/li&gt;
&lt;li&gt;Fiber optic cable&lt;/li&gt;
&lt;li&gt;Radio waves / Wi-Fi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Software engineer হিসেবে Physical layer-এর electrical বা signaling details সবসময় গভীরভাবে জানা জরুরি নয়। তবে layerটির basic purpose বোঝা গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  পুরো Data Flow এক নজরে
&lt;/h1&gt;

&lt;p&gt;ধরুন Application থেকে &lt;code&gt;"Hello"&lt;/code&gt; পাঠানো হলো।&lt;/p&gt;

&lt;p&gt;Conceptually data নিচের মতো layer থেকে layer-এ যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application Data
      ↓
TCP → Segment
      ↓
IP → Packet
      ↓
Ethernet/Wi-Fi → Frame
      ↓
Physical → Bits / Signals
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অন্যদিকে receiving computer-এ processটি বিপরীত দিকে চলে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bits / Signals
      ↓
Frame
      ↓
Packet
      ↓
Segment / Datagram
      ↓
Application Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই process-কে networking-এর ভাষায় &lt;strong&gt;encapsulation&lt;/strong&gt; এবং receiving side-এ &lt;strong&gt;decapsulation&lt;/strong&gt; বলা হয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  TCP/IP-এর ঐতিহাসিক পটভূমি
&lt;/h1&gt;

&lt;p&gt;TCP/IP Model হঠাৎ করে কোনো একদিন একটি complete master plan হিসেবে তৈরি হয়নি। Internet networking-এর বিভিন্ন protocol ধাপে ধাপে বিকশিত হয়েছে।&lt;/p&gt;

&lt;h3&gt;
  
  
  1969 — ARPANET
&lt;/h3&gt;

&lt;p&gt;1969 সালে &lt;strong&gt;ARPANET (Advanced Research Projects Agency Network)&lt;/strong&gt; চালু হয়। এটি পরবর্তীতে আধুনিক Internet-এর বিকাশে গুরুত্বপূর্ণ ভূমিকা রাখে।&lt;/p&gt;

&lt;h3&gt;
  
  
  1970s — TCP/IP-এর বিকাশ
&lt;/h3&gt;

&lt;p&gt;এই সময় বিভিন্ন network-কে interconnect করার জন্য নতুন networking protocol নিয়ে গবেষণা চলতে থাকে।&lt;/p&gt;

&lt;p&gt;TCP এবং IP একই সময়ে একইভাবে তৈরি হয়নি। এগুলোর development এবং standardization ধাপে ধাপে হয়েছে।&lt;/p&gt;

&lt;h3&gt;
  
  
  1983 — TCP/IP এবং ARPANET
&lt;/h3&gt;

&lt;p&gt;1983 সালে ARPANET-এর host communication-এ TCP/IP ব্যবহারের transition একটি গুরুত্বপূর্ণ milestone হয়ে ওঠে।&lt;/p&gt;

&lt;h3&gt;
  
  
  1984 — OSI Model
&lt;/h3&gt;

&lt;p&gt;OSI Model পরে একটি standardized reference framework হিসেবে আসে।&lt;/p&gt;

&lt;p&gt;তাই networking শেখার সময় আমরা অনেক ক্ষেত্রে OSI Model দিয়ে fundamental concepts বুঝি, কিন্তু real-world networking-এ TCP/IP protocol suite-ই কেন্দ্রীয়।&lt;/p&gt;




&lt;h1&gt;
  
  
  Software Engineer হিসেবে কোন Layerগুলো সবচেয়ে গুরুত্বপূর্ণ?
&lt;/h1&gt;

&lt;p&gt;Software engineer হিসেবে আপনার জন্য সবচেয়ে গুরুত্বপূর্ণ:&lt;/p&gt;

&lt;h3&gt;
  
  
  L7 — Application
&lt;/h3&gt;

&lt;p&gt;HTTP, HTTPS, DNS, APIs, application protocols&lt;/p&gt;

&lt;h3&gt;
  
  
  L4 — Transport
&lt;/h3&gt;

&lt;p&gt;TCP, UDP, ports, reliability, connection, latency&lt;/p&gt;

&lt;h3&gt;
  
  
  L3 — Network
&lt;/h3&gt;

&lt;p&gt;IP, routing, subnetting, IPv4/IPv6&lt;/p&gt;

&lt;h3&gt;
  
  
  L2 — Data Link
&lt;/h3&gt;

&lt;p&gt;MAC address, Ethernet, Wi-Fi, switching&lt;/p&gt;

&lt;h3&gt;
  
  
  L1 — Physical
&lt;/h3&gt;

&lt;p&gt;Basic ধারণা থাকা ভালো, তবে hardware/electrical details আপনার role অনুযায়ী প্রয়োজন হতে পারে।&lt;/p&gt;




&lt;h1&gt;
  
  
  একটি বাস্তব উদাহরণ: Browser থেকে Website Open করা
&lt;/h1&gt;

&lt;p&gt;আপনি browser-এ একটি website-এর address লিখলেন এবং Enter চাপলেন।&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application (L7)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Browser HTTP/HTTPS request তৈরি করে।&lt;/p&gt;

&lt;p&gt;↓  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transport (L4)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Communication-এর জন্য TCP বা appropriate transport protocol ব্যবহৃত হয়।&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network (L3)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
IP addressing এবং routing-এর মাধ্যমে destination-এর দিকে packet এগোয়।&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Link (L2)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Local network-এর মধ্যে frame delivery-এর জন্য MAC address এবং link-layer technology কাজ করে।&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical (L1)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
শেষ পর্যন্ত bits/signals network medium-এর মধ্য দিয়ে travel করে।&lt;/p&gt;

&lt;p&gt;Destination machine-এ আবার একই process reverse order-এ চলে এবং application শেষ পর্যন্ত response পায়।&lt;/p&gt;




&lt;h1&gt;
  
  
  Interview-এ কীভাবে TCP বনাম UDP বলবেন?
&lt;/h1&gt;

&lt;p&gt;যদি interviewer জিজ্ঞেস করে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“TCP এবং UDP-এর মধ্যে পার্থক্য কী?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;তাহলে সংক্ষেপে বলতে পারেন:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TCP হলো connection-oriented এবং reliable transport protocol, যা ordered delivery, acknowledgement এবং retransmission-এর মতো mechanism ব্যবহার করে। UDP হলো connectionless এবং lightweight protocol, যেখানে delivery, ordering বা retransmission-এর built-in guarantee নেই। তাই reliability গুরুত্বপূর্ণ হলে TCP এবং low latency/low overhead গুরুত্বপূর্ণ হলে UDP উপযোগী হতে পারে।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এই উত্তরটি শুধু “TCP fast/UDP slow” ধরনের ভুল ধারণার চেয়ে অনেক বেশি accurate।&lt;/p&gt;




&lt;h1&gt;
  
  
  শেষ কথা
&lt;/h1&gt;

&lt;p&gt;TCP/IP Model মুখস্থ করার বিষয় নয়—&lt;strong&gt;data কীভাবে এক application থেকে অন্য machine-এর application-এ যায়, সেটা বুঝে নেওয়াই আসল বিষয়।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;একটি সহজ mental model রাখুন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Application → Transport → Network → Data Link → Physical&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আর data unit মনে রাখুন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Data → Segment/Datagram → Packet → Frame → Bits&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Software engineer হিসেবে অন্তত &lt;strong&gt;L7, L4, L3 এবং L2&lt;/strong&gt; সম্পর্কে শক্ত ধারণা থাকা অত্যন্ত গুরুত্বপূর্ণ। কারণ backend, distributed systems, cloud, DevOps, SRE, cybersecurity—প্রায় সব ক্ষেত্রেই networking fundamentals বারবার ফিরে আসে।&lt;/p&gt;

&lt;p&gt;সবচেয়ে ভালো শেখার পদ্ধতি হলো শুধু পড়া নয়—&lt;strong&gt;নিজে লিখুন, diagram আঁকুন, বন্ধুদের সঙ্গে আলোচনা করুন, এবং real-world networking problem দিয়ে conceptগুলো প্রয়োগ করুন।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Networking যত গভীরভাবে বুঝবেন, software systems কীভাবে বাস্তবে communicate করে সেটাও তত পরিষ্কার হবে।&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Revision
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;L7 → Application → HTTP/HTTPS, DNS, APIs
L4 → Transport   → TCP / UDP → Segment / Datagram
L3 → Network     → IP         → Packet
L2 → Data Link   → MAC        → Frame
L1 → Physical    → Signals    → Bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TCP/IP Model বুঝুন → TCP/UDP বুঝুন → IP ও routing বুঝুন → MAC ও switching বুঝুন → তারপর networking-এর আরও গভীরে যান।&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>computerscience</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OSI Model-এর Philosophy: Software Engineer ও Docker-এর জন্য Networking-এর সহজ গাইড</title>
      <dc:creator>Ragib Hasan</dc:creator>
      <pubDate>Tue, 01 Sep 2026 10:01:47 +0000</pubDate>
      <link>https://dev.to/ragibcs/osi-model-er-philosophy-software-engineer-o-docker-er-jny-networking-er-shj-gaaidd-39j4</link>
      <guid>https://dev.to/ragibcs/osi-model-er-philosophy-software-engineer-o-docker-er-jny-networking-er-shj-gaaidd-39j4</guid>
      <description>&lt;p&gt;Software Engineering, Docker কিংবা Kubernetes---যে ক্ষেত্রেই কাজ করি না&lt;br&gt;
কেন, networking-এর fundamental ধারণাগুলো পরিষ্কার না থাকলে পরবর্তীতে system&lt;br&gt;
design, debugging, load balancing, proxy এবং container networking কঠিন&lt;br&gt;
মনে হতে পারে।&lt;/p&gt;

&lt;p&gt;কিন্তু networking শেখার সময় সবচেয়ে বড় সমস্যা হলো আমরা অনেক সময় Layer 1,&lt;br&gt;
Layer 2, Layer 3 মুখস্থ করি, কিন্তু বুঝি না---&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;এই layerগুলো আসলে কেন আছে?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আরও গুরুত্বপূর্ণ প্রশ্ন হলো:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  একটি computer থেকে অন্য computer-এ data কীভাবে যায়?&lt;/li&gt;
&lt;li&gt;  IP কোথায় যুক্ত হয়?&lt;/li&gt;
&lt;li&gt;  Port কেন দরকার?&lt;/li&gt;
&lt;li&gt;  MAC Address-এর কাজ কী?&lt;/li&gt;
&lt;li&gt;  Segment, Packet, Frame এবং Bit---এগুলোর মধ্যে সম্পর্ক কী?&lt;/li&gt;
&lt;li&gt;  Docker-এর সঙ্গে OSI Model-এর সম্পর্ক কোথায়?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এই লেখায় OSI Model-কে শুধু পরীক্ষার বিষয় হিসেবে নয়, বরং &lt;strong&gt;একজন Software&lt;br&gt;
Engineer-এর networking mental model&lt;/strong&gt; হিসেবে বোঝার চেষ্টা করব।&lt;/p&gt;


&lt;h2&gt;
  
  
  ১. OSI Model আসলে কী?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;OSI&lt;/strong&gt; এর পূর্ণরূপ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Open System Interconnection&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OSI Model হলো networking-এর একটি &lt;strong&gt;conceptual model বা framework&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;অর্থাৎ এটি কোনো physical device নয়, কোনো software নয় এবং computer যখন&lt;br&gt;
data পাঠায় তখন সরাসরি "OSI Model" ব্যবহার করে না।&lt;/p&gt;

&lt;p&gt;বরং OSI Model আমাদের একটি &lt;strong&gt;মানসিক কাঠামো (mental framework)&lt;/strong&gt;&lt;br&gt;
দেয়---network communication-এর বিভিন্ন দায়িত্বকে কীভাবে আলাদা করে চিন্তা&lt;br&gt;
করা যায়।&lt;/p&gt;

&lt;p&gt;ভিডিওর আলোচনায়ও OSI-কে একটি model, framework এবং conceptual philosophy&lt;br&gt;
হিসেবে ব্যাখ্যা করা হয়েছে।&lt;/p&gt;


&lt;h2&gt;
  
  
  ২. OSI Model কেন তৈরি হয়েছিল?
&lt;/h2&gt;

&lt;p&gt;Networking-এর শুরুর দিকে বিভিন্ন vendor এবং organization নিজেদের মতো করে&lt;br&gt;
networking rules ও protocols তৈরি করত।&lt;/p&gt;

&lt;p&gt;ধরা যাক---&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Company A-এর নিজস্ব communication rules আছে।&lt;/li&gt;
&lt;li&gt;  Company B-এর অন্য rules আছে।&lt;/li&gt;
&lt;li&gt;  Company C আবার আলাদা protocol ব্যবহার করছে।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;তাহলে সমস্যা কোথায়?&lt;/p&gt;

&lt;p&gt;একটি system-এর data অন্য system বুঝতে নাও পারে।&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;Company A
   |
   | Rules A
   v
Computer A
   X
Computer B
   ^
   | Rules B
Company B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;দুই পক্ষের communication-এর rules যদি compatible না হয়, তাহলে&lt;br&gt;
communication কঠিন হয়ে যায়।&lt;/p&gt;

&lt;p&gt;এই ধরনের interoperability সমস্যা কমানোর জন্য একটি common&lt;br&gt;
standard/framework প্রয়োজন ছিল।&lt;/p&gt;

&lt;p&gt;এখানেই OSI Model-এর ধারণা গুরুত্বপূর্ণ হয়ে ওঠে।&lt;/p&gt;

&lt;p&gt;১৯৮৪ সালে ISO-এর মাধ্যমে OSI Model standard হিসেবে উপস্থাপিত হয়।&lt;/p&gt;


&lt;h2&gt;
  
  
  ৩. ISO কী?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ISO&lt;/strong&gt; হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;International Organization for Standardization&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এর উদ্দেশ্য বিভিন্ন ক্ষেত্রে international standards তৈরি করা।&lt;/p&gt;

&lt;p&gt;Networking-এর ক্ষেত্রেও একটি common conceptual framework প্রয়োজন ছিল---যাতে&lt;br&gt;
বিভিন্ন system-এর communication-কে একই ধরনের layered architecture দিয়ে&lt;br&gt;
বোঝা ও design করা যায়।&lt;/p&gt;

&lt;p&gt;তাই OSI Model-এর philosophy-কে এভাবে ভাবতে পারি:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Communication-এর কাজগুলোকে বিভিন্ন logical layer-এ ভাগ করে প্রত্যেক&lt;br&gt;
layer-এর responsibility আলাদা করে দেওয়া।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এটি networking শেখার জন্য অত্যন্ত powerful একটি ধারণা।&lt;/p&gt;


&lt;h2&gt;
  
  
  ৪. System, Open System এবং Interconnection
&lt;/h2&gt;

&lt;p&gt;OSI নামটি বুঝতে হলে তিনটি শব্দ বুঝতে হবে:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open + System + Interconnection&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ৪.১ System কী?
&lt;/h3&gt;

&lt;p&gt;সহজভাবে, কিছু component যখন নির্দিষ্ট resource share করে এবং একটি নির্দিষ্ট&lt;br&gt;
উদ্দেশ্যে একসঙ্গে কাজ করে, তখন তাকে একটি system হিসেবে ভাবা যায়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;/p&gt;

&lt;p&gt;একটি &lt;strong&gt;School System&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;এখানে থাকতে পারে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Students&lt;/li&gt;
&lt;li&gt;  Teachers&lt;/li&gt;
&lt;li&gt;  Administration&lt;/li&gt;
&lt;li&gt;  Infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এরা বিভিন্ন resource ও responsibility-এর মাধ্যমে একটি system তৈরি করে।&lt;/p&gt;
&lt;h3&gt;
  
  
  ৪.২ Open System কী?
&lt;/h3&gt;

&lt;p&gt;একটি system যদি তার external environment থেকে input গ্রহণ করে এবং&lt;br&gt;
environment-এ output প্রদান করতে পারে, তাহলে সেটিকে open system হিসেবে&lt;br&gt;
বোঝানো যায়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;/p&gt;

&lt;p&gt;একটি school-এর students বাইরে থেকে আসে এবং school-এর environment-এ&lt;br&gt;
interaction করে।&lt;/p&gt;

&lt;p&gt;অর্থাৎ system এবং external environment-এর মধ্যে interaction রয়েছে।&lt;/p&gt;
&lt;h3&gt;
  
  
  ৪.৩ Interconnection কী?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Interconnection&lt;/strong&gt; অর্থ একাধিক independent system-এর মধ্যে communication&lt;br&gt;
বা interaction।&lt;/p&gt;

&lt;p&gt;এখানে &lt;strong&gt;inter&lt;/strong&gt; এবং &lt;strong&gt;intra&lt;/strong&gt;-র পার্থক্য মনে রাখা যায়।&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Intra&lt;/strong&gt; → একই system-এর ভেতরের interaction&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Inter&lt;/strong&gt; → একাধিক system-এর মধ্যকার interaction&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Open System Interconnection = একাধিক independent open system-এর মধ্যে&lt;br&gt;
communication বোঝার একটি conceptual framework।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  ৫. OSI Model-এর ৭টি Layer
&lt;/h2&gt;

&lt;p&gt;OSI Model-এ মোট &lt;strong&gt;৭টি layer&lt;/strong&gt; আছে।&lt;/p&gt;

&lt;p&gt;উপরে থেকে নিচে:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L7 --- Application Layer&lt;/strong&gt;\&lt;br&gt;
সহজভাবে: Application-এর network interaction&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L6 --- Presentation Layer&lt;/strong&gt;\&lt;br&gt;
সহজভাবে: Data representation, encoding, encryption ও compression&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L5 --- Session Layer&lt;/strong&gt;\&lt;br&gt;
সহজভাবে: Communication session management&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L4 --- Transport Layer&lt;/strong&gt;\&lt;br&gt;
সহজভাবে: Ports, segmentation ও data transport&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L3 --- Network Layer&lt;/strong&gt;\&lt;br&gt;
সহজভাবে: IP addressing ও routing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L2 --- Data Link Layer&lt;/strong&gt;\&lt;br&gt;
সহজভাবে: MAC addressing ও frames&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L1 --- Physical Layer&lt;/strong&gt;\&lt;br&gt;
সহজভাবে: Bits এবং physical transmission&lt;/p&gt;
&lt;h3&gt;
  
  
  Layer মনে রাখার mnemonic
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Please Do Not Tell Secret Password Anyone&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;P → Physical
D → Data Link
N → Network
T → Transport
S → Session
P → Presentation
A → Application
&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;L7 → Application
L6 → Presentation
L5 → Session
L4 → Transport
L3 → Network
L2 → Data Link
L1 → Physical
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ৬. Layer Number মনে রাখা কেন গুরুত্বপূর্ণ?
&lt;/h2&gt;

&lt;p&gt;Software Engineering এবং networking-এর practical discussion-এ অনেক সময়&lt;br&gt;
layer-এর পুরো নাম না বলে সরাসরি বলা হয়:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  L2&lt;/li&gt;
&lt;li&gt;  L3&lt;/li&gt;
&lt;li&gt;  L4&lt;/li&gt;
&lt;li&gt;  L7&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;L2 = Data Link&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L3 = Network&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L4 = Transport&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L7 = Application&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;বিশেষ করে L2, L4 এবং L7 terminology system design, proxy, load balancing&lt;br&gt;
এবং infrastructure-এর আলোচনায় নিয়মিত আসতে পারে।&lt;/p&gt;


&lt;h2&gt;
  
  
  ৭. সাতটি Layer-কে একটি Data Journey হিসেবে ভাবুন
&lt;/h2&gt;

&lt;p&gt;OSI Model শেখার সবচেয়ে সহজ উপায় হলো এটিকে একটি &lt;strong&gt;data journey&lt;/strong&gt; হিসেবে&lt;br&gt;
দেখা।&lt;/p&gt;

&lt;p&gt;ধরা যাক:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Computer A থেকে Computer B-তে &lt;code&gt;"Hello"&lt;/code&gt; পাঠাতে হবে।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sender side-এ data নিচের দিকে নামবে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
     ↓
Presentation
     ↓
Session
     ↓
Transport
     ↓
Network
     ↓
Data Link
     ↓
Physical
     ↓
Network Medium
     ↓
Receiver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sender side-এ data নিচের দিকে যেতে যেতে বিভিন্ন layer-এর information পায়।&lt;/p&gt;

&lt;p&gt;Receiver side-এ আবার উল্টোভাবে উপরের দিকে উঠে যায়।&lt;/p&gt;




&lt;h2&gt;
  
  
  [DIAGRAM 1 --- এখানে যোগ করুন]
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Diagram prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a professional 16:9 educational infographic showing the OSI&lt;br&gt;
Model as a seven-layer conceptual framework. Show L7 Application at&lt;br&gt;
the top and L1 Physical at the bottom, with a clear distinction that&lt;br&gt;
OSI is a conceptual model rather than a physical device or software.&lt;br&gt;
Use two computers connected through a network medium and show data&lt;br&gt;
moving through the seven logical layers. Modern software engineering&lt;br&gt;
textbook aesthetic, clean typography, minimal clutter, high&lt;br&gt;
readability.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ৮. L7 --- Application Layer
&lt;/h1&gt;

&lt;p&gt;সবচেয়ে উপরের layer হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Layer 7 --- Application Layer&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানেই আমরা application-এর মাধ্যমে network-এর সঙ্গে interaction করি।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Web browser&lt;/li&gt;
&lt;li&gt;  Messenger&lt;/li&gt;
&lt;li&gt;  Web application&lt;/li&gt;
&lt;li&gt;  Email application&lt;/li&gt;
&lt;li&gt;  API client&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ধরা যাক Messenger-এ আমরা লিখলাম:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;তারপর Send button-এ click করলাম।&lt;/p&gt;

&lt;p&gt;এখান থেকে network communication-এর journey শুরু হলো।&lt;/p&gt;

&lt;h3&gt;
  
  
  Software Engineer কোথায় সবচেয়ে বেশি কাজ করে?
&lt;/h3&gt;

&lt;p&gt;Practical software development-এর ক্ষেত্রে Application Layer অত্যন্ত&lt;br&gt;
গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;কারণ আমরা তৈরি করি:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Web application&lt;/li&gt;
&lt;li&gt;  REST API&lt;/li&gt;
&lt;li&gt;  GraphQL API&lt;/li&gt;
&lt;li&gt;  Backend service&lt;/li&gt;
&lt;li&gt;  Microservice&lt;/li&gt;
&lt;li&gt;  Messaging system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ইত্যাদি।&lt;/p&gt;


&lt;h1&gt;
  
  
  ৯. L6 --- Presentation Layer
&lt;/h1&gt;

&lt;p&gt;এরপর data Presentation Layer-এর ধারণার সঙ্গে সম্পর্কিত হয়।&lt;/p&gt;

&lt;p&gt;এই layer-এর মূল ধারণা হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Data কীভাবে represented হবে?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে data representation, encoding, encryption এবং compression-এর মতো&lt;br&gt;
বিষয়গুলোকে conceptualভাবে ধরা হয়।&lt;/p&gt;

&lt;p&gt;উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা XML-এর মতো representation।&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;বাস্তব modern networking stack-এ OSI-এর প্রতিটি layer সবসময় আলাদা&lt;br&gt;
software component হিসেবে উপস্থিত থাকে না।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OSI Model মূলত communication-এর responsibility বোঝানোর framework।&lt;/p&gt;


&lt;h1&gt;
  
  
  ১০. L5 --- Session Layer
&lt;/h1&gt;

&lt;p&gt;এরপর:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Layer 5 --- Session Layer&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এর মূল ধারণা হলো communication session পরিচালনা করা।&lt;/p&gt;

&lt;p&gt;সহজভাবে ভাবুন:&lt;/p&gt;

&lt;p&gt;দুই পক্ষের মধ্যে একটি communication চলছে।&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;  Session শুরু করা&lt;/li&gt;
&lt;li&gt;  Session বজায় রাখা&lt;/li&gt;
&lt;li&gt;  Session শেষ করা&lt;/li&gt;
&lt;li&gt;  প্রয়োজনে session পুনরায় establish করা&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এসব ধারণা Session Layer-এর সঙ্গে সম্পর্কিত।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sender
   |
   | Session
   |
   v
Receiver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১১. L7 + L6 + L5-কে একসঙ্গে কীভাবে ভাবব?
&lt;/h1&gt;

&lt;p&gt;এই তিনটি layer-কে সহজে এভাবে মনে রাখা যায়:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;L7 → Application
L6 → Data Representation
L5 → Session
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটি application data তৈরি করছে।&lt;/p&gt;

&lt;p&gt;Data একটি নির্দিষ্ট representation-এ যাচ্ছে।&lt;/p&gt;

&lt;p&gt;তারপর communication session-এর context বজায় থাকছে।&lt;/p&gt;

&lt;p&gt;পরবর্তী layerগুলো data transport-এর networking mechanics-এর দিকে এগিয়ে&lt;br&gt;
যায়।&lt;/p&gt;


&lt;h1&gt;
  
  
  ১২. L4 --- Transport Layer
&lt;/h1&gt;

&lt;p&gt;এখন আসছে networking-এর সবচেয়ে গুরুত্বপূর্ণ layerগুলোর একটি:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Layer 4 --- Transport Layer&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে দুটি গুরুত্বপূর্ণ ধারণা:&lt;/p&gt;
&lt;h3&gt;
  
  
  Port
&lt;/h3&gt;

&lt;p&gt;এবং&lt;/p&gt;
&lt;h3&gt;
  
  
  Segment
&lt;/h3&gt;

&lt;p&gt;ধরা যাক একটি computer-এ একই সময়ে অনেক application চলছে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Computer
|
├── Browser
├── Messenger
├── API Server
└── Database Client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন অন্য computer থেকে data এলে প্রশ্ন হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;এই data কোন application-এর কাছে যাবে?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে &lt;strong&gt;Port Number&lt;/strong&gt; গুরুত্বপূর্ণ।&lt;/p&gt;




&lt;h1&gt;
  
  
  ১৩. IP বনাম Port --- একটি সহজ analogy
&lt;/h1&gt;

&lt;p&gt;একটি পাঁচতলা building কল্পনা করুন।&lt;/p&gt;

&lt;p&gt;Building-এর একটি address আছে।&lt;/p&gt;

&lt;p&gt;এটি হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IP Address&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;কিন্তু building-এর ভিতরে অনেক apartment বা service আছে।&lt;/p&gt;

&lt;p&gt;কোন service-এ যেতে হবে সেটা আলাদা করে বলতে হবে।&lt;/p&gt;

&lt;p&gt;এটি হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Port&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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;IP   → কোন host/network?
Port → সেই host-এর কোন application/service?
&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;192.168.1.10:3000
&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;192.168.1.10 → IP
3000         → Port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৪. Transport Layer-এর Segment
&lt;/h1&gt;

&lt;p&gt;Transport Layer data-কে প্রয়োজন অনুযায়ী ছোট অংশে ভাগ করে transport করতে&lt;br&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;Large Data
    |
    v
+---------+
| Segment |
+---------+
| Segment |
+---------+
| Segment |
+---------+
| Segment |
+---------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এগুলোকে বলা হয়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Segments&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Simplified conceptual model হিসেবে segment-এর সঙ্গে source এবং&lt;br&gt;
destination port-এর ধারণা যুক্ত হয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source Port
     |
     v
+----------------------+
|        DATA          |
+----------------------+
     ^
     |
Destination Port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৫. L3 --- Network Layer
&lt;/h1&gt;

&lt;p&gt;এরপর data যায়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Layer 3 --- Network Layer&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে সবচেয়ে গুরুত্বপূর্ণ ধারণা:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IP Address&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;যদি Port দিয়ে বোঝানো হয়---&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;কোন application/service?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;তাহলে IP দিয়ে বোঝানো হয়---&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;কোন host/network-এর দিকে data যাবে?&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;Sender IP
    |
192.168.1.10

       DATA

Receiver IP
    |
192.168.1.20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ১৬. Segment থেকে Packet
&lt;/h1&gt;

&lt;p&gt;Network Layer-এর conceptual data unit হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Packet&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;Transport Layer

+---------------------+
| Source Port         |
| Data                |
| Destination Port    |
+---------------------+
          |
          v
Network Layer
          |
          v
+---------------------+
| Source IP           |
|       Packet        |
| Destination IP      |
+---------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তাই মনে রাখুন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;L4 → Segment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L3 → Packet&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ১৭. IP Address বনাম Port
&lt;/h1&gt;

&lt;p&gt;এই দুইটি গুলিয়ে ফেললে networking-এর পরবর্তী অংশ কঠিন হয়ে যাবে।&lt;/p&gt;

&lt;p&gt;একটি সহজ analogy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;              BUILDING
          192.168.1.10
               IP
                |
       +--------+--------+
       |        |        |
     :3000    :5000    :8000
       |        |        |
     App A    App B    App C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IP = Building-এর address&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Port = নির্দিষ্ট application/service-এর endpoint&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটি একটি learning analogy; বাস্তব networking implementation এর চেয়ে&lt;br&gt;
বিষয়টি আরও বিস্তারিত।&lt;/p&gt;


&lt;h1&gt;
  
  
  ১৮. L2 --- Data Link Layer
&lt;/h1&gt;

&lt;p&gt;এরপর:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Layer 2 --- Data Link Layer&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে গুরুত্বপূর্ণ ধারণা হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MAC Address&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;MAC Address local network/link-এর ক্ষেত্রে network interface-এর link-layer&lt;br&gt;
address হিসেবে ব্যবহৃত হয়।&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;MAC Address-কে সবসময় "সারা জীবনের জন্য অপরিবর্তনীয় physical address"&lt;br&gt;
হিসেবে ভাবা ঠিক নয়।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;বাস্তবে MAC address spoof বা change করা সম্ভব এবং কিছু operating system&lt;br&gt;
privacy/randomization-এর জন্য randomized MAC ব্যবহার করতে পারে।&lt;/p&gt;

&lt;p&gt;তবে learning-এর জন্য:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IP = logical/network-level address&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MAC = link-layer address&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এই mental model অত্যন্ত কার্যকর।&lt;/p&gt;


&lt;h1&gt;
  
  
  ১৯. Packet থেকে Frame
&lt;/h1&gt;

&lt;p&gt;Data Link Layer-এর conceptual PDU:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Frame&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;Network Layer
      |
      | Packet
      v
Data Link Layer
      |
      v
+----------------------------+
| Destination MAC            |
|                            |
|          Packet            |
|                            |
| Source MAC                 |
+----------------------------+

            ↓

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

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;L3 → Packet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L2 → Frame&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ২০. L1 --- Physical Layer
&lt;/h1&gt;

&lt;p&gt;সবশেষে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Layer 1 --- Physical Layer&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এখানে আমরা পৌঁছে যাই &lt;strong&gt;Bits&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;Frame
  ↓
Bits
  ↓
0101010101010101
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই bits physical medium-এর মাধ্যমে signal হিসেবে transmit হয়।&lt;/p&gt;

&lt;p&gt;Medium হতে পারে:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Copper cable&lt;/li&gt;
&lt;li&gt;  Fiber optic&lt;/li&gt;
&lt;li&gt;  Wireless transmission&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Physical Layer-এর মূল concern হলো physical medium-এর মাধ্যমে signal&lt;br&gt;
transmission।&lt;/p&gt;


&lt;h1&gt;
  
  
  ২১. পুরো OSI Journey একসঙ্গে
&lt;/h1&gt;
&lt;h2&gt;
  
  
  [DIAGRAM 2 --- এখানে যোগ করুন]
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Diagram prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a professional 16:9 OSI encapsulation and de-encapsulation&lt;br&gt;
infographic. Show Sender Computer on the left and Receiver Computer on&lt;br&gt;
the right. On the sender side, show L7 Application data moving&lt;br&gt;
downward through L6 Presentation, L5 Session, L4 Transport, L3&lt;br&gt;
Network, L2 Data Link, and L1 Physical. Clearly visualize the&lt;br&gt;
conceptual transformation Data → Segment → Packet → Frame → Bits. Show&lt;br&gt;
source/destination ports at L4, source/destination IP at L3, and&lt;br&gt;
source/destination MAC at L2. Show bits traveling across a network&lt;br&gt;
medium to the receiver, then reverse the process on the receiver: Bits&lt;br&gt;
→ Frame → Packet → Segment → Data. Use clean arrows, technically&lt;br&gt;
accurate labels, professional networking textbook style, 16:9 aspect&lt;br&gt;
ratio.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  ২২. Sender Side-এ কী ঘটে?
&lt;/h1&gt;

&lt;p&gt;একটি simplified conceptual flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
    |
    | "Hello"
    v
Presentation
    |
    | Data representation
    v
Session
    |
    v
Transport
    |
    | Port + Data
    | Segment
    v
Network
    |
    | IP + Segment
    | Packet
    v
Data Link
    |
    | MAC + Packet
    | Frame
    v
Physical
    |
    | Bits
    v
Network Medium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২৩. Receiver Side-এ কী ঘটে?
&lt;/h1&gt;

&lt;p&gt;Receiver side-এ process-এর direction উল্টো।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Physical
    |
    | Bits
    v
Data Link
    |
    | Frame
    v
Network
    |
    | Packet
    v
Transport
    |
    | Segment
    v
Session
    |
    v
Presentation
    |
    v
Application
    |
    v
"Hello"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে layerগুলো নিজেদের relevant information process/remove করে data-কে&lt;br&gt;
পরবর্তী layer-এর কাছে দেয়।&lt;/p&gt;

&lt;p&gt;এই process-কে সাধারণভাবে বলা হয়:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Encapsulation → Sender side&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;De-encapsulation → Receiver side&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  ২৪. Encapsulation কী?
&lt;/h1&gt;

&lt;p&gt;Sender side-এ data যখন নিচের layer-গুলো দিয়ে যায়, তখন প্রতিটি layer নিজের&lt;br&gt;
প্রয়োজনীয় information যোগ করে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
   |
   | Data
   v
Transport
   |
   | Port + Data
   v
Network
   |
   | IP + Segment
   v
Data Link
   |
   | MAC + Packet
   v
Physical
   |
   | Bits
   v
Network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই wrapping process-ই &lt;strong&gt;encapsulation&lt;/strong&gt; নামে পরিচিত।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৫. De-encapsulation কী?
&lt;/h1&gt;

&lt;p&gt;Receiver side-এ বিপরীত ঘটনা ঘটে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bits
 ↓
Frame
 ↓
Packet
 ↓
Segment
 ↓
Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;প্রতিটি relevant layer তার information process করে পরবর্তী layer-এর কাছে&lt;br&gt;
payload পাঠায়।&lt;/p&gt;

&lt;p&gt;শেষে Application সেই original data পায়।&lt;/p&gt;


&lt;h1&gt;
  
  
  ২৬. চারটি শব্দ মনে রাখুন
&lt;/h1&gt;

&lt;p&gt;Networking শেখার সময় এই চারটি term খুব গুরুত্বপূর্ণ।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;L4 → Segment
L3 → Packet
L2 → Frame
L1 → Bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আর addressing-এর simplified 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;L4 → Port
L3 → IP
L2 → MAC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ২৭. IP, Port, MAC --- তিনটি একসঙ্গে
&lt;/h1&gt;

&lt;h2&gt;
  
  
  [DIAGRAM 3 --- এখানে যোগ করুন]
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Diagram prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a clean professional 16:9 educational infographic explaining&lt;br&gt;
the relationship between IP Address, Port, and MAC Address. Use a&lt;br&gt;
simplified building analogy: IP Address represents the host/building&lt;br&gt;
address, Port represents a specific application/service endpoint, and&lt;br&gt;
MAC Address represents the link-layer address of a network interface.&lt;br&gt;
Beside the analogy, show a simplified networking data structure with&lt;br&gt;
Source MAC, Destination MAC, Source IP, Destination IP, Source Port,&lt;br&gt;
Destination Port, and Payload. Add a small note: "Simplified learning&lt;br&gt;
analogy --- real networking is more detailed." Modern computer&lt;br&gt;
networking textbook style, highly readable, minimal visual clutter.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ২৮. Software Engineer-এর জন্য OSI Model কেন গুরুত্বপূর্ণ?
&lt;/h1&gt;

&lt;p&gt;ধরা যাক application কাজ করছে না।&lt;/p&gt;

&lt;p&gt;Browser থেকে request যাচ্ছে না।&lt;/p&gt;

&lt;p&gt;তখন একজন engineer যদি শুধু application code দেখে, debugging-এর scope খুব&lt;br&gt;
সীমিত থাকে।&lt;/p&gt;

&lt;p&gt;কিন্তু networking-এর layered 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;L7 → Application ঠিক আছে?
       ↓
L4 → Port open/listening?
       ↓
L3 → IP/reachability ঠিক আছে?
       ↓
L2 → Local link/interface ঠিক আছে?
       ↓
L1 → Physical connectivity আছে?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটাই OSI Model-এর practical power।&lt;/p&gt;

&lt;p&gt;এটি debugging-কে structured করে।&lt;/p&gt;




&lt;h1&gt;
  
  
  ২৯. Docker-এর সঙ্গে OSI Model-এর সম্পর্ক কোথায়?
&lt;/h1&gt;

&lt;p&gt;এখানেই একজন Software Engineer-এর জন্য OSI Model সবচেয়ে useful হয়ে ওঠে।&lt;/p&gt;

&lt;p&gt;Docker-এ যখন আমরা দেখি:&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;-p&lt;/span&gt; 8080:3000 app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তখন আমরা Port এবং port mapping-এর ধারণার সঙ্গে কাজ করছি।&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 IP
Host IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তখন Layer 3-এর networking concepts সামনে আসে।&lt;/p&gt;

&lt;p&gt;Docker network তৈরি করলে:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;container-to-container communication, network interfaces, bridges,&lt;br&gt;
routing ইত্যাদি নিয়ে কাজ করতে গিয়ে বিভিন্ন networking concept সামনে আসে।&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;HTTP
HTTPS
TCP
IP
Ethernet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তখন আমরা বিভিন্ন networking abstraction এবং protocol-এর সঙ্গে কাজ করছি।&lt;/p&gt;

&lt;p&gt;অর্থাৎ OSI Model মুখস্থ করার উদ্দেশ্য Docker-এ "OSI command" চালানো নয়।&lt;/p&gt;

&lt;p&gt;বরং উদ্দেশ্য হলো:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Docker-এর networking behaviour দেখলে তার পেছনের networking concepts&lt;br&gt;
চিনতে পারা।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ৩০. Load Balancer-এর সঙ্গে Layer ধারণা
&lt;/h1&gt;

&lt;p&gt;পরবর্তীতে system design বা infrastructure নিয়ে কাজ করলে এমন terminology&lt;br&gt;
শুনবেন:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Layer 4 Load Balancer&lt;/li&gt;
&lt;li&gt;  Layer 7 Load Balancer&lt;/li&gt;
&lt;li&gt;  L4 Proxy&lt;/li&gt;
&lt;li&gt;  L7 Proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;এখানে L4 এবং L7 কী বোঝায় তা জানা থাকলে পুরো conversation অনেক সহজ হয়।&lt;/p&gt;
&lt;h3&gt;
  
  
  L4
&lt;/h3&gt;

&lt;p&gt;Transport-level 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;TCP
UDP
Port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  L7
&lt;/h3&gt;

&lt;p&gt;Application-level 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;HTTP
HTTPS
Host
Path
Headers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;L4 এবং L7 terminology একজন Software/Infrastructure Engineer-এর জন্য&lt;br&gt;
অত্যন্ত গুরুত্বপূর্ণ।&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ৩১. Common Protocols &amp;amp; Examples by Layer
&lt;/h1&gt;

&lt;p&gt;LinkedIn Article-এ table ব্যবহার না করে এই format ব্যবহার করা ভালো।&lt;/p&gt;

&lt;h3&gt;
  
  
  L7 --- Application Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; HTTP, HTTPS, SMTP, FTP&lt;/p&gt;

&lt;p&gt;Used for application-level network communication such as web requests,&lt;br&gt;
email, and file transfer.&lt;/p&gt;


&lt;h3&gt;
  
  
  L6 --- Presentation Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; TLS, Encoding, Compression&lt;/p&gt;

&lt;p&gt;Concerned with how data is represented, encoded, encrypted, or&lt;br&gt;
compressed.&lt;/p&gt;


&lt;h3&gt;
  
  
  L5 --- Session Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; Session management concepts&lt;/p&gt;

&lt;p&gt;Concerned with establishing, maintaining, and terminating communication&lt;br&gt;
sessions.&lt;/p&gt;


&lt;h3&gt;
  
  
  L4 --- Transport Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; TCP, UDP&lt;/p&gt;

&lt;p&gt;Responsible for transport-level communication, including ports and&lt;br&gt;
segmentation.&lt;/p&gt;


&lt;h3&gt;
  
  
  L3 --- Network Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; IP&lt;/p&gt;

&lt;p&gt;Responsible for logical addressing and routing data between networks.&lt;/p&gt;


&lt;h3&gt;
  
  
  L2 --- Data Link Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; Ethernet, Wi-Fi, ARP-related link/network interaction&lt;/p&gt;

&lt;p&gt;Responsible for link-level communication, including MAC addressing and&lt;br&gt;
frames.&lt;/p&gt;


&lt;h3&gt;
  
  
  L1 --- Physical Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt; Copper, Fiber, Wireless physical transmission&lt;/p&gt;

&lt;p&gt;Responsible for transmitting bits as physical signals through a medium.&lt;/p&gt;


&lt;h1&gt;
  
  
  ৩২. OSI Model বনাম বাস্তব Internet
&lt;/h1&gt;

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

&lt;p&gt;বাস্তব Internet সাধারণত OSI Model-এর সাতটি layer-কে textbook-এর মতো আলাদা&lt;br&gt;
সাতটি independent component হিসেবে implement করে না।&lt;/p&gt;

&lt;p&gt;বাস্তবে আমরা বেশি ব্যবহার করি:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TCP/IP Model / Internet Protocol Suite&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OSI Model মূলত একটি &lt;strong&gt;reference model&lt;/strong&gt;।&lt;/p&gt;

&lt;p&gt;অর্থাৎ এটি আমাদের বলে:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Networking-এর responsibilities-গুলোকে এভাবে চিন্তা করো।"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আর TCP/IP architecture বাস্তব Internet protocols-এর সঙ্গে বেশি সরাসরি&lt;br&gt;
সম্পর্কিত।&lt;/p&gt;

&lt;p&gt;এই distinction বুঝে রাখা ভবিষ্যতে খুব কাজে দেবে।&lt;/p&gt;


&lt;h1&gt;
  
  
  ৩৩. OSI Model-এর Layer এবং Protocol নিয়ে একটি সতর্কতা
&lt;/h1&gt;

&lt;p&gt;অনেক educational resource-এ নির্দিষ্ট protocol-কে নির্দিষ্ট OSI layer-এর&lt;br&gt;
সঙ্গে rigidভাবে map করা হয়।&lt;/p&gt;

&lt;p&gt;বাস্তবে protocol stack এতটা rigid নয়।&lt;/p&gt;

&lt;p&gt;বিশেষ করে modern networking-এ কিছু protocol একাধিক layer-এর concern-এর&lt;br&gt;
সঙ্গে সম্পর্কিত হতে পারে।&lt;/p&gt;

&lt;p&gt;তাই protocol mapping-কে &lt;strong&gt;learning model&lt;/strong&gt; হিসেবে ব্যবহার করা ভালো,&lt;br&gt;
absolute rule হিসেবে নয়।&lt;/p&gt;


&lt;h1&gt;
  
  
  ৩৪. সবচেয়ে গুরুত্বপূর্ণ Mental Model
&lt;/h1&gt;

&lt;p&gt;এখন পুরো বিষয়টিকে কয়েকটি প্রশ্নে নামিয়ে আনুন।&lt;/p&gt;
&lt;h3&gt;
  
  
  Application কী?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;আমি কী data পাঠাচ্ছি?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Presentation কী?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Data কীভাবে represent/encode/secure করা হবে?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Session কী?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Communication session কীভাবে manage হবে?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Transport কী?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;কোন application/service এবং কীভাবে data transport হবে?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Network কী?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;কোন host/network-এর দিকে data যাবে?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Data Link কী?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Local link-এ কোন interface-এর দিকে frame যাবে?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Physical কী?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Data কীভাবে actual signal হিসেবে transmit হবে?&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  ৩৫. এক নজরে পুরো OSI Model
&lt;/h1&gt;
&lt;h2&gt;
  
  
  [DIAGRAM 4 --- এখানে যোগ করুন]
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Diagram prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a polished one-page OSI Model cheat-sheet infographic in 16:9&lt;br&gt;
format. Show seven horizontal stacked layers from L7 to L1. L7&lt;br&gt;
Application: HTTP, HTTPS, SMTP; L6 Presentation: representation,&lt;br&gt;
encoding, encryption, compression; L5 Session: session management; L4&lt;br&gt;
Transport: TCP, UDP, ports, Segment; L3 Network: IP, routing, Packet;&lt;br&gt;
L2 Data Link: MAC, Ethernet, Wi-Fi, Frame; L1 Physical: signals,&lt;br&gt;
cables, wireless, Bits. Highlight the PDU for L4/L3/L2/L1. Add the&lt;br&gt;
mnemonic "Please Do Not Tell Secret Password Anyone". Use a&lt;br&gt;
professional software-engineering/networking textbook aesthetic, clean&lt;br&gt;
typography, strong hierarchy, minimal clutter, high readability.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  ৩৬. OSI Model মনে রাখার Final Shortcut
&lt;/h1&gt;

&lt;p&gt;প্রথমে mnemonic:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Please Do Not Tell Secret Password Anyone&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;L7 → Application
L6 → Presentation
L5 → Session
L4 → Transport
L3 → Network
L2 → Data Link
L1 → Physical
&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;L4 → Segment → Port
L3 → Packet  → IP
L2 → Frame   → MAC
L1 → Bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এবং একটি simplified journey:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DATA
 ↓
SEGMENT
 ↓
PACKET
 ↓
FRAME
 ↓
BITS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Receiver side-এ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BITS
 ↓
FRAME
 ↓
PACKET
 ↓
SEGMENT
 ↓
DATA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ৩৭. শেষ কথা: OSI Model মুখস্থ করার বিষয় নয়
&lt;/h1&gt;

&lt;p&gt;OSI Model শেখার সবচেয়ে বড় উদ্দেশ্য সাতটি layer-এর নাম মুখস্থ করা নয়।&lt;/p&gt;

&lt;p&gt;আসল উদ্দেশ্য হলো networking-এর একটি &lt;strong&gt;layered mental model&lt;/strong&gt; তৈরি করা।&lt;/p&gt;

&lt;p&gt;যখন ভবিষ্যতে শুনবেন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"L4 Load Balancer"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আপনার মাথায় Transport Layer আসবে।&lt;/p&gt;

&lt;p&gt;যখন শুনবেন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"L7 Proxy"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আপনি Application Layer-এর কথা ভাববেন।&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;192.168.1.10:3000
&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;IP   → 192.168.1.10
Port → 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যখন শুনবেন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Segment&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;L4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;যখন শুনবেন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Packet&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;L3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;যখন শুনবেন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Frame&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;L2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;যখন শুনবেন:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bits&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;L1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;এটাই OSI Model শেখার আসল লাভ।&lt;/p&gt;

&lt;p&gt;কারণ একজন Software Engineer-এর জন্য networking-এর প্রতিটি বিষয় আলাদা আলাদা&lt;br&gt;
chapter নয়। বরং একটির সঙ্গে আরেকটির connection বুঝতে পারাটাই গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OSI Model সেই connection দেখার একটি framework।&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;আর এই foundation পরিষ্কার হলে পরবর্তী সময়ে &lt;strong&gt;TCP/IP, TCP, UDP, IP Address,&lt;br&gt;
Port, Ethernet, ARP, DNS, HTTP/HTTPS, Proxy, Load Balancer, Docker&lt;br&gt;
Networking এবং Kubernetes Networking&lt;/strong&gt;---এসব বিষয় অনেক বেশি logically&lt;br&gt;
connect করা যায়।&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Revision
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OSI = Open System Interconnection

L7 → Application
L6 → Presentation
L5 → Session
L4 → Transport
L3 → Network
L2 → Data Link
L1 → Physical

Mnemonic:
Please Do Not Tell Secret Password Anyone

Core PDU:
L4 → Segment
L3 → Packet
L2 → Frame
L1 → Bits

Core Addressing Concepts:
L4 → Port
L3 → IP
L2 → MAC

Sender:
Data → Segment → Packet → Frame → Bits

Receiver:
Bits → Frame → Packet → Segment → Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






</description>
      <category>architecture</category>
      <category>devops</category>
      <category>docker</category>
      <category>networking</category>
    </item>
    <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>
  </channel>
</rss>
