λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
DevOps/Docker

[Docker] Docker의 κ°œλ…

by gomdeng 2025. 4. 29.

🐢 Dockerλž€?

🐢 μ •μ˜ : 데이터 λ˜λŠ” ν”„λ‘œκ·Έλž¨μ„ κ²©λ¦¬μ‹œν‚€λŠ” κΈ°λŠ₯

개인 μ»΄ν“¨ν„°λ‚˜ μ„œλ²„μ—λŠ” μ—¬λŸ¬κ°€μ§€ ν”„λ‘œκ·Έλž¨μ΄ ν•¨κ»˜ λ™μž‘ν•œλ‹€. (ex. MySQL, μ•„νŒŒμΉ˜, μ›Œλ“œ, μ—‘μ…€ λ“±)

λ„μ»€λŠ” μ΄λ ‡κ²Œ λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž¨κ³Ό 데이터λ₯Ό 각각 λ…λ¦½λœ ν™˜κ²½μœΌλ‘œ κ²©λ¦¬ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, ν˜„ μ‹œμ μ—μ„œλŠ” μ„œλ²„μ—μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ£Ό μš©λ„λ‹€.

 

μ„œλ²„ μƒμ˜ ν™˜κ²½μ„ λΆ„λ¦¬ν•˜κΈ° μœ„ν•΄ λ‹΄λŠ” μ°½κ³  같은 곡간을 μ»¨ν…Œμ΄λ„ˆλΌκ³  ν•˜λŠ”λ°,

이 μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‹€λ£¨λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄κ°€ 도컀닀

 

🐢 도컀λ₯Ό μ‚¬μš©ν•˜λ €λ©΄?

도컀 μ—”μ§„(Docker Engine)을 μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€.

도컀 엔진을 톡해 μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  ꡬ동할 수 μžˆλ‹€.

 

🐢 λ„μ»€μ˜ μ œμ•½μ‚¬ν•­

λ„μ»€λŠ” λ°˜λ“œμ‹œ λ¦¬λˆ…μŠ€ μš΄μ˜μ²΄μ œκ°€ ν•„μš”ν•˜λ‹€.

μœˆλ„μš°λ‚˜ MacOSμ—μ„œλ„ 도컀λ₯Ό ꡬ동할 μˆ˜λŠ” μžˆμ§€λ§Œ, λ‚΄λΆ€μ μœΌλ‘œ λ¦¬λˆ…μŠ€κ°€ μ‚¬μš©λœλ‹€.

 

🐢 λ„μ»€μ˜ μ‹€ν–‰ν™˜κ²½

운영체제(λ¦¬λˆ…μŠ€) μœ„μ— 도컀 엔진이 λ™μž‘ν•˜κ³  κ·Έ μœ„μ—μ„œ μ»¨ν…Œμ΄λ„ˆκ°€ λ™μž‘ν•œλ‹€.

 

🐢 μœˆλ„μš°λ‚˜ MacOSμ—μ„œλŠ” μ–΄λ–»κ²Œ μ‹€ν–‰λ˜μ§€?

μœˆλ„μš°λ‚˜ MacOS λŠ” 각 운영체제 μœ„μ— λ¦¬λˆ…μŠ€λ₯Ό λŒμ–΄ λ“€μ—¬ 도컀λ₯Ό μ‹€ν–‰ν•œλ‹€.

μœˆλ„μš° κΈ°μ€€μœΌλ‘œλŠ” μ•„λž˜μ™€ 같이, WSL2(Windows Subsystem for Linux 2)둜 λ¦¬λˆ…μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€.

 

 

🐢 μ»¨ν…Œμ΄λ„ˆ(Container)λž€?

🐢 μ •μ˜ : ν”„λ‘œκ·Έλž¨κ³Ό κ·Έ μ‹€ν–‰ ν™˜κ²½μ„ ν•˜λ‚˜λ‘œ νŒ¨ν‚€μ§•ν•œ 가볍고 독립적인 μ‹€ν–‰ λ‹¨μœ„

❌ 문제

λ™μΌν•œ μ½”λ“œλ‘œ κ°œλ°œμ„ 해도 μ‹€ν–‰λ˜λŠ” 컴퓨터에 따라 (각 개발자, 개발 μ„œλ²„, μš΄μ˜μ„œλ²„ λ“±)

μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. 문제의 λŒ€λΆ€λΆ„μ˜ 원인은 ν”„λ‘œκ·Έλž¨ κ°„ κ³΅μœ μ— μžˆλŠ”λ°,

ν•œ μ»΄ν“¨ν„°μ—λŠ” ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨ 버전밖에 μ„€μΉ˜ν•  수 μ—†μœΌλ―€λ‘œ 각 μ»΄ν“¨ν„°λ§ˆλ‹€ μ„€μΉ˜ λ²„μ „μ΄λ‚˜

