[CKA] 2. Docker vs. Containerd

Date
2024/07/20
Category
Devops
Tag
Kubernetes
CKA
Core Concept
๋ชฉ์ฐจ

 Docker vs. Containerd

 CRI

Container Runtime Interface
โ€ข
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ •์˜ํ•˜๋Š” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค
โ€ข
OCI ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š” ํ•œํ•ด์„œ ์–ด๋–ค provider์ด๋“  ๊ฐ„์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์ž‘์—…ํ•˜๊ฒŒ ํ•ด์คŒ

OCI

Open Container Initiative
โ€ข
imagespec
โ—ฆ
์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ธฐ์ค€์„ ์ •์˜
โ€ข
runtimespec

 Docker

โ€ข
Docker๋Š” CRI๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ด์ „์— ๋งŒ๋“ค์–ด์ง
โ€ข
์ฃผ์š” ์ปจํ…Œ์ด๋„ˆ ํˆด๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋„์ปค๋ฅผ ๊ณ„์† ์ง€์›
โ†’ dockershim ๋„์ž…
โ€ข
CRI ๋ฐ–์—์„œ ๋„์ปค๋ฅผ ๊ณ„์† ์ง€์›ํ•˜๊ธฐ ์œ„ํ•จ
โ€ข
๋„์ปค๋Š” Container Runtime๋งŒ ์žˆ์ง€ ์•Š์Œ
โ—ฆ
CLI, API, Build
โ—ฆ
Volume, Auth, Security
โ—ฆ
Container Runtime (called runC)
โ—ฆ
runC๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Daemon (called Containerd)
โ€ข
๋„์ปค ๋Ÿฐํƒ€์ž„๋งŒ ๋”ฐ๋กœ ์ง€์›ํ•˜๋Š” ๋‚ญ๋น„ ๋ฐœ์ƒ โ†’ ๋„์ปค ๋Ÿฐํƒ€์ž„ ์ง€์› ์ค‘๋‹จ
โ—ฆ
๋„์ปค ์ด๋ฏธ์ง€๋Š” OCI์˜ imagespec์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 Containerd

โ€ข
CRI ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋‹ค๋ฅธ ๋Ÿฐํƒ€์ž„์ฒ˜๋Ÿผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ์ง์ ‘์ ์œผ๋กœ ์ž‘์—… ๊ฐ€๋Šฅ
โ€ข
Docker์™€ ๋ณ„๋„๋กœ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ€ข
Docker์˜ ์ผ๋ถ€์ง€๋งŒ ํ˜„์žฌ๋Š” ๋…๋ฆฝ
โ€ข
Docker ์„ค์น˜ ์—†์ด๋„ ์ž์ฒด ์„ค์น˜ ๊ฐ€๋Šฅ

CLI - ctr

๋„์ปค ์„ค์น˜ ์—†์ด Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ
โ€ข
์ปจํ…Œ์ด๋„ˆ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง
โ€ข
์ œํ•œ๋œ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณต
โ€ข
์‚ฌ์šฉ์ž ์นœํ™”์ ์ด์ง€ ์•Š์Œ
ctr images pull docker.io/library/redis:alpine ctr run docker.io/library/redis:alpine redis
Bash
๋ณต์‚ฌ
โ€ข
ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ (์ปจํ…Œ์ด๋„ˆ ๋””๋ฒ„๊น… ์šฉ๋„์ด๊ธฐ ๋•Œ๋ฌธ)

CLI - nerdctl

โ€ข
containerd๋ฅผ ์œ„ํ•œ ๋„์ปค ๊ฐ™์€ CLI ์ œ๊ณต
โ€ข
๋„์ปค๊ฐ€ ์ง€์›ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์˜ต์…˜ ์ œ๊ณต
โ€ข
containerd์— ๊ตฌํ˜„๋œ ์ตœ์‹  ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šค ๊ฐ€๋Šฅ
โ—ฆ
์•”ํ˜ธํ™”๋œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ์ž‘์—…
โ—ฆ
Lazy Pulling
โ—ฆ
P2P image distribution
โ—ฆ
Namespaces in Kubernetes โ€ฆ
nerdctl run --name redis redis:alpine nerdctl run --name webserver -80:80 -d nginx
Bash
๋ณต์‚ฌ

CLI - crictl

CRI์™€ ํ˜ธํ™˜๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์— ์ œ๊ณตํ•˜๋Š” CLI
โ€ข
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€์ ์—์„œ ์ƒํ˜ธ์ž‘์šฉ ํ•จ
โ€ข
์—ฌ๋Ÿฌ ๋Ÿฐํƒ€์ž„์— ๊ฑธ์ณ ์ž‘๋™ํ•จ
โ€ข
๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋จ
โ—ฆ
์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š์Œ
โ€ข
kubelet๊ณผ ์ž˜ ์–ด์šธ๋ฆผ
โ—ฆ
crictl utility๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋ฉด kubelet์ด ์‚ญ์ œํ•จ
โ–ช
kubelet์—์„œ ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ๋‚˜ pod๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—
โ—ฆ
๋”ฐ๋ผ์„œ ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋จ
circtl pull busy box crictl images crictl ps -a crictl exec -i -t 3425435wret45 ls crictl logs 3425435wret45 crictl pods
Bash
๋ณต์‚ฌ

 Summary

Containerd Community
โ€ข
ctr
โ—ฆ
๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ
โ—ฆ
์ œํ•œ๋œ ๊ธฐ๋Šฅ
โ€ข
nerdctl CLI
โ—ฆ
containerd ๋ฅผ ์œ„ํ•œ Docker ๊ฐ™์€ CLI
โ—ฆ
์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ๋ชฉ์ ์œผ๋กœ ๋‘ 
โ—ฆ
Docker CLI์™€ ๊ฐ™๊ฑฐ๋‚˜ ๊ทธ ์ด์ƒ์˜ ๊ธฐ๋Šฅ ์ œ๊ณต
Kubernetes Community
โ€ข
crictl
โ—ฆ
CRI ํ˜ธํ™˜๊ฐ€๋Šฅํ•œ ๋Ÿฐํƒ€์ž„๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
โ—ฆ
์ปจํ…Œ์ด๋„ˆ๋งŒ ํ•ด๋‹นํ•˜๋Š”๊ฒŒ ์•„๋‹Œ CRI ์ง€์› ๋Ÿฐํƒ€์ž„ ์ „์ฒด์— ์‚ฌ์šฉ
โ—ฆ
์ฃผ๋กœ ๋””๋ฒ„๊น… ๋ชฉ์ 