Kubernetes Overview · Part 0404

Docker vs containerdKubernetes-এর সাথে কোনটা use হয়?

CRI, OCI, dockershim, ctr, nerdctl এবং crictl—Docker আর containerd-এর difference, আর Docker images কেন এখনো Kubernetes-এ কাজ করে।

Diagram comparing the old Kubernetes runtime path through dockershim and Docker Engine with the modern path through CRI and containerd
FIG. 04 Docker দিয়ে image build হয়; Kubernetes CRI-এর মাধ্যমে containerd দিয়ে সেটা run করে।

আগের tutorial: Kubernetes Architecture →

এই tutorial-এর মূল question:

পুরোনো Kubernetes tutorials-এ আমরা অনেক সময় দেখি:

Kubernetes + Docker

কিন্তু modern Kubernetes tutorials-এ বেশি দেখি:

Kubernetes + containerd

তাহলে প্রশ্ন:

  • Docker কি Kubernetes থেকে remove হয়ে গেছে?
  • Docker images কি আর Kubernetes-এ চলে না?

Answer:

Change হয়েছে mainly container runtime architecture-এ।

1. শুরুতে Kubernetes Docker use করত

Docker খুব popular হয়েছিল কারণ containers use করা অনেক easy করে দিয়েছিল।

Example commands:

docker run nginx
docker ps
docker logs <container-id>

Docker developer-friendly ছিল।

তাই Kubernetes যখন শুরু হয়, তখন Kubernetes Docker containers orchestrate করত।

Concept:

Kubernetes
    ↓
Docker
    ↓
Containers

অর্থাৎ:

2. Problem: Kubernetes শুধু Docker support করতে চায়নি

পরে আরও container runtimes আসতে শুরু করল।

যেমন:

  • rkt / Rocket
  • containerd
  • CRI-O

তখন problem হলো:

যেমন:

Kubernetes
├── Docker integration
├── containerd integration
├── CRI-O integration
└── rkt integration

এটা maintain করা difficult।

তাই Kubernetes একটা standard interface introduce করল।

নাম:

3. CRI কী?

CRI = Container Runtime Interface

এটা Kubernetes এবং container runtime-এর মধ্যে standard communication interface।

Simple definition:

Concept:

Kubernetes
    ↓
   CRI
    ↓
Container Runtime

Runtime হতে পারে:

  • containerd
  • CRI-O
  • other compatible runtimes

এই কারণে Kubernetes-কে runtime-specific implementation নিয়ে এত concern করতে হয় না।

যদি runtime CRI-compatible হয়, Kubernetes তার সাথে communicate করতে পারে।

4. CRI কেন useful?

ধরো Kubernetes সরাসরি প্রতিটা runtime-এর সাথে different way-তে কথা বলত।

তাহলে architecture:

            Kubernetes
          /     |      \
         ↓      ↓       ↓
     Docker  CRI-O  containerd

এবং প্রতিটা integration আলাদা maintain করতে হতো।

CRI আসার পর:

             Kubernetes
                 ↓
                CRI
          ┌──────┼──────┐
          ↓      ↓      ↓
     containerd CRI-O  Others

অর্থাৎ:

5. OCI কী?

আরেকটা important term: OCI

OCI মানে:

OCI containers-এর জন্য industry standards define করে।

Tutorial-এ দুইটা important OCI specification আছে:

OCI Image Specification

Define করে: container image-এর format কী হবে।

OCI Runtime Specification

Define করে: container runtime কীভাবে container run করবে।

Simple idea:

এই standardization খুব important।

কারণ:

Docker দিয়ে build করা image containerd দিয়েও run করা সম্ভব।

6. OCI কেন এত Important?

ধরো তুমি Docker দিয়ে image বানালে:

docker build -t myapp .

Result:

Docker-built Image

এখন Kubernetes node-এ Docker Engine নেই।

সেখানে আছে:

containerd

তবুও image run করতে পারে।

কারণ:

Docker Image
     ↓
OCI Image Standard
     ↓
containerd understands it

এটাই key point।

7. Docker আসলে কী?

অনেক beginner মনে করে:

কিন্তু Docker শুধু একটা runtime না।

