๋„์ปค Docker

hznnoyยท2025๋…„ 8์›” 10์ผ

CS

๋ชฉ๋ก ๋ณด๊ธฐ
1/24

๐Ÿ“š ๋„์ปค๋ž€ ?

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง• ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด ์ด๋‹ค.

๋„์ปค๋Š” ํ”ํžˆ ์•„๋Š” ๋ฌผ๊ฑด์„ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋ฌผ๊ฑด ๋Œ€์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ(์‹œ์Šคํ…œ ํˆด, Dependencies) ์„ ํ•˜๋‚˜๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ๋‹ด๋Š”๋‹ค.
์ด์ œ ์šฐ๋ฆฌ๋Š” ์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค๋ฅธ pc, ์„œ๋ฒ„์— ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“˜ ๋„์ปค์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๊ฐ€ ์–ด๋А ํ•œ ๊ณต๊ฐ„์—์„œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ž.
๊ทธ๋Ÿฌ๋˜ ์–ด๋А ๋‚  ์ƒˆ๋กœ์šด ๋™๊ฑฐ์ธ์ด ๋“ค์–ด์™€ ์ž์‹ ๋„ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•  ๊ฑด๋ฐ, ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋˜ ์ž๋ฐ” ๋ฒ„์ „๊ณผ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ์ž๋ฐ”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉฐ ์„ค์น˜๋ฅผ ํ•˜๊ฒ ๋‹ค๊ณ  ํ•œ๋‹ค.
์„ค์น˜ ํ•œ๋‹ค๋ฉด? ๊ธฐ์กด์˜ ์ž๋ฐ”์™€ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜ ๋‘ ์„œ๋น„์Šค ๋ชจ๋‘์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.
์ด ์ง‘์—์„œ ๋‘ ์„œ๋น„์Šค๊ฐ€ ๊ณต์ƒํ•  ๋ฐฉ๋ฒ•์€ ์—†๋Š” ๊ฒƒ์ผ๊นŒ?

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ปค๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค.
ํ•œ ๊ณต๊ฐ„์—์„œ ํ•จ๊ป˜ ๊ตฌ๋™ํ•˜๋Š” ๋Œ€์‹  ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•ด ๊ฐ ํ”„๋กœ์ ํŠธ์—๊ฒŒ ๋…๋ฆฝ๋œ ๊ฐ€์ƒ ์ž‘์—… ๊ณต๊ฐ„์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ. ์ด ๊ฐ€์ƒ ์ž‘์—… ๊ณต๊ฐ„์€ ๋”ฑ ํ•„์š”ํ•œ ๊ณต๊ฐ„๋งŒ ์ฐจ์ง€ํ•˜๊ณ  ์ž์›์ด ๋‚ญ๋น„๋˜์ง€ ์•Š๋„๋ก ํ•จ๊ป˜ ๊ณต์œ ํ•ด์„œ ์“ฐ๊ฒŒ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์ด ๋ฐ”๋กœ ๋„์ปค์—์„œ์˜ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.



๐Ÿ“˜ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ€์ƒ๋จธ์‹ (VM)์˜ ์ฐจ์ด์ 

๋…๋ฆฝ๋œ ๊ฐ€์ƒ ์ž‘์—… ๊ณต๊ฐ„ ? ๊ฐ€์ƒ๋จธ์‹ ๊ณผ๋Š” ๋‹ค๋ฅธ ๊ฑด๊ฐ€์š”?
๋ผ๋Š” ์˜๋ฌธ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๐Ÿ“ ๊ฐ€์ƒ๋จธ์‹ (Virtual Machine, VM)
ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ์ปดํ“จํ„ฐ ์•ˆ์—์„œ ๊ฐ OS๋ฅผ ๊ฐ€๋™ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋“ค์ด ๋ฌผ๋ฆฌ์  ์ž์›์„ ๋ถ„ํ• ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ 

  • ํ•˜์ดํผ๋ฐ”์ด์ €(Hypervisor)
    ๊ฐ€์ƒํ™” ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด
    ๋ฌผ๋ฆฌ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง„ ๋ฆฌ์†Œ์Šค(CPU, ๋ฉ”๋ชจ๋ฆฌ, ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ)๋ฅผ ๊ฐ ๊ฐ€์ƒ๋จธ์‹ ์— ํ• ๋‹น
    ๊ฐ ์„œ๋ฒ„์— ํ•„์š”ํ•œ ์šด์˜์ฒด์ œ(OS)๋ฅผ ์„ค์น˜

์ฆ‰, ๊ฐ€์ƒ๋จธ์‹ ์ด๋ž€ '์ž์ฒด ์ปดํ“จํŒ… ์ž์›๊ณผ OS๋ฅผ ๊ฐ–์ถ˜ ๊ฐ€์ƒ ์ปดํ“จํŒ… ํ™˜๊ฒฝ' ์ด๋‹ค.
( ์ƒ์„ฑ๋œ VM = Guest Server, VM์ด ์ž‘๋™ํ•˜๋Š” ์„œ๋ฒ„ = Host Server )

  • ์žฅ์ 

    • ๋…๋ฆฝ๋œ OS๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ƒˆ GuestOS๋กœ ๋ฆฌ๋ˆ…์Šค OS๋ฅผ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • ๊ฐ ๊ฐ€์ƒ๋จธ์‹ ์€ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ์„œ๋กœ ํ”ผํ•ด x
    • ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ์ž์›์„ ์—ฌ๋Ÿฌ ๊ฐ€์ƒ๋จธ์‹ ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๋ฆฌ์†Œ์Šค ํ™œ์šฉ์˜ ํšจ์œจ์„ฑ ์ฆ๊ฐ€
  • ๋‹จ์ 

    • VM์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์•ˆ์ •์„ฑ ๋‚ฎ์•„์ง€๊ณ  ์‹คํ–‰ ์†๋„ ์ €ํ•˜ ๋ฐœ์ƒ.
    • OS๊ฐ€ ๊ฐ€์ƒ๋จธ์‹ ๋งˆ๋‹ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GB ๋‹จ์œ„์˜ ์šฉ๋Ÿ‰ ๋ถ€๋‹ด๊ณผ ์„ฑ๋Šฅ์˜ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌ.

