CS

Docker

hyeyeonismm 2025. 4. 29. 13:27

 

Docker๋ž€

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ํ•˜๋‚˜ ๋ฌถ์–ด ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”Œ๋žซํผ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ด๋ฏธ์ง€๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ๊ด€๋ฆฌ, ๋ฐฐํฌ ๋“ฑ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ

์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธ OS์˜ ์ปค๋„์„ ๊ณต์œ ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„๋กœ ๊ฒฉ๋ฆฌํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ์ž‘์œผ๋ฉฐ, ๋ฐฐํฌ ๋‹จ์œ„๊ฐ€ ๊ฐ€๋ณ๋‹ค.

์ดˆ๊ธฐ Docker๋Š” LXC ๊ธฐ๋ฐ˜์ด์—ˆ์ง€๋งŒ, ๋„์ปค๊ฐ€ ์ ์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„ ์ปจํ…Œ์ด๋„ˆ์— ํŠนํ™”๋˜๋ฉด์„œ ์ž์ฒด ๋Ÿฐํƒ€์ž„์ธ libcontainer์„ ๊ฐœ๋ฐœํ•˜์˜€๋‹ค. libcontainer๋Š” Docker ๋‚ด๋ถ€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, Linux์˜ namespace์™€ cgroups๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

 

Docker ๊ตฌ์„ฑ์š”์†Œ

  • ์ด๋ฏธ์ง€: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„
  • ์ปจํ…Œ์ด๋„ˆ: ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์‹ค์ œ ์ธ์Šคํ„ด์Šค
  • ๋„์ปคํŒŒ์ผ: ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ, ํ™˜๊ฒฝ์„ค์ •์„ ์ •์˜ํ•œ ํŒŒ์ผ
  • ๋„์ปคํ—ˆ๋ธŒ: ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ

 

Docker ์•„ํ‚คํ…์ฒ˜

Docker๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๋„์ปค ํด๋ผ์ด์–ธํŠธ์— docker ps์™€ ๊ฐ™์€ ๋ช…๋ น์–ด ์ž…๋ ฅ → ๋„์ปค ๋ฐ๋ชฌ์—๊ฒŒ API ์š”์ฒญ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ → ๋„์ปค ๋ฐ๋ชฌ์ด ํ•ด๋‹น ์ž‘์—… ์‹คํ–‰๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

์ถœ์ฒ˜: dockerdocs

1. Docker Client

์‚ฌ์šฉ์ž๊ฐ€ ํ„ฐ๋ฏธ๋„์— docker build, docker run๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์„ ์ž…๋ ฅํ•˜๋Š” ํ†ต๋กœ. ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ Docker Daemon์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•จ

 

2. Docker Host

์‹ค์ œ๋กœ ๋„์ปค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์„œ๋ฒ„๋กœ, Docker Daemon(dockerd)์ด Docker API ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ๊ณผ ๊ฐ™์€ ๋„์ปค ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๋„์ปค ์—”์ง„์œผ๋กœ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, containerd์™€ ํ†ต์‹ ํ•˜๋Š” ์—ญํ• ๋„ ํ•œ๋‹ค.

 

๐Ÿ’ก Container Runtime
์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด๋ž€ OS ์ปค๋„๊ณผ ์ง์ ‘์ ์œผ๋กœ ํ†ต์‹ ํ•˜๋ฉฐ ์‹ค์ œ๋กœ ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ , ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹ค์ œ OS ์œ„์—์„œ ์‹คํ–‰์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. 
dockerd๊ฐ€ ์ง์ ‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๊ณ ์ˆ˜์ค€ ๋Ÿฐํƒ€์ž„์ธ containerd์™€ ์ €์ˆ˜์ค€ ๋Ÿฐํƒ€์ž„์ธ runc๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ.. ๋„์ปค๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”Œ๋žซํผ์ด๊ณ  Container Runtime์€ ์‹ค์ œ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๋„์ปค์™€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์€ ๋ณ„๊ฐœ์ด๋ฉฐ, ๋„์ปค ์—”์ง„์ด ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด๋ผ๋Š” ๊ธฐ์ˆ ์„ ๋„์ปค์—”์ง„ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋„์ปค๊ฐ€ ์—†์–ด๋„ ์ปจํ…Œ์ด๋„ˆ๋Š” ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค (Kubernetes๋Š” dockerd ์—†์ด containerd๋งŒ์„ ์‚ฌ์šฉํ•จ)


๊ณ ์ˆ˜์ค€ ๋Ÿฐํƒ€์ž„: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ๊ด€๋ฆฌ
์ €์ˆ˜์ค€ ๋Ÿฐํƒ€์ž„: ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ, ๋ฆฌ์†Œ์Šค ์ œํ•œ

 

๋„์ปค์˜ ๋™์ž‘์€ Client → dockerd → containerd → runc → Linux Kernel์˜ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

3. Docker Registry

๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ

 

'CS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ปจํ…Œ์ด๋„ˆ (Container)  (0) 2025.04.28
๊ฐ€์ƒํ™” (Virtualization)  (0) 2025.04.28
[OS] ํ”„๋กœ์„ธ์Šค  (0) 2025.02.17