Docker হলো একটা full container platform।

এর মধ্যে অনেক components/features আছে:

  • Docker CLI
  • Docker API
  • Image build tools
  • Networking
  • Volumes
  • Security features
  • containerd
  • runc

Conceptually:

Docker Platform
│
├── Docker CLI
├── Docker API
├── Build Tools
├── Networking
├── Volumes
├── containerd
└── runc

তাই:

8. containerd কী?

containerd হলো lower-level container runtime component।

এটা originally Docker ecosystem-এর অংশ ছিল, পরে independent project হিসেবেও evolve করেছে।

Simple definition:

Concept:

Docker
  ↓
containerd
  ↓
runc
  ↓
Container

Modern Kubernetes containerd-এর সাথে directly CRI-এর মাধ্যমে communicate করতে পারে।

Kubernetes
    ↓
   CRI
    ↓
containerd

তাই Kubernetes node-এ শুধুমাত্র containers run করার জন্য full Docker platform-এর দরকার হয় না।

9. runc কী?

Tutorial-এর Docker architecture-এ runc-ও আছে।

Simplified hierarchy:

Docker
  ↓
containerd
  ↓
runc
  ↓
Linux Container

runc আরও lower-level OCI runtime।

Beginner হিসেবে শুধু mental model:

Docker = high level

containerd = runtime manager

runc = very low-level container execution

10. Docker এবং containerd-এর Relationship

এটা খুব important।

Docker এবং containerd completely unrelated competitors না।

Actually:

Concept:

Docker CLI
    ↓
Docker Engine
    ↓
containerd
    ↓
runc
    ↓
Container

অর্থাৎ containerd হলো Docker platform-এর underlying runtime pieces-এর একটা important অংশ।

11. তাহলে Kubernetes আগে Docker কীভাবে use করত?

এখানে আসে: dockershim

Docker তৈরি হয়েছিল Kubernetes CRI আসার আগে।

তাই Docker Engine directly Kubernetes-এর CRI model-এর সাথে fit করত না।

তখন Kubernetes একটা compatibility layer বানিয়েছিল: dockershim

Simple definition:

Architecture:

Kubernetes
    ↓
dockershim
    ↓
Docker
    ↓
containerd
    ↓
runc

এটা কাজ করত।

কিন্তু architecture-এ extra layer ছিল।

12. dockershim কেন দরকার ছিল?

Kubernetes চাইত:

Kubernetes
    ↓
   CRI
    ↓
Runtime

কিন্তু Docker তখন directly সেই CRI structure follow করত না।

তাই:

Kubernetes
    ↓
dockershim
    ↓
Docker

dockershim translation/compatibility bridge হিসেবে কাজ করত।

13. Kubernetes Docker support remove করল কেন?

Kubernetes version 1.24 থেকে dockershim remove করা হয়।

Meaning:

কিন্তু আবারও:

Docker images এখনো কাজ করে।

Important distinction:

Docker Runtime Integration ❌

Docker Images ✅

14. Architecture আগে কেমন ছিল?

আগে:

Kubernetes
    ↓
dockershim
    ↓
Docker Engine
    ↓
containerd
    ↓
runc
    ↓
Container

অনেক layers।

15. Modern Architecture

এখন:

Kubernetes
    ↓
CRI
    ↓
containerd
    ↓
runc
    ↓
Container

অর্থাৎ unnecessary middle layer remove হয়েছে।

Very simple:

BEFORE

Kubernetes
↓
dockershim
↓
Docker
↓
containerd

NOW

Kubernetes
↓
CRI
↓
containerd

এটাই পুরো tutorial-এর অন্যতম main concept।

16. Docker vs containerd

FeatureDockercontainerd
TypeFull container platformContainer runtime
User-friendly CLIYesLimited / lower-level
Build imagesYesMain focus না
Run containersYesYes
Networking toolsYesRuntime-focused
Volume supportYesLower-level
Developer friendlyVeryComparatively low-level
Kubernetes runtimeDocker Engine directly নাCommonly used
Best forDevelopment/local workflowsKubernetes runtime

Simple summary:

আর:

17. Car Analogy

