ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

 λ„컀에 λŒ€ν•΄ μ•Œμ•„λ³΄κΈ° 전에 기쑴의 LXC(Linux Container)와 달리 λ§Žμ€ μ‚¬λžŒλ“€μ΄ 도컀λ₯Ό μ‚¬μš©ν•˜κ²Œ 되고, μ§€κΈˆλ„ μ»¨ν…Œμ΄λ„ˆ 기반의 μ‹œμŠ€ν…œ ꡬ좕에 μ• μš©λ˜λŠ”μ§€ μ•Œμ•„λ³΄κΈ° μœ„ν•΄ 배경지식을 μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

 

Container

 μ»¨ν…Œμ΄λ„ˆλŠ” 운영체제 μˆ˜μ€€μ˜ 가상화(Operating System level virtualization)을 톡해 각 μ»¨ν…Œμ΄λ„ˆ λ³„λ‘œ λ…λ¦½μ μœΌλ‘œ 싀행될 수 μžˆλŠ” ν™˜κ²½μ„ μ œκ³΅ν•œλ‹€. 도컀가 λ“±μž₯ν•˜κΈ° μ „μ—λŠ” LXC(Linux Container)κ°€ 유λͺ…ν•˜μ˜€λ‹€. μ΄ˆκΈ°μ— λ„μ»€λŠ” LXCλ₯Ό λŸ°νƒ€μž„μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 방식을 μ±„νƒν•˜μ˜€λ‹€. μ‹œκ°„μ΄ 지남에 따라, μ—…κ·Έλ ˆμ΄λ“œ ν•˜λ©΄μ„œ LXC 없이도 λ™μž‘ν•  수 μžˆλŠ” 버전을 μ œκ³΅ν•˜μ˜€λ‹€.

 

 VM Ware와 Virtual BoxλŠ” μ»¨ν…Œμ΄λ„ˆμ™€ 달리 Hypervisorλ₯Ό 톡해 Gest OSλ₯Ό μ œκ³΅ν•˜λŠ” ν•œλ‹€. μ΄λŠ” 호슀트 OS와 λ‹€λ₯Έ OSλ₯Ό μ‚¬μš©ν•˜λŠ” ν™˜κ²½μ—μ„œλŠ” μ ν•©ν•˜μ§€λ§Œ, μ΄μ™Έμ—λŠ” μƒλŒ€μ μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ³΄λ‹€ μ˜€λ²„ν—€λ“œκ°€ ν¬λ‹€λŠ” 단점을 가지고 μžˆλ‹€. μƒλŒ€μ μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ - μ’…λ£Œν•˜λŠ” μ˜€λ²„ν—€λ“œκ°€ μƒλ‹Ήνžˆ 적은 μ»¨ν…Œμ΄λ„ˆλŠ” Life time이 짧은 ν”„λ‘œκ·Έλž¨μ΄λ‚˜ ν…ŒμŠ€νŠΈ ν™˜κ²½ ꡬ좕을 μœ„ν•΄ 보닀 μ ν•©ν•˜λ‹€.

 

System Resource Isolation

 λ„컀 μ»¨ν…Œμ΄λ„ˆμ™€ LXCλŠ” μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ»¨ν…Œμ΄λ„ˆ λ³„λ‘œ 독립적은 곡간과 μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήν•˜λŠ”μ§€λ₯Ό μ΄ν•΄ν•˜λŠ” 것은 μ€‘μš”ν•˜λ‹€. ν˜„μž¬ 도컀 μ»¨ν…Œμ΄λ„ˆλŠ” λ¦¬λˆ…μŠ€ μ»€λ„μ˜ 2가지 κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆ 별 λΆ„λ¦¬λœ μž‘μ—… 곡간을 μ œκ³΅ν•˜κ³  μžˆλ‹€.

1. Cgroups

μ»¨ν…Œμ΄λ„ˆ λ³„λ‘œ μžμ›μ„ μ μ ˆν•˜κ²Œ ν• λ‹Ήν•˜κΈ° μœ„ν•΄ Cgroupsλ₯Ό μ΄μš©ν•œλ‹€. μ΄λŠ” Control Cgroups의 μ€„μž„λ§λ‘œ, CPU, Memory, I/O, Network λ“± μ‹œμŠ€ν…œ μžμ›μ„ μ§€μ •ν•œ Cgroup에 ν• λ‹Ή ν•  수 μžˆλ‹€.

2. Namespaces

각 μ»¨ν…Œμ΄λ„ˆμ˜ 독립적인 곡간을 μ œκ³΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” 둜컬 호슀트 뿐만 μ•„λ‹ˆλΌ, 각 μ»¨ν…Œμ΄λ„ˆ λ³„λ‘œ λ³„λ„μ˜ ν™˜κ²½μ„ μ œκ³΅ν•¨μœΌλ‘œμ¨ 좩돌이 λ°œμƒν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

λ¦¬λˆ…μŠ€ μ»€λ„μ—μ„œλŠ” namespacesλ₯Ό 톡해 이λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

  • mnt : λ…λ¦½μ μœΌλ‘œ 파일 μ‹œμŠ€ν…œμ„ ꡬ성할 수 μžˆλ„λ‘ 함
  • pid : 독립적인 ν”„λ‘œμ„ΈμŠ€ λ²ˆν˜Έκ°€ λΆ€μ—¬λ˜λ„λ‘ 함
  • net : 포트, 바인딩을 λ…λ¦½μ μœΌλ‘œ μ‚¬μš©ν•˜λ„λ‘ 함
  • ipc : ν”„λ‘œμ„ΈμŠ€μ˜ 독립적인 ν†΅λ‘œλ₯Ό 뢀여함
  • uts : λ³„λ„μ˜ hostname을 뢀여함
  • uid : λ³„λ„μ˜ μ‚¬μš©μž 관리λ₯Ό κ°€λŠ₯ν•˜λ„λ‘ 함

 

Docker file

λ„μ»€μ˜ μ»¨ν…Œμ΄λ„ˆλŠ” LXC와 달리 각 μ»¨ν…Œμ΄λ„ˆμ˜ 정보λ₯Ό Docker file둜 관리 ν•  수 μžˆλŠ” μž₯점이 μžˆλ‹€. λ˜ν•œ μ»¨ν…Œμ΄λ„ˆμ— μ‹€ν–‰ 파일 뿐 μ•„λ‹ˆλΌ, μ‹€ν–‰ ν™˜κ²½λ„ ν•¨κ»˜ 배포가 κ°€λŠ₯ν•˜λ‹€. μ΄λŠ” 호슀트의 μ‹€ν–‰ ν™˜κ²½μ— λ”°λ₯Έ ν”„λ‘œκ·Έλž¨ λ™μž‘ 여뢀에 λŒ€ν•œ 문제λ₯Ό 쀄여 쀄 수 있으며, λΉ λ₯΄κ²Œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” μž₯점을 λ™λ°˜ν•œλ‹€. 도컀 μ»¨ν…Œμ΄λ„ˆμ˜ 기반이 λ˜λŠ” 이미지λ₯Ό λΉŒλ“œλ₯Ό μœ„ν•΄ Docker file을 μ°Έμ‘°ν•˜μ—¬ 이미지λ₯Ό λΉŒλ“œν•˜λ©°, κ°„λ‹¨ν•œ μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

FROM ubuntu:16.04
COPY hello /usr/local/bin
RUN chmod +x /usr/local/bin/hello
CMD ["hello"]
  • FROM : 도컀 이미지λ₯Ό μ§€μ •ν•œλ‹€.

  • COPY : ν˜„μž¬ 둜컬 ν˜ΈμŠ€νŠΈμ—μ„œ λ³΅μ‚¬ν•˜κ³ μž ν•˜λŠ” νŒŒμΌμ„ λ³΅μ‚¬ν•œλ‹€.

  • RUN : μ»¨ν…Œμ΄λ„ˆμ˜ 내뢀에 ν•„μš”ν•œ λ™μž‘λ“€μ„ μˆ˜ν–‰ ν•  수 μžˆλ‹€.

  • CMD : μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ μ‹œ μ‹€ν–‰ν•  λͺ…령을 지정할 수 μžˆλ‹€.

 

Moby

2017λ…„ 도컀 μ»¨νΌλŸ°μŠ€μ—μ„œ Moby ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λ°œν‘œκ°€ μžˆμ—ˆλ‹€. Moby ν”„λ‘œμ νŠΈκ°€ λ“±μž₯ν•˜λ©΄μ„œ 도컀 CE/EE의 관계λ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν•˜μ˜€λ‹€.

이름 μ—­ν• 
Mobby μ»΄ν¬λ„ŒνŠΈ
Docker CE Moby + μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‘°ν•©ν•œ 무료 버전
Docker EE μƒμš© 버전

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€