ν™˜κ²½μ„€μ • κ°’ 등이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 좩돌이 λ°œμƒν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.

 

β­• ν•΄κ²°

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ κΈ°μˆ μ΄λ‹€.

μ–΄λ””μ—μ„œ μ‹€ν–‰ν•˜λ“  λ™μΌν•œ ν™˜κ²½(파일, ν™˜κ²½, 경둜 λ“±)을 보μž₯ν•˜μ—¬

물리적 ν™˜κ²½κ³Ό μ„œλ²„ κ΅¬μ„±μ˜ 차이λ₯Ό λ¬΄μ‹œν•˜μ—¬ ν™˜κ²½μ°¨μ΄λ‘œ μΈν•œ 문제λ₯Ό μ›μ²œμ μœΌλ‘œ λ°©μ§€ν•œλ‹€.

 

  • 🚩 κ΅¬μ„±μš”μ†Œ
    • μ‹€ν–‰νŒŒμΌ : μ‹€μ œ μ‹€ν–‰λ˜λŠ” μ½”λ“œ (ex. Java, Python λ“±)
    • μ‹€ν–‰ν™˜κ²½ : 싀행에 ν•„μš”ν•œ νŒ¨ν‚€μ§€, μ„€μ •, ν™˜κ²½λ³€μˆ˜ λ“±
    • νŒŒμΌμ‹œμŠ€ν…œ : μ»¨ν…Œμ΄λ„ˆλ§Œμ˜ 격리된 디렉터리 ꡬ쑰 (Host와 뢄리)
    • λ„€νŠΈμ›Œν¬ : 자체적으둜 톡신 κ°€λŠ₯ν•œ λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€
  • 🚩 νŠΉμ§•
    • 가볍닀 : 운영체제λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠμŒ (μ»€λ„λ§Œ κ³΅μœ ν•¨)
      βœ”οΈ 컀널과 κ³΅μœ ν•˜κΈ° μœ„ν•΄ λ¦¬λˆ…μŠ€ 운영체제의 μ£Όλ³€ λΆ€λΆ„λ§Œ κ°–κ³  μžˆλ‹€.
    • 독립적 : λ‹€λ₯Έ μ»¨ν…Œμ΄λ„ˆμ™€ μ™„μ „νžˆ λΆ„λ¦¬λ˜μ–΄ 싀행됨
    • 이식성 : μ–΄λ””μ„œλ“  λ™μΌν•œ ν™˜κ²½μœΌλ‘œ μ‹€ν–‰ κ°€λŠ₯ (둜컬, ν΄λΌμš°λ“œ λ“±)

μ»¨ν…Œμ΄λ„ˆλŠ” μš©λŸ‰ ν•œλ„ λ‚΄μ—μ„œ 도컀 μœ„μ— μ—¬λŸ¬ 개λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

λ¦¬λˆ…μŠ€ μš΄μ˜μ²΄μ œμ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ μ„€μΉ˜λ˜λŠ” λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ€ λ¦¬λˆ…μŠ€μš© ν”„λ‘œκ·Έλž¨μ΄λ‹€.

βœ”οΈ λ•Œλ¬Έμ— μ›Œλ“œ, μ—‘μ…€, 포토샡 λ“±μ˜ μ†Œν”„νŠΈμ›¨λŠ” λ™μž‘ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

🐢 μ»¨ν…Œμ΄λ„ˆμ˜ 생애주기

μ»¨ν…Œμ΄λ„ˆ μ„€λͺ…을 λ“£λ‹€ 보면 μ»¨ν…Œμ΄λ„ˆμ˜ 수λͺ… λ˜λŠ” μ»¨ν…Œμ΄λ„ˆμ˜ μƒμ• μ£ΌκΈ°λΌλŠ” μ–˜κΈ°κ°€ λ°˜λ“œμ‹œ λ‚˜μ˜€κ²Œ λœλ‹€.μ΄μœ λŠ” μ»¨ν…Œμ΄λ„ˆλŠ” μ“°κ³  λ²„λ¦¬λŠ” μΌνšŒμš©ν’ˆ 같은 것이기 λ•Œλ¬Έμ΄λ‹€.

 

μ»¨ν…Œμ΄λ„ˆλŠ” μ‰½κ²Œ λ§Œλ“€ 수 μžˆλ‹€.κ·Έλž˜μ„œ, 기쑴에 μ»¨ν…Œμ΄λ„ˆμ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ—…λ°μ΄νŠΈ ν•˜λ©΄μ„œ μ‚¬μš©ν•˜κΈ° λ³΄λ‹€λŠ” μ—…λ°μ΄νŠΈλœ μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ΅¬μ„±λœ μƒˆλ‘œμš΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.