একটা easy analogy:

Docker

পুরো car:

  • Dashboard
  • Steering
  • Air Conditioning
  • Seats
  • Controls
  • Engine

containerd

গাড়ির: Engine / core running mechanism

অর্থাৎ:

Docker = Full Car

containerd = Engine

এটা exact technical mapping না, কিন্তু concept বোঝার জন্য useful।

18. Docker Image কি Kubernetes-এ এখনো কাজ করে?

Yes.

এটা tutorial-এর সবচেয়ে important point-এর একটা।

তুমি locally Docker use করে image build করতে পারো:

docker build -t myapp .

তারপর registry-তে push করতে পারো।

Example:

Docker
   ↓
Build Image
   ↓
Container Registry
   ↓
Kubernetes
   ↓
containerd
   ↓
Run Image

কারণ image OCI-compatible।

19. Practical Workflow

Developer machine:

Code
 ↓
Dockerfile
 ↓
docker build
 ↓
Image

তারপর:

Image
 ↓
Registry

Kubernetes cluster:

Registry
 ↓
containerd pulls image
 ↓
Pod starts
 ↓
Container runs

So Docker আর Kubernetes runtime হিসেবে directly connected না হলেও:

20. এখন CLI Tools বুঝি

Tutorial-এ তিনটা command-line tool এসেছে:

  • ctr
  • nerdctl
  • crictl

এগুলো easily confuse হওয়া সম্ভব।

তাই একটা একটা করে দেখি।

21. ctr কী?

ctr containerd-এর সাথে আসে।

এটা একটা: Low-level containerd CLI

এটা mainly এগুলোর জন্য use করা হয়:

  • Testing
  • Debugging
  • Low-level containerd interaction

Example:

ctr images pull docker.io/library/redis:latest
ctr run docker.io/library/redis:latest redis

Simple definition:

Normal daily developer workflow-এর জন্য খুব user-friendly না।

22. nerdctl কী?

nerdctl হলো: Docker-like CLI for containerd

Docker জানলে nerdctl commands familiar মনে হবে।

Example:

nerdctl run nginx
nerdctl ps
nerdctl logs <container-id>

দেখো Docker-এর মতোই:

docker run   →   nerdctl run
docker ps    →   nerdctl ps

Simple definition:

23. nerdctl কেন useful?

ধরো তোমার machine-এ Docker Engine নেই।

কিন্তু আছে:

containerd

তুমি Docker-style experience চাও।

তখন nerdctl use করতে পারো।

Concept:

You
 ↓
nerdctl
 ↓
containerd
 ↓
Container

24. crictl কী?

এখন Kubernetes-এর জন্য খুব important একটা debugging tool: crictl

crictl Kubernetes community ecosystem-এর CLI।

এটা CRI-compatible runtimes-এর সাথে communicate করে।

Example runtimes:

  • containerd
  • CRI-O
  • Other CRI-compatible runtimes

Simple definition:

25. crictl Commands

Examples:

crictl ps

Running containers দেখায়।

crictl images

Images দেখায়।

crictl logs <container-id>

Logs দেখায়।

crictl pods

Pods/runtime-level pod sandboxes দেখায়।

crictl exec -it <container-id> sh

Container-এর ভিতরে command run করতে পারে।

26. crictl কখন use করব?

ধরো Kubernetes Pod ঠিকমতো start হচ্ছে না।

kubectl দিয়ে initial investigation করলে useful information পাচ্ছ না।

তখন node-এ গিয়ে runtime-level debugging করতে হতে পারে।

Example:

Kubernetes Pod Problem
        ↓
kubectl inspect
        ↓
Need deeper runtime debugging
        ↓
SSH / access Node
        ↓
crictl

তখন useful হতে পারে:

crictl ps -a
crictl logs <container-id>
crictl images

27. crictl দিয়ে manually production container create করা উচিত?

Mainly: No।

crictl primarily debugging tool।

কারণ Kubernetes workload management-এর responsibility: Kubelet

তুমি manually Kubernetes-এর বাইরে container create করলে:

You
 ↓
crictl/manual runtime action
 ↓
Container

কিন্তু Kubernetes desired state-এ সেই container নেই।