-> ์ด ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•  ๋ชฉ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํƒ„์ƒ


๐Ÿ“ ์ปจํ…Œ์ด๋„ˆ(Container)
์ด๋ฏธ์ง€์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ƒ์„ฑ๋˜๋Š” ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„์˜ ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ

ํ•œ ํ˜ธ์ŠคํŠธ์˜ OS ์œ„์˜ Container Engine(Docker Engine)์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘๋™์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ์„ ์ƒ์„ฑ
Docker = ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด

  • ์žฅ์ 

    • ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ, ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ
    • OS ์ปค๋„์ด ํ•˜๋‚˜์ด๋ฏ€๋กœ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ๋˜์–ด ํ”„๋กœ์„ธ์Šค์˜ ๊ด€๋ฆฌ, ํ™•์žฅ์— ์šฉ์ดํ•˜๋‹ค.
    • ํฌ๊ธฐ๊ฐ€ MB ๋‹จ์œ„๋กœ ์ž‘๊ณ , ๊ฐ€๋™์‹œ๊ฐ„์ด ์งง๋‹ค
  • ๋‹จ์ 

    • ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ๊ณผ ์ปค๋„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ ์œผ๋กœ ์ทจ์•ฝ

๊ฐ€์ƒ๋จธ์‹  = ๊ฐ์ž ๊ด€๋ฆฌ์‚ฌ๋ฌด์‹ค์„ ๊ฐ€์ง€๋Š” ๋‹จ๋… ์„ธ๋Œ€ ์ฃผํƒ
์ปจํ…Œ์ด๋„ˆ = ํ•œ ๊ด€๋ฆฌ์‚ฌ๋ฌด์‹ค์„ ๊ณต์œ ํ•˜๋Š” ๋‹ค์„ธ๋Œ€์ฃผํƒ
์ฆ‰, ๋‹จ๋… ์„ธ๋Œ€ ์ฃผํƒ์€ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋Œ€์‹  ์™„์ „ํ•œ ๋…๋ฆฝ์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋‹ค์„ธ๋Œ€ ์ฃผํƒ์€ ๋น„์šฉ์ด ์ €๋ ดํ•œ ๋Œ€์‹  ๋…๋ฆฝ์„ฑ์€ ๋น„๊ต์  ๋‚ฎ๋‹ค.




๐Ÿ“˜ ๋„์ปค์˜ ๊ตฌ์„ฑ ์š”์†Œ, ์ปจํ…Œ์ด๋„ˆ

๋„์ปค๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ , ๋ฐฐํฌํ•˜๊ณ , ๊ตฌ๋™ํ•œ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด, ๊ตฌ์„ฑ ์š”์†Œ์ธ ์ปจํ…Œ์ด๋„ˆ๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์งˆ๊นŒ?

๐Ÿ“ ๋„์ปค์˜ 3๋Œ€ ๊ตฌ์„ฑ ์š”์†Œ

  1. Dockerfile = ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค๋ช…์„œ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค
    • ์™ธ๋ถ€ dependencies
    • ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
    • ๊ตฌ๋™ scripts ๋“ฑ์ด ํฌํ•จ๋จ
  2. Image = ํด๋ž˜์Šค
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์„ธํŒ…(Dockerfile)์„ ์Šค๋ƒ…์ƒทํ•œ ๊ฒƒ
    • ๋ถˆ๋ณ€์˜ ์ƒํƒœ
  3. Container = ์ธ์Šคํ„ด์Šค
    - ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
    - ๊ฐœ๋ณ„์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํŒŒ์ผ ์ˆ˜์ • ๊ฐ€๋Šฅ โ†’ ์ด๋ฏธ์ง€์—๋Š” ์˜ํ–ฅ x

๐Ÿ“ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ = ์ด๋ฏธ์ง€ ๊ณต์œ 

  • ๋กœ์ปฌ ๋จธ์‹ ์—์„œ ์ด๋ฏธ์ง€ ๋งŒ๋“ค์–ด Container Registry์— ์ „๋‹ฌ
  • Registry์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ํ•„์š”ํ•œ ์„œ๋ฒ„, pc์—์„œ์—์„œ ์‹คํ–‰

Container Registry

  • public : Docker Hub, GitHub Packages ๋“ฑ
  • private : aws, Google Cloud, Microsoft Azure ๋“ฑ


๐Ÿ“˜ ๋„์ปค์—”์ง„

์œ ์ €๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์ฃผ์ฒด

  • ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ
  • ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ
  • ๋ณผ๋ฅจ(์ €์žฅ์†Œ) ๊ด€๋ฆฌ
  • ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ
    ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ฐธ๊ณ 
https://youtu.be/LXJhA3VWXFA?si=0mBXXq0uS_zNYCZs
https://developisntcool.tistory.com/entry/VM-vs-Container

profile
๋…ธ๋ ฅ์—๋Š” ์ง€๋ฆ„๊ธธ์ด ์—†์œผ๋‹ˆ๊นŒ์š”

0๊ฐœ์˜ ๋Œ“๊ธ€