Docker

λ“€μ–΄κ°€λ©°

  • 도컀λ₯Ό 쑰금 더 μžμ„Έν•˜κ³  μ •ν™•ν•˜κ²Œ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ 자료λ₯Ό μ •λ¦¬ν•©λ‹ˆλ‹€.
  • μ•„λž˜μ˜ λͺ¨λ“  λ‚΄μš©μ˜ μΆœλ°œμ μ€ λ„μ»€λŠ” μ–΄λ–»κ²Œ OSμœ„μ—μ„œ λ™μž‘ν• κΉŒ?μ—μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€.

λ„μ»€λŠ” OSμœ„μ—μ„œ λ™μž‘ν•˜λŠ”κ±° 같은데.. 가상 λ¨Έμ‹ μΌκΉŒ? ν”„λ‘œμ„ΈμŠ€(μ»¨ν…Œμ΄λ„ˆ)일까?

가상 λ¨Έμ‹ μ΄λž€ λ¬΄μ—‡μΌκΉŒ?

  • 가상 머신은 ν•˜λ“œμ›¨μ–΄(CPU, RAM, Network) μŠ€νŽ™λ“€μ„ μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ΅¬ν˜„ν•©λ‹ˆλ‹€.
  • μ‰½κ²Œ λ§ν•˜μžλ©΄ μ†Œν”„νŠΈμ›¨μ–΄ μœ„μ— 컴퓨터λ₯Ό λ‹€μ‹œ λ§Œλ“œλŠ” 것?
  • ν•˜μ΄νΌλ°”μ΄μ €μ— μ˜ν•΄ κ΅¬λ™λ˜λŠ” VM은 각 VMλ§ˆλ‹€ λ…λ¦½λœ 가상 ν•˜λ“œμ›¨μ–΄ μžμ›(CPU, RAM, Networkλ“±)을 ν• λ‹Ήλ°›μŠ΅λ‹ˆλ‹€.
  • λ…Όλ¦¬μ μœΌλ‘œ λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄μ„œ ν•œ VM에 였λ₯˜κ°€ λ°œμƒν•΄λ„ λ‹€λ₯Έ VM으둜 퍼지지 μ•ŠλŠ”λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆλž€?

  • 운영체제 μˆ˜μ€€μ˜ 가상화 기술둜 λ¦¬λˆ…μŠ€ 컀널을 κ³΅μœ ν•˜λ©΄μ„œ ν”„λ‘œμ„ΈμŠ€λ₯Ό 격리된 ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€.
  • λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆλŠ” 호슀트 λ¨Έμ‹ μ—κ²ŒλŠ” ν”„λ‘œμ„ΈμŠ€λ‘œ μΈμ‹ν•©λ‹ˆλ‹€.
  • μ»¨ν…Œμ΄λ„ˆ κ΄€μ μ—μ„œλŠ” 마치 독립적인 ν™˜κ²½μ„ 가진 가상 λ¨Έμ‹ μ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.
  • μ»¨ν…Œμ΄λ„ˆμ—λŠ” λ‹€μ–‘ν•œ ν”„λ‘œμ„ΈμŠ€ 격리 기술이 μ‚¬μš©λ©λ‹ˆλ‹€.
    • chroot
    • cgroups
      • μžμ›μ— λŒ€ν•œ μ œμ–΄λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•΄μ£ΌλŠ” κΈ°λŠ₯
      • CPU, λ©”λͺ¨λ¦¬, I/O, λ„€νŠΈμ›Œν¬
    • namespaces
      • μ»¨ν…Œμ΄λ„ˆ λ³„λ‘œ μ„œλ‘œκ°€ μΆ©λŒν•˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” κΈ°λŠ₯
      • 독립적인 ν”„λ‘œμ„ΈμŠ€ 곡간을 ν• λ‹Ήν•˜κ±°λ‚˜
      • namespaceκ°„ λ„€νŠΈμ›Œν¬ μΆ©λŒλ°©μ§€ν•˜λŠ” λ“±λ“±μ˜ κΈ°λŠ₯
    • ν”„λ‘œμ„ΈμŠ€ 격리 기술의 ν‘œμ€€μœΌλ‘œ μ •μ˜ν•΄λ‘” OCI(Open Container Initative) μŠ€νŽ™μ„ κ΅¬ν˜„ν•œ μ»¨ν…Œμ΄λ„ˆ 기술의 κ΅¬ν˜„μ²΄
      • LXC, LibContainer, runC

μ»¨ν…Œμ΄λ„ˆμ™€ 가상 머신은 무슨 차이가 μžˆμ„κΉŒ?

VM

  • 컀널이 각각 μ†Œμœ ν•˜κΈ° λ•Œλ¬Έμ— λ³΄μ•ˆμ— 더 κ°•ν•˜λ‹€.
  • 더 λ§Žμ€ μžμ›μ„ μ‚¬μš©ν•˜κ²Œ λœλ‹€.
  • λ¬Έμ œκ°€ μƒκΈ°λŠ” 경우 μš΄μ˜μ²΄μ œλΆ€ν„° λ¦¬λΆ€νŒ…μ„ 진행해야 ν•˜κΈ° λ•Œλ¬Έμ— 볡ꡬ μ‹œκ°„μ΄ 였래 κ±Έλ¦°λ‹€.

Linux Container

  • 컀널을 κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— λ³΄μ•ˆμ— μ·¨μ•½ν• μˆ˜λ„ μžˆλ‹€.
  • 컀널을 κ³΅μœ ν•˜κΈ°μ— 더 적은 μžμ›μ„ μ‚¬μš©ν•˜κ²Œ λœλ‹€.
  • λ¬Έμ œκ°€ μƒκΈ°λŠ” 경우 ν•΄λ‹Ή μ»¨ν…Œμ΄λ„ˆλ§Œ λΉ λ₯΄κ²Œ λ¦¬λΆ€νŒ…μ„ ν•˜μ—¬ 볡ꡬ ν•  수 μžˆλ‹€.

μΆ”κ°€μ μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλŠ” 컀널을 κ³΅μœ ν•œλ‹€λŠ”λ°.. μ»€λ„μ˜΅μ…˜μ€ μ–΄λ–»κ²Œ μ μš©λ˜λŠ”κ²ƒμΈκ°€?

  • μ˜ˆμ „μ—λŠ” μš°νšŒν•˜λŠ” 방법을 μ‚¬μš©ν–ˆμ§€λ§Œ ν˜„μž¬ λ¬Έμ„œλ₯Ό ν™•μΈν•΄λ³΄λ‹ˆ κ³΅μ‹μ μœΌλ‘œ μ§€μ›ν•˜λŠ” κ²ƒμ²˜λŸΌ 보인닀.
    • docker ulimit
    • 컀널 μ˜΅μ…˜μ΄ κ³΅μœ κ°€ λ˜λŠ” 건 μ•„λ‹Œ κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ”λ° μ •ν™•ν•˜κ²ŒλŠ” 더 찾아봐야겠닀..

Reference