তাই Kubernetes সেই manually-created container-কে normal managed application হিসেবে consider করে না।

Kubernetes environment-এ main principle:

যেমন:

  • Deployment
  • Pod
  • StatefulSet
  • DaemonSet

28. kubectl vs crictl

এটা খুব important difference।

kubectl

kubectl
   ↓
Kubernetes API
   ↓
Kubernetes Objects

Use করো:

  • Pods manage
  • Deployments manage
  • Services manage
  • Nodes inspect
  • Cluster state inspect

crictl

crictl
   ↓
CRI
   ↓
Container Runtime

Use করো: node/runtime-level troubleshooting-এর জন্য।

29. ctr vs nerdctl vs crictl

ToolMain PurposeTalks ToTypical User
ctrLow-level debuggingcontainerdRuntime/admin
nerdctlDocker-like container managementcontainerdDeveloper/admin
crictlKubernetes runtime debuggingCRI runtimeKubernetes admin
kubectlKubernetes managementAPI ServerKubernetes user/admin

30. Easy Memory Trick

এই চারটা line মনে রাখো:

kubectl  → Kubernetes manage
crictl   → Kubernetes runtime debug
nerdctl  → Docker-like containerd CLI
ctr      → Low-level containerd CLI

31. Docker Commands vs crictl Commands

অনেক commands দেখতে similar।

DockercrictlPurpose
docker pscrictl psRunning containers
docker imagescrictl imagesImages
docker logscrictl logsLogs
docker execcrictl execContainer-এর ভিতরে command
docker inspectcrictl inspectContainer details
docker versioncrictl versionVersion

কিন্তু purpose আলাদা।

Docker: General-purpose container workflow

crictl: Kubernetes runtime troubleshooting

32. কোন Situation-এ কোন Tool?

Locally Image Build করতে

Use: Docker

docker build -t myapp .

containerd দিয়ে Docker-like commands চাইলে

Use: nerdctl

containerd low-level debug করতে

Use: ctr

Kubernetes node runtime troubleshoot করতে

Use: crictl

Kubernetes applications manage করতে

Use: kubectl

33. Full Architecture

এখন সবকিছু একসাথে connect করি।

Developer side:

Developer
   ↓
Docker
   ↓
Build Image
   ↓
OCI Image
   ↓
Registry

Kubernetes side:

Kubernetes
   ↓
Kubelet
   ↓
CRI
   ↓
containerd
   ↓
runc
   ↓
Container

এই flowটা খুব important।

34. Kubernetes Runtime Architecture

আরও detailedভাবে:

                 Kubernetes Control Plane
                          │
                          ▼
                       Kubelet
                          │
                          ▼
                         CRI
                          │
                          ▼
                     containerd
                          │
                          ▼
                        runc
                          │
                          ▼
                      Container

এখানে:

Kubernetes
বলছে কী run করতে হবে।
Kubelet
Node-level agent।
CRI
Communication interface।
containerd
Container lifecycle manage করে।
runc
Low-level container execution করে।

35. Docker Architecture vs Kubernetes Architecture

Docker

Developer
   ↓
Docker CLI
   ↓
Docker Engine
   ↓
containerd
   ↓
runc
   ↓
Container

Kubernetes

Kubernetes
   ↓
Kubelet
   ↓
CRI
   ↓
containerd
   ↓
runc
   ↓
Container

দেখো: দুইটার নিচের দিকে common components থাকতে পারে:

containerd
   ↓
runc

এই কারণেই Docker এবং Kubernetes/containerd ecosystem historically closely related।

36. Most Important Difference

এইটা মনে রাখো:

আর:

Docker:

Build
Run
Network
Volumes
CLI
Developer UX

containerd:

Pull images
Manage containers
Run containers
Runtime lifecycle

37. Very Important Misunderstanding

অনেকে বলে:

এটা wrong mental model।

Correct:

Docker Engine as Kubernetes runtime
→ No longer directly used through built-in dockershim

কিন্তু:

Docker-built OCI Image
→ Works ✅

কারণ:

38. Image vs Runtime

এটাও clear রাখো।

Image

