Hello Kitty Eyes Shut
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»κ³΅λΆ€ 기둝/πŸ“Œ 도컀 & μΏ λ²„λ„€ν‹°μŠ€

[도컀 & μΏ λ²„λ„€ν‹°μŠ€] 도컀 λ™μž‘ 원리

λ°˜μ‘ν˜•

 

 

 

 

πŸ‹ λ„μ»€μ˜ λ™μž‘ 원리 μš”μ•½

였늘 μ•Œμ•„λ³Ό 핡심 λ‚΄μš©λΆ€ν„° 짚고 λ„˜μ–΄κ°€λ³΄μž.

 

도컀 μ»¨ν…Œμ΄λ„ˆλŠ” λ‹¨μˆœνžˆ ν”„λ‘œμ„ΈμŠ€μ˜ 집합이 μ•„λ‹ˆλΌ,

ν”„λ‘œμ„ΈμŠ€λ₯Ό 격리된 μ‹€ν–‰ν™˜κ²½ μ•ˆμ—μ„œ λ™μž‘ν•˜κ²Œ ν•˜λŠ” κΈ°μˆ μ΄λ‹€.

 

μ—¬κΈ°μ„œ 핡심은 컀널을 호슀트 μš΄μ˜μ²΄μ œκ°€ κ³΅μœ ν•œλ‹€λŠ” 점이닀.

μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—λŠ” 주둜 μœ μ €λžœλ“œ(μ‰˜, 라이브러리 λ“±)만 λ“€μ–΄ 있으며,

κ°€μƒλ¨Έμ‹ μ²˜λŸΌ OS 전체λ₯Ό μƒˆλ‘œ μ˜¬λ¦¬λŠ” 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 훨씬 가볍고 λΉ λ₯΄λ‹€.

 

λ‹€λ§Œ, λ„μ»€λŠ” λ¦¬λˆ…μŠ€ 컀널 κΈ°λŠ₯에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ—

Windowsλ‚˜ macOSμ—μ„œλŠ” λ‚΄λΆ€μ μœΌλ‘œ μž‘μ€ λ¦¬λˆ…μŠ€ VM을 ν•˜λ‚˜ μ‹€ν–‰ν•œ λ’€,

κ·Έ μœ„μ—μ„œ μ»¨ν…Œμ΄λ„ˆλ₯Ό λŒλ¦¬λŠ” 방식을 μ‚¬μš©ν•œλ‹€.

 


πŸ—οΈ λ„μ»€μ˜ ꡬ쑰

λ„μ»€μ˜ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜λ €λ©΄, λ¨Όμ € μ„œλ²„μ˜ κΈ°λ³Έ λͺ¨μŠ΅λΆ€ν„° μΆœλ°œν•΄μ•Ό ν•œλ‹€.

 

μš°μ„  ν•˜λ‚˜μ˜ 물리 μ„œλ²„(ν•˜λ“œμ›¨μ–΄)κ°€ 있고, κ·Έ μœ„μ— λ¦¬λˆ…μŠ€ 운영체제(호슀트 OS)κ°€ λ™μž‘ν•œλ‹€.

이 λ‹¨κ³„κΉŒμ§€λŠ” 일반적인 μ„œλ²„μ™€ μ „ν˜€ λ‹€λ₯΄μ§€ μ•Šλ‹€.

 

그런데 일반적인 μ„œλ²„λΌλ©΄, 이 μœ„μ— κ³§λ°”λ‘œ ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜ν•˜κ³  μ‹€ν–‰ν•˜κ²Œ λœλ‹€.

 

ν•˜μ§€λ§Œ, 도컀 ν™˜κ²½μ—μ„œλŠ” μ—¬κΈ°μ„œ ν•œ 단계λ₯Ό 더 κ±°μΉœλ‹€.

호슀트 OS μœ„μ— 도컀 엔진이 μ˜¬λΌκ°€λ©°, μ΄ 도컀 엔진이 μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 역할을 λ‹΄λ‹Ήν•œλ‹€.

 

μš°λ¦¬κ°€ docker run ... λͺ…령을 μ‹€ν–‰ν•˜λ©΄,

λ°”λ‘œ 이 도컀 엔진이 ν”„λ‘œκ·Έλž¨ 싀행에 ν•„μš”ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ€€λΉ„ν•˜κ³  λ„μš°λŠ” 것이닀.

 

 

 

 

