
Docker শেখার আগে Linux Basics কেন জানা জরুরি?
Docker শেখার আগে Linux Basics কেন জানা জরুরি?
Docker নিয়ে কাজ শুরু করলে খুব দ্রুত একটি বিষয় পরিষ্কার হয়ে যায়—Docker শুধু একটি containerization tool নয়; এর foundation অনেকটাই Linux-এর উপর দাঁড়িয়ে আছে।
বিশেষ করে DevOps, Cloud, SRE বা Platform Engineering-এর দিকে যেতে চাইলে Docker শেখার পাশাপাশি Linux-এর fundamental concepts বোঝা অত্যন্ত গুরুত্বপূর্ণ।
আপনি যদি Windows বা macOS ব্যবহার করেন, Docker Desktop-এর মাধ্যমে Docker চালালেও এর পেছনে Linux-based environment ব্যবহৃত হয়। কারণ Docker Engine মূলত Linux kernel-এর বিভিন্ন feature—যেমন namespaces, cgroups, capabilities এবং filesystem isolation—ব্যবহার করে container তৈরি ও পরিচালনা করে।
তাই Docker ভালোভাবে বুঝতে হলে আগে Linux-এর foundation পরিষ্কার করা অনেক বেশি কার্যকর।
🐧 Linux কি আসলেই একটি Operating System?
আমরা সাধারণভাবে বলি, “Linux is an Operating System.”
কিন্তু technically এটি পুরোপুরি সঠিক নয়।
Linux মূলত একটি Kernel।
১৯৯১ সালে Linus Torvalds Linux kernel-এর development শুরু করেন। Kernel হচ্ছে Operating System-এর সেই core component, যা hardware এবং software-এর মধ্যে communication ও resource management-এর কাজ করে।
Kernel নিজে একটি complete user-facing operating system নয়।
তাহলে আমরা Ubuntu, Fedora, Arch Linux বা Kali Linux-কে কীভাবে Linux Operating System বলি?
এখানেই আসে Linux Distribution (Distro)।
🧩 Linux Distribution কী?
একটি usable operating system তৈরি করতে Linux kernel-এর পাশাপাশি আরও অনেক software component প্রয়োজন।
একটি সাধারণ Linux distribution-এ থাকতে পারে:
1. Linux Kernel
সিস্টেমের core।
Kernel CPU, memory, processes, networking, storage এবং hardware resources পরিচালনা করে।
2. GNU Utilities
Shell এবং বিভিন্ন fundamental command-line tools প্রদান করে।
যেমন:
ls
cp
mv
rm
cat
grep
find
3. Package Manager
Software install, update এবং remove করার জন্য ব্যবহৃত হয়।
উদাহরণ:
- Debian/Ubuntu →
apt - Fedora/RHEL →
dnf - Alpine →
apk - Arch Linux →
pacman
4. Init System
System boot হওয়ার পর services এবং processes manage করে।
আধুনিক Linux distribution-গুলোর অনেকগুলোতেই systemd ব্যবহৃত হয়।
5. Desktop Environment
যদি graphical desktop প্রয়োজন হয়, তাহলে GNOME, KDE Plasma, XFCE-এর মতো Desktop Environment ব্যবহার করা যায়।
তবে গুরুত্বপূর্ণ বিষয় হলো—Linux server চালানোর জন্য Desktop Environment প্রয়োজনীয় নয়।
6. Configuration & Other Tools
System configuration, networking, logging, security এবং অন্যান্য প্রয়োজনীয় functionality-এর জন্য বিভিন্ন tools ও configuration files থাকে।
এই components একসাথে একটি ব্যবহারযোগ্য Linux distribution তৈরি করে।
🏗️ Linux Distribution-এর Architecture
সহজভাবে চিন্তা করলে:
Applications
↓
Shell / GNU Utilities
↓
System Libraries & Services
↓
Linux Kernel
↓
Hardware
আর একটি Linux distribution হলো এই foundation-এর উপর বিভিন্ন software, package management system, configuration এবং user-space components-এর সমন্বয়।
এই distinction-টি Docker শেখার সময় খুব গুরুত্বপূর্ণ হয়ে যায়।
কারণ Docker container-এর ভিতরে সাধারণত পুরো একটি Operating System kernel থাকে না।
Container মূলত host machine-এর Linux kernel share করে, আর image-এর মধ্যে প্রয়োজনীয় user-space filesystem, libraries এবং applications থাকে।
এটি বুঝতে পারলে container বনাম virtual machine-এর পার্থক্য অনেক পরিষ্কার হয়ে যায়।
🌍 এত Linux Distribution কেন?
Linux ecosystem-এর অন্যতম interesting বিষয় হলো এর বিশাল distribution ecosystem।
সব distribution একইভাবে তৈরি হয়নি। অনেক distribution অন্য distribution-এর উপর ভিত্তি করে তৈরি হয়েছে।
এখানে base system এবং derived system ধারণাটি গুরুত্বপূর্ণ।
Base Distribution
যেসব distribution নিজেদের package ecosystem, tooling এবং system architecture তৈরি করেছে, সেগুলোকে সাধারণভাবে base/foundation distribution হিসেবে দেখা যায়।
উদাহরণ:
- Debian
- Red Hat Enterprise Linux
- Arch Linux
- Alpine Linux
Derived Distribution
একটি existing distribution-এর package ecosystem বা foundation-এর উপর ভিত্তি করে নতুন distribution তৈরি হলে সেটিকে derived distribution হিসেবে দেখা যায়।
উদাহরণস্বরূপ:
Debian
↓
Ubuntu
↓
Linux Mint / Pop!_OS / Zorin OS
অন্যদিকে:
Arch Linux
↓
Manjaro / EndeavourOS
এখানে প্রতিটি distribution-এর নিজস্ব design philosophy, package ecosystem এবং configuration approach থাকতে পারে।
📦 Package Manager কেন Docker-এর জন্য গুরুত্বপূর্ণ?
Docker শেখার সময় আপনি বারবার দেখতে পাবেন:
RUN apt update
RUN apt install nginx
অথবা Alpine-based image হলে:
RUN apk add nginx
এখানেই Linux distribution সম্পর্কে ধারণা কাজে লাগে।
একই application install করার command distribution অনুযায়ী পরিবর্তিত হতে পারে।
| Distribution | Package Manager |
|---|---|
| Debian / Ubuntu | apt |
| Fedora | dnf |
| RHEL-based | dnf / rpm |
| Alpine | apk |
| Arch Linux | pacman |
তাই Dockerfile লিখতে গেলে শুধু Docker syntax জানলেই হবে না।
আপনাকে জানতে হবে কোন base image ব্যবহার করছেন এবং সেই image কোন Linux distribution-এর উপর তৈরি।
যেমন:
FROM ubuntu:24.04
এবং:
FROM alpine:3.20
দুটিই Linux-based image হলেও তাদের package manager, filesystem layout, available utilities এবং default environment এক নয়।
🐳 Docker এবং Linux-এর Connection কোথায়?
এটাই সবচেয়ে গুরুত্বপূর্ণ অংশ।
Docker-এর containerization model Linux kernel-এর বিভিন্ন feature-এর উপর heavily নির্ভর করে।
বিশেষ করে:
Namespaces
একটি container-এর process, network, mount এবং অন্যান্য resources-কে isolated environment-এর মতো দেখাতে সাহায্য করে।
Control Groups (cgroups)
Container কত CPU, memory বা অন্যান্য resources ব্যবহার করতে পারবে তা control করতে সাহায্য করে।
Linux Capabilities
Container-এর process-কে সম্পূর্ণ root privilege না দিয়ে নির্দিষ্ট privileges দেওয়ার mechanism প্রদান করে।
Union / Layered Filesystems
Docker image-এর layers efficiently store এবং reuse করতে সাহায্য করে।
এই কারণেই Docker এবং Linux-এর relationship শুধু “Docker Linux-এ চলে” এতটুকু নয়।
Docker-এর containerization architecture-এর গুরুত্বপূর্ণ অংশ Linux kernel functionality-এর উপর ভিত্তি করে তৈরি।
💡 Docker Image আসলে কী?
Docker শেখার সময় আরেকটি common misconception হলো:
“একটি Docker image মানেই একটি ছোট Operating System।”
বাস্তবে বিষয়টি একটু ভিন্ন।
একটি image-এর মধ্যে সাধারণত থাকে:
- Application
- Dependencies
- Libraries
- Configuration
- User-space filesystem
কিন্তু নিজস্ব Linux kernel থাকে না।
Container চালু হলে সেটি host-এর kernel ব্যবহার করে।
সহজভাবে:
Docker Containers
┌────────┬────────┬────────┐
│ App A │ App B │ App C │
│ Libs │ Libs │ Libs │
└────────┴────────┴────────┘
↓
Docker Engine
↓
Linux Kernel
↓
Hardware
এই architecture বুঝতে পারলে Docker container-এর lightweight nature অনেক বেশি পরিষ্কার হয়।
🧠 Docker শেখার আগে কোন Linux Topics জানা উচিত?
Docker শেখার জন্য Linux expert হওয়া প্রয়োজন নেই।
তবে নিচের concepts-গুলো ভালোভাবে জানা থাকলে Docker শেখা অনেক সহজ হবে:
Linux Fundamentals
- Filesystem hierarchy
- Absolute vs relative path
- File permissions
- Users & groups
sudo- Processes
- Signals
- Environment variables
- Shell basics
- SSH
Command Line
বিশেষভাবে:
ls
cd
pwd
cp
mv
rm
mkdir
cat
less
grep
find
chmod
chown
ps
top
kill
curl
wget
tar
System Concepts
এরপর ধীরে ধীরে শিখুন:
- Process management
- Networking basics
- Ports
- DNS
- Filesystems
- Mounts
- Services
- systemd
- Logs
- Resource management
Advanced Linux → Docker Connection
Docker-এর internals বুঝতে গেলে পরে এগুলো শেখা অত্যন্ত useful:
- Linux namespaces
- cgroups
- capabilities
- overlay filesystem
- seccomp
- Linux networking
- virtual interfaces
- iptables / nftables
এগুলো একদিনে শেখার প্রয়োজন নেই। Docker-এর সাথে কাজ করতে করতে এগুলো gradually শেখাই সবচেয়ে practical approach।
🚀 Linux → Docker → DevOps
আমার কাছে DevOps শেখার একটি logical progression হলো:
Linux Fundamentals
↓
Linux Networking & Processes
↓
Docker
↓
Docker Compose
↓
CI/CD
↓
Kubernetes
↓
Cloud
↓
DevOps / SRE / Platform Engineering
এখানে Linux হলো foundation।
Docker সেই foundation-এর উপর containerization শেখায়।
তারপর Kubernetes শেখার সময় container networking, processes, storage, resource limits এবং Linux concepts আরও গভীরভাবে সামনে আসে।
🎯 Final Thoughts
Docker শেখার সময় শুধু docker run, docker build বা Dockerfile syntax মুখস্থ করার চেষ্টা করলে আপনি Docker ব্যবহার করতে পারবেন, কিন্তু Docker-এর ভিতরের mechanics বুঝতে পারবেন না।
অন্যদিকে Linux-এর foundation পরিষ্কার থাকলে অনেক প্রশ্নের উত্তর নিজে থেকেই পরিষ্কার হতে শুরু করবে:
Container কীভাবে process isolate করে? Container কেন lightweight? Docker image-এর layer কী? Container কেন host kernel ব্যবহার করে? কেন Alpine এবং Ubuntu image-এর command আলাদা? কেন container networking Linux networking-এর সাথে এত closely related?
এই প্রশ্নগুলোর উত্তর বুঝতে Linux knowledge সরাসরি কাজে লাগে।
তাই Docker শেখার আগে Linux-কে আলাদা একটি বাধা হিসেবে না দেখে Docker-এর foundation হিসেবে দেখুন।
Learn Linux → Understand Docker → Build Better Containers → Become Better at DevOps.
🐧 Linux is not just another skill in the DevOps journey—it is one of the foundations.