Application-এর packaged artifact।

Example:

myapp:1.0

Runtime

Image থেকে container run করে।

Example:

containerd

Flow:

Image
  ↓
Runtime
  ↓
Running Container

তাই Docker image থাকলেও Docker Engine দরকারই হবে এমন না।

39. CRI vs OCI

এই দুটো easily confuse হয়।

CRI: Container Runtime Interface

Question:

Answer: CRI

Concept:

Kubernetes
   ↓
CRI
   ↓
Runtime

OCI: Open Container Initiative

Question:

Answer: OCI

Concept:

OCI
├── Image Specification
└── Runtime Specification

40. CRI vs OCI Easy Memory

মনে রাখো:

Kubernetes
   ↓
CRI
   ↓
containerd

আর:

Docker Image
   ↓
OCI Standard
   ↓
Different compatible runtimes

41. Car Analogy দিয়ে সবকিছু

ধরো:

Docker

পুরো car।

  • Dashboard
  • Steering
  • Seats
  • Controls
  • Engine

containerd

Engine/core runtime।

ctr

Mechanic-এর low-level diagnostic tool।

nerdctl

containerd-এর জন্য Docker-like steering/control interface।

crictl

Kubernetes mechanic-এর runtime diagnostic tool।

kubectl

পুরো Kubernetes system control করার remote/control panel।

42. Tool Mental Model

Docker      = Full container platform
containerd  = Container runtime
ctr         = Low-level containerd debugging
nerdctl     = Docker-like containerd CLI
crictl      = Kubernetes runtime debugging
kubectl     = Kubernetes management

43. সবচেয়ে Important 7 Points

1. Docker একটা full platform

Docker
=
CLI + Build + Network + Volumes + Runtime Components

2. containerd একটা runtime

containerd
↓
Runs/manages containers

3. Kubernetes CRI use করে

Kubernetes
↓
CRI
↓
containerd

4. OCI standardization দেয়

OCI
↓
Image + Runtime Standards

5. dockershim ছিল bridge

Kubernetes
↓
dockershim
↓
Docker

6. dockershim remove হয়েছে

Modern path:

Kubernetes
↓
CRI
↓
containerd

7. Docker images এখনও কাজ করে

Docker Build
↓
OCI Image
↓
containerd
↓
Kubernetes Container

44. Final Architecture Diagram

              DEVELOPMENT
                  │
                  ▼
             Docker CLI
                  │
                  ▼
             Docker Build
                  │
                  ▼
              OCI Image
                  │
                  ▼
          Container Registry
                  │
                  ▼
        ─────────────────────
              KUBERNETES
                  │
                  ▼
               Kubelet
                  │
                  ▼
                 CRI
                  │
                  ▼
             containerd
                  │
                  ▼
                runc
                  │
                  ▼
              Container

45. Final Simplified Explanation

পুরো tutorial-টা simpleভাবে:

আগে Kubernetes Docker use করত:

Kubernetes
↓
Docker

কিন্তু Kubernetes different container runtimes support করতে চেয়েছিল।

তাই তৈরি হলো: CRI — Container Runtime Interface

Docker directly CRI architecture-এর সাথে fit না করায় Kubernetes use করত: dockershim

Architecture ছিল:

Kubernetes
↓
dockershim
↓
Docker
↓
containerd

পরে Kubernetes dockershim remove করে।

Modern architecture:

Kubernetes
↓
CRI
↓
containerd
↓
runc
↓
Container

কিন্তু Docker images এখনো কাজ করে।

কারণ:

তাই তুমি Docker দিয়ে image build করতে পারো:

docker build -t myapp .

এবং Kubernetes সেই image containerd দিয়ে run করতে পারে।

One-Line Summary

সবচেয়ে useful memory flow:

Docker
↓
Build OCI Image
↓
Registry
↓
Kubernetes
↓
Kubelet
↓
CRI
↓
containerd
↓
runc
↓
Container

আর tools:

kubectl  → Kubernetes manage
crictl   → Kubernetes runtime debug
nerdctl  → Docker-like containerd CLI
ctr      → Low-level containerd debug

Was this guide helpful?

Search the archive

Press Esc to close