쑰금 더 μ‰¬μš΄ λΉ„μœ λ₯Ό μœ„ν•΄ μ£Όλ°© ν•œκ°€μš΄λ°μ— 도컀 μ—”μ§„μ΄λΌλŠ” κ΄€λ¦¬μžκ°€ μ„œ μžˆλ‹€κ³  μƒκ°ν•΄λ³΄μž.

이 κ΄€λ¦¬μžλŠ” μš”λ¦¬μ‚¬(ν”„λ‘œκ·Έλž¨)듀이 ν•œ 주방을 λ’€μ—‰ν‚€μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ„λ‘

칸막이λ₯Ό μ„Έμ›Œμ„œ λ…λ¦½λœ 쑰리곡간(μ»¨ν…Œμ΄λ„ˆ)을 λ§ˆλ ¨ν•΄μ€€λ‹€.

덕뢄에 μ—¬λŸ¬ μš”λ¦¬κ°€ λ™μ‹œμ— μ§„ν–‰λ˜λ”λΌλ„ μ„œλ‘œ κ°„μ„­ν•˜μ§€ μ•Šκ³ ,

κΉ”λ”ν•˜κ²Œ λΆ„λ¦¬λœ μƒνƒœμ—μ„œ 진행될 수 μžˆμ„ 것이닀.

 

μΆ”κ°€λ‘œ, 물리 μ„œλ²„(ν•˜λ“œμ›¨μ–΄)λŠ” 주방이 λ“€μ–΄μžˆλŠ” 건물 자체라고 μƒκ°ν•˜λ©΄ 되고,

μ„œλ²„ 운영체제(λ¦¬λˆ…μŠ€ OS)λŠ” 주방의 κΈ°λ³Έ κ·œμΉ™κ³Ό 섀비라고 μƒκ°ν•˜λ©΄ λœλ‹€.

λŒ€λž΅ μ „κΈ°λ‚˜ μˆ˜λ„, κ°€μŠ€ 같은 인프라λ₯Ό μ œκ³΅ν•˜κ³ , μ£Όλ°©μ—μ„œ μ–΄λ–€ λ°©μ‹μœΌλ‘œ μš”λ¦¬λ₯Ό ν•  수 μžˆλŠ”μ§€ μ •ν•΄μ£ΌλŠ” μ •λ„μ˜ 역할이닀.

 


πŸ“¦ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€

보톡은 도컀 μ»¨ν…Œμ΄λ„ˆλ₯Ό μž‘μ€ λ¦¬λˆ…μŠ€λΌκ³  μƒκ°ν•˜μ§€λ§Œ,

μ‹€μ œλ‘œλŠ” 운영체제 전체(OS)λ₯Ό ν†΅μ§Έλ‘œ λ‹΄λŠ” 것은 μ•„λ‹ˆλ‹€λΌλŠ”κ²Œ 핡심이닀.

 

μ»¨ν…Œμ΄λ„ˆλŠ” 보톡 호슀트 λ¦¬λˆ…μŠ€ 컀널을 κ³΅μœ ν•˜κ³ , κ·Έ μœ„μ—μ„œ λŒμ•„κ°€λŠ” μœ μ €λžœλ“œλ§Œμ„ μ–ΉλŠ”λ‹€.

 

이 ν•œ 쀄을 μ΄ν•΄ν•˜λŠ” 게 쉽지 μ•ŠμœΌλ‹ˆ μ•„λž˜μ—μ„œ λ‹¨κ³„λ³„λ‘œ μ•Œμ•„κ°€λ³΄λ„λ‘ ν•˜μž.

 


🧩 운영체제의 두 κ°€μ§€ μš”μ†Œ

'운영체제 = 컀널 + μœ μ €λžœλ“œ'라고 보면 λœλ‹€.

  • 컀널
    • ν”„λ‘œμ„ΈμŠ€, λ©”λͺ¨λ¦¬, 파일, λ„€νŠΈμ›Œν¬, λ””λ°”μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” 핡심 λ‘λ‡Œμ΄λ‹€.
    • ν•˜λ“œμ›¨μ–΄μ™€ 직접 λŒ€ν™”ν•œλ‹€.
  • μœ μ €λžœλ“œ
    • μš°λ¦¬κ°€ μ“°λŠ” μ‰˜, κΈ°λ³Έ λͺ…λ Ήλ“€, νŒ¨ν‚€μ§€ 관리기, ν‘œμ€€ 라이브러리 λ“± 일반 ν”„λ‘œκ·Έλž¨μ΄ κΈ°λŒ€ν•˜λŠ” 도ꡬ μƒμžμ΄λ‹€.

 


 

πŸ“¦ μ»¨ν…Œμ΄λ„ˆμ˜ ꡬ쑰

도컀 μ»¨ν…Œμ΄λ„ˆμ˜ κ°€μž₯ μ€‘μš”ν•œ νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” 자체 컀널이 μ—†λ‹€λŠ” 점이닀.

즉, μ»¨ν…Œμ΄λ„ˆλŠ” 호슀트(물리 μ„œλ²„μ˜ λ¦¬λˆ…μŠ€ 운영체제) 컀널을 κ·ΈλŒ€λ‘œ κ³΅μœ ν•œλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ μ»¨ν…Œμ΄λ„ˆμ˜ μ•ˆμ€ ν…… λΉ„μ–΄μžˆμ„κΉŒ?

정닡은 βŒμ΄λ‹€.

 

μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—λŠ” 보톡 μœ μ €λžœλ“œλΌκ³  λΆˆλ¦¬λŠ” 뢀뢄이 λ“€μ–΄μžˆλ‹€.

μ‰½κ²Œ λ§ν•΄μ„œ μˆ μ§‘μ— κ°€λ©΄ κΈ°λ³Έ μ•ˆμ£Όλ₯Ό 주듯이, μ»¨ν…Œμ΄λ„ˆμ—λ„ κΈ°λ³Έ 도ꡬ μ„ΈνŠΈκ°€ κΉ”λ € λ‚˜μ˜¨λ‹€κ³  보면 λœλ‹€.

μ—¬κΈ°μ—λŠ” μš°λ¦¬κ°€ μ•Œκ³  μžˆλŠ” μ‰˜(ex. bash, sh), κΈ°λ³Έ μœ ν‹Έλ¦¬ν‹° λͺ…λ Ήμ–΄(ls, cp λ“±), λŸ°νƒ€μž„ 라이브러리(libc 같은 C ν‘œμ€€ 라이브러리)κ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

 

μ΄λŸ¬ν•œ μœ μ €λžœλ“œκ°€ ν•˜λŠ” 역할은

μ»¨ν…Œμ΄λ„ˆ μ†μ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨μ΄ λ‚΄λ¦¬λŠ” λͺ…λ Ή(ex. "νŒŒμΌμ„ 읽어라")을 호슀트 λ¦¬λˆ…μŠ€ 컀널에 μ‹œμŠ€ν…œμ½œ ν˜•νƒœλ‘œ μ „λ‹¬ν•˜λŠ” 것이닀.

 

즉, μ»¨ν…Œμ΄λ„ˆ μ•ˆμ˜ ν”„λ‘œκ·Έλž¨μ€ "λ‚˜λ§Œμ˜ μž‘μ€ λ¦¬λˆ…μŠ€" μœ„μ—μ„œ λ™μž‘ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ,

μ‹€μ œλ‘œλŠ” μœ μ €λžœλ“œλ₯Ό 톡해 호슀트 컀널을 빌렀 μ“°λŠ” ꡬ쑰라고 ν•  수 μžˆλ‹€.

 


πŸƒπŸ»‍♀️ μ»¨ν…Œμ΄λ„ˆκ°€ λΉ λ₯Έ 이유

가상머신(VM)은 운영체제λ₯Ό ν†΅μ§Έλ‘œ μ˜¬λ €μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 수 GB λ‹¨μœ„μ˜ λ””μŠ€ν¬μ™€ λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•˜λ‹€.

 

반면, μ»¨ν…Œμ΄λ„ˆλŠ” 컀널을 κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— 운영체제 전체λ₯Ό 올릴 ν•„μš”κ°€ μ—†κ³ ,

ν•„μš”ν•œ μœ μ €λžœλ“œ 파일만 있으면 λ°”λ‘œ μ‹€ν–‰ν•  수 μžˆλ‹€.

λ”°λΌμ„œ μ»¨ν…Œμ΄λ„ˆλŠ” 수 초 λ§Œμ— μ‹œμž‘ν•  수 있고, μˆ˜μ‹­ MB μ •λ„μ˜ κ°€λ²Όμš΄ μš©λŸ‰μœΌλ‘œλ„ μΆ©λΆ„νžˆ λŒμ•„κ°„λ‹€.

 

즉, μ»¨ν…Œμ΄λ„ˆκ°€ λΉ λ₯Έ μ΄μœ λŠ” 컀널을 κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 


🌐 μ»¨ν…Œμ΄λ„ˆ μ•ˆμ— μœˆλ„μš° ν”„λ‘œκ·Έλž¨μ„ λͺ» λ„£λŠ” 이유

이 이유λ₯Ό μ‚΄νŽ΄λ³΄κΈ° μœ„ν•΄ μ€‘μš”ν•œ 점은 μ»¨ν…Œμ΄λ„ˆλŠ” 호슀트의 컀널을 κ·ΈλŒ€λ‘œ κ³΅μœ ν•œλ‹€λŠ” 사싀이닀.

 

즉, ν˜ΈμŠ€νŠΈκ°€ λ¦¬λˆ…μŠ€λΌλ©΄, μ»¨ν…Œμ΄λ„ˆλ„ λ¦¬λˆ…μŠ€ 컀널을 써야 ν•œλ‹€.

λ”°λΌμ„œ λ¦¬λˆ…μŠ€μ—μ„œλ§Œ λ™μž‘ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ€ 잘 μ‹€ν–‰λ˜μ§€λ§Œ,

μœˆλ„μš° 컀널에 μ˜μ‘΄ν•˜λŠ” ν”„λ‘œκ·Έλž¨(ex. .exe 파일)은 μ‹€ν–‰ν•  수 μ—†λŠ” 것이닀.

 

이처럼 μ»¨ν…Œμ΄λ„ˆλŠ” 호슀트 컀널에 쒅속적이기 λ•Œλ¬Έμ—

μœˆλ„μš° 컀널이 μ—†λŠ” λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œλŠ” μœˆλ„μš° μ „μš© ν”„λ‘œκ·Έλž¨μ„ 돌릴 수 μ—†λŠ” 것이닀.

 


πŸ“š κ²°λ‘ 

μ»¨ν…Œμ΄λ„ˆμ˜ ꡬ쑰λ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ κ°€μž₯ 크게 λŠλ‚€ 점은 μ»¨ν…Œμ΄λ„ˆλŠ” μ™„μ „νžˆ λ…λ¦½λœ 운영체제λ₯Ό κ°€μ§„ 가상머신이 μ•„λ‹ˆλΌ,

호슀트 컀널을 κ³΅μœ ν•˜λ©΄μ„œλ„ μžμ‹ λ§Œμ˜ λ…λ¦½λœ μ‹€ν–‰ ν™˜κ²½μ„ μ œκ³΅ν•œλ‹€λŠ” μ μ΄μ—ˆλ‹€.

 

μ²˜μŒμ—λŠ” λ‹¨μˆœνžˆ "μ»¨ν…Œμ΄λ„ˆ = μž‘μ€ 가상머신"이라고만 μƒκ°ν–ˆλŠ”λ°,

μ‹€μ œλ‘œλŠ” 컀널을 κ³΅μœ ν•˜κ³  ν•„μš”ν•œ μœ μ €λžœλ“œλ§Œ μ–ΉνžŒ μ–‡κ³  효율적인 κ΅¬μ‘°λΌλŠ” 점이 μΈμƒκΉŠμ—ˆλ‹€.

이λ₯Ό ν†΅ν•΄μ„œ μ»¨ν…Œμ΄λ„ˆκ°€ μ™œ λΉ λ₯΄κ³  κ°€λ²Όμš΄μ§€, μ–΄λ–»κ²Œ μ‹œμŠ€ν…œ μžμ›μ„ μ΅œμ†Œν•œμœΌλ‘œ ν™œμš©ν•  수 μžˆλŠ”μ§€λ₯Ό λͺ…ν™•νžˆ 이해할 수 μžˆμ—ˆλ‹€.

 

특히, μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ ν”„λ‘œκ·Έλž¨μ΄ 마치 μžμ‹ λ§Œμ˜ 운영체제 μœ„μ—μ„œ μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ,

μ‹€μ œλ‘œλŠ” μ‹œμŠ€ν…œμ½œμ„ 톡해 호슀트 컀널을 빌렀 μ“°λŠ” κ΅¬μ‘°λΌλŠ” 점은 맀우 ν₯λ―Έλ‘œμ› λ‹€.

 

이 차이λ₯Ό μ΄ν•΄ν•˜κ³  λ‚˜λ‹ˆ, μ•žμœΌλ‘œ λ‹¨μˆœνžˆ "λ„μ»€λŠ” 가볍닀"λŠ” 말이 μ•„λ‹ˆλΌ,

κ·Έ κ°€λ²Όμ›€μ˜ 원리와 기술적 λ°°κ²½κΉŒμ§€ μ„€λͺ…ν•  수 μžˆλŠ” μ‹œκ°μ„ κ°€μ§€κ²Œ 된 것 κ°™λ‹€.

λ°˜μ‘ν˜•