DevOps/Docker

[Docker] λ„μ»€λž€ 무엇인가?

gyuI 2022. 2. 21. 22:18

🐳 Dockerλž€?

μ»¨ν…Œμ΄λ„ˆ 기반의 μ˜€ν”ˆμ†ŒμŠ€ 가상화 ν”Œλž«νΌμœΌλ‘œ, λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž¨κ³Ό μ‹€ν–‰ν™˜κ²½μ„ μ»¨ν…Œμ΄λ„ˆλ‘œ μΆ”μƒν™”ν•˜κ³  λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ 배포 및 관리λ₯Ό λ‹¨μˆœν•˜κ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” ν”Œλž«νΌμ΄λ‹€.

λ°±μ—”λ“œ, λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„, λ©”μ‹œμ§€ 큐 λ“± μ–΄λ–€ ν”„λ‘œκ·Έλž¨λ„ μ»¨ν…Œμ΄λ„ˆλ‘œ 좔상화 ν•  수 있고 μ–΄λ””μ—μ„œλ“  μ‹€ν–‰ κ°€λŠ₯ν•˜λ‹€.

OSλ₯Ό ν¬ν•¨ν•œ μ„€μΉ˜ 과정은 Dockerfile둜 λ¬Έμ„œν™”λ˜κ³  μˆ˜μ • 이λ ₯은 버전 관리가 λ˜μ–΄ 변경사항을 μ‰½κ²Œ 확인 κ°€λŠ₯ν•˜λ‹€.

 

πŸ’‘ κ°€μƒλ¨Έμ‹ κ³Ό 도컀 μ»¨ν…Œμ΄λ„ˆ

기쑴의 가상화 κΈ°μˆ μ€ ν•˜μ΄νΌλ°”μ΄μ €λ₯Ό μ΄μš©ν•΄ μ—¬λŸ¬ 개의 운영체제λ₯Ό ν•˜λ‚˜μ˜ ν˜ΈμŠ€νŠΈμ—μ„œ 생성해 μ‚¬μš©ν•˜λŠ” λ°©μ‹μ΄μ—ˆλ‹€.

μ΄λŸ¬ν•œ μ—¬λŸ¬ 개의 μš΄μ˜μ²΄μ œλŠ” 가상 λ¨Έμ‹ μ΄λΌλŠ” λ‹¨μœ„λ‘œ κ΅¬λ³„λ˜κ³ , 각 κ°€μƒλ¨Έμ‹ μ—λŠ” μš°λΆ„νˆ¬, CentOS λ“±μ˜ μš΄μ˜μ²΄μ œκ°€ μ„€μΉ˜λ˜μ–΄ μ‚¬μš©λœλ‹€.

ν•˜μ΄νΌλ°”μ΄μ €μ— μƒμ„±λ˜κ³  κ΄€λ¦¬λ˜λŠ” μš΄μ˜μ²΄μ œλŠ” Guest OS라고 ν•˜λ©°, 각 게슀트 μš΄μ˜μ²΄μ œλŠ” λ‹€λ₯Έ 게슀트 μš΄μ˜μ²΄μ œμ™€λŠ” μ™„μ „νžˆ λ…λ¦½λœ 곡간과 μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‚¬μš©ν•œλ‹€. 이런 λ°©μ‹μ˜ 가상화 νˆ΄μ€ VirtualBox, VMware등이 μžˆλ‹€.

가상 λ¨Έμ‹ κ³Ό 도컀 μ»¨ν…Œμ΄λ„ˆμ˜ ꡬ쑰

ν•˜μ§€λ§Œ 각쒅 μ‹œμŠ€ν…œ μžμ›μ„ κ°€μƒν™”ν•˜κ³  λ…λ¦½λœ 곡간을 μƒμ„±ν•˜λŠ” μž‘μ—…μ€ ν•˜μ΄νΌλ°”μ΄μ €λ₯Ό 거쳐야 ν•˜κΈ° λ•Œλ¬Έμ— 일반 ν˜ΈμŠ€νŠΈμ— λΉ„ν•΄ μ„±λŠ₯의 손싀이 λ°œμƒν•œλ‹€. λ˜ν•œ 가상 머신은 게슀트 운영체제λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ 라이브러리, 컀널 등을 μ „λΆ€ ν¬ν•¨ν•˜κΈ° λ•Œλ¬Έμ— μ΄λ―Έμ§€μ˜ 크기 λ˜ν•œ 컀진닀. 즉, 가상 머신은 μ™„λ²½ν•œ 운영체제λ₯Ό 생성할 수 μžˆλ‹€λŠ” μž₯점은 μžˆμ§€λ§Œ 일반 ν˜ΈμŠ€νŠΈμ— λΉ„ν•΄ μ„±λŠ₯ 손싀이 있으며, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ λ°°ν¬ν•˜κΈ°λŠ” λΆ€λ‹΄μŠ€λŸ½λ‹€λŠ” 단점이 μžˆλ‹€.

이에 λΉ„ν•΄ 도컀 μ»¨ν…Œμ΄λ„ˆλŠ” λ¦¬λˆ…μŠ€μ˜ 자체 κΈ°λŠ₯인 chroot, λ„€μž„μŠ€νŽ˜μ΄μŠ€, cgroup을 μ‚¬μš©ν•¨μœΌλ‘œμ¨ ν”„λ‘œμ„ΈμŠ€ λ‹¨μœ„μ˜ 격리 ν™˜κ²½μ„ λ§Œλ“€κΈ° λ•Œλ¬Έμ— μ„±λŠ₯ 손싀이 거의 μ—†λ‹€. λ”°λΌμ„œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ΄λ―Έμ§€λ‘œ λ§Œλ“€μ–΄ λ°°ν¬ν•˜λŠ” μ‹œκ°„μ΄ 가상 머신에 λΉ„ν•΄ λΉ λ₯΄λ©°, κ°€μƒν™”λœ 곡간을 μ‚¬μš©ν•  λ•Œμ˜ μ„±λŠ₯ 손싀도 거의 μ—†λ‹€λŠ” μž₯점이 μžˆλ‹€.

 

πŸ’‘ 도컀λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 개발과 배포가 νŽΈν•΄μ§„λ‹€.

 

μ„œλ²„λ₯Ό λΆ€νŒ…ν•  λ•Œ μ‹€ν–‰λ˜λŠ” 운영체제λ₯Ό 일반적으둜 호슀트 OS라고 λΆ€λ₯΄λ©°, 도컀 μ»¨ν…Œμ΄λ„ˆλŠ” 호슀트 OS μœ„μ—μ„œ μ‹€ν–‰λ˜λŠ” 격리된 곡간이닀. λ”°λΌμ„œ μ»¨ν…Œμ΄λ„ˆ μžμ²΄μ— νŠΉλ³„ν•œ κΆŒν•œμ„ μ£Όμ§€ μ•ŠλŠ” ν•œ, μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ μˆ˜λ§Žμ€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ„€μΉ˜ν•˜κ³  μ„€μ • νŒŒμΌμ„ μˆ˜μ •ν•΄λ„ 호슀트 OSμ—λŠ” 영ν–₯을 λΌμΉ˜μ§€ μ•ŠμœΌλ―€λ‘œ λ…λ¦½λœ 개발 ν™˜κ²½μ„ 보μž₯ 받을 수 μžˆλ‹€.

κ²Œλ‹€κ°€ 도컀 μ΄λ―Έμ§€λŠ” 컀널을 ν¬ν•¨ν•˜κ³  μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 이미지 크기가 μž‘κ³ , 이미지 λ‚΄μš©μ„ λ ˆμ΄μ–΄ λ‹¨μœ„λ‘œ κ΅¬μ„±ν•˜λ©° μ€‘λ³΅λ˜λŠ” λ ˆμ΄μ–΄λ₯Ό μž¬μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 배포 속도가 맀우 빨라진닀.

 

2. μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 독립성과 ν™•μž₯성이 λ†’μ•„μ§„λ‹€.

 

μ†Œν”„νŠΈμ›¨μ–΄μ˜ μ—¬λŸ¬ λͺ¨λ“ˆμ΄ μƒν˜Έ μž‘μš©ν•˜λŠ” λ‘œμ§μ„ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ κ΅¬λ™μ‹œν‚€λŠ” 방식을 λͺ¨λ†€λ¦¬μŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λΌ ν•œλ‹€.

μ†Œκ·œλͺ¨ μ„œλΉ„μŠ€μ—μ„œλŠ” 이 방식이 μ–΄μšΈλ¦΄μ§€λ„ λͺ¨λ₯΄μ§€λ§Œ, κΈ°λŠ₯이 λ³΅μž‘ν•˜κ³  κ±°λŒ€ν•΄μ§ˆμˆ˜λ‘ ν™•μž₯μ„±κ³Ό μœ μ—°μ„±μ΄ μ€„μ–΄λ“ λ‹€λŠ” 단점이 μžˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λ†€λ¦¬μŠ€ λ°©μ‹μœΌλ‘œ λŒ€μ²΄ν•˜κΈ° μœ„ν•΄ 졜근 μƒˆλ‘­κ²Œ λ– μ˜€λ₯Έ κ°œλ…μ΄ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ꡬ쑰이닀.

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ΅¬μ‘°λŠ” μ—¬λŸ¬ λͺ¨λ“ˆμ„ λ…λ¦½λœ ν˜•νƒœλ‘œ κ΅¬μ„±ν•˜κΈ° λ•Œλ¬Έμ— 언어에 μ’…μ†λ˜μ§€ μ•Šκ³  변화에 λΉ λ₯΄κ²Œ λŒ€μ‘ν•  수 있으며, 각 λͺ¨λ“ˆμ˜ 관리가 μ‰¬μ›Œμ§„λ‹€λŠ” μž₯점이 μžˆλ‹€. μ»¨ν…Œμ΄λ„ˆλŠ” μ—¬λŸ¬ λͺ¨λ“ˆμ—κ²Œ λ…λ¦½λœ ν™˜κ²½μ„ λ™μ‹œμ— μ œκ³΅ν•  수 있기 λ•Œλ¬Έμ— λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ΅¬μ‘°μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜κ³  μžˆλŠ” 가상화 κΈ°μˆ μ΄λ‹€.

 

 

 

 

::참고자료::

[μ‹œμž‘ν•˜μ„Έμš”! 도컀/μΏ λ²„λ„€ν‹°μŠ€ - μœ„ν‚€λΆμŠ€]