곡지
λ‰΄μŠ€λ ˆν„° ν”Œλž«νΌ λ³€κ²½ μ•ˆλ‚΄

Container

πŸ”­μ»¨ν…Œμ΄λ„ˆ 이미지 λ³΄μ•ˆμ„ μœ„ν•œ Dockerfile μž‘μ„± 팁 5κ°€μ§€

λ”μš± μ•ˆμ „ν•œ Docker 이미지λ₯Ό λΉŒλ“œν•  수 μžˆλŠ” Dockerfile μž‘μ„± 5κ°€μ§€λ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

2024.06.17 | 쑰회 1.29K |
0
|

μ•ˆλ…•ν•˜μ„Έμš” κ΅¬λ…μžλ‹˜, DevOps μ†Œμ‹κ³Ό 기술 지식을 μ •λ¦¬ν•΄μ„œ κ³΅μœ ν•΄λ“œλ¦¬λŠ” DevOps 여행을 μœ„ν•œ μ†Œμ‹μ§€μž…λ‹ˆλ‹€.

Docker μ΄λ―Έμ§€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ™μž‘ν•  수 μžˆλŠ” λ…λ¦½λœ ν™˜κ²½μ„ μ œκ³΅ν•΄μ„œ 이미 λ§Žμ€ κ°œλ°œμžκ°€ μ‚¬μš©ν•˜κ³  μžˆλŠ”λ°μš”.

이미 λˆ„κ΅°κ°€ λ§Œλ“€μ–΄λ‘” Docker 이미지λ₯Ό μ‚¬μš©ν•˜κΈ°λ„ ν•˜μ§€λ§Œ, 직접 Dockerfile을 μž‘μ„±ν•΄μ„œ Docker 이미지λ₯Ό λΉŒλ“œν•˜λŠ” κ²½μš°λ„ 많죠.

λ”μš± μ•ˆμ „ν•œ Docker 이미지λ₯Ό μ œμž‘ν•  수 μžˆλŠ” Dockerfile μž‘μ„± 팁이 μžˆλ‹€λŠ” 사싀, μ•Œκ³  κ³„μ…¨λ‚˜μš”?

⚠️Dockerfile을 μž‘μ„±ν•  λ•Œ λ³΄μ•ˆμ— 신경써야 ν•˜λŠ” 이유

Dockerfile을 μž‘μ„±ν•  땐 λ³΄μ•ˆμ„ κ³ λ €ν•΄μ•Ό μΉ¨ν•΄ 사고λ₯Ό 미리 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Dockerfile을 μž‘μ„±ν•  땐 λ³΄μ•ˆμ„ κ³ λ €ν•΄μ•Ό μΉ¨ν•΄ 사고λ₯Ό 미리 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜λ‚  λŒ€λΆ€λΆ„μ˜ μ›Ή μ„œλΉ„μŠ€λŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λ₯Ό λ”°λ₯΄κ³  μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ μ»€λ‹€λž€ μ„œλΉ„μŠ€λ₯Ό λ°°ν¬ν•˜λŠ” 것이 μ•„λ‹Œ, κΈ°λŠ₯μ΄λ‚˜ 성격에 따라 λ‚˜λˆ μ§„ μž‘μ€ μ„œλΉ„μŠ€ μ—¬λŸ¬ 개λ₯Ό 배포 및 μš΄μ˜ν•˜λŠ” 방식을 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λΌκ³  ν•˜λŠ”λ°μš”.

μ΄λ•Œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό 각각의 Docker μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ λ™μž‘ν•˜λ„λ‘ κ΅¬μ„±ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ μ‹€μ œλ‘œ 배포된 μ»¨ν…Œμ΄λ„ˆ 이미지가 μ™ΈλΆ€ 곡격에 μ·¨μ•½ν•˜λ‹€λ©΄... μƒκ°λ§Œ 해도 μ•„μ°”ν•œ λ³΄μ•ˆ μ‚¬κ³ λ‘œ 이어지겠죠.

κ·Έλž˜μ„œ μš°λ¦¬λŠ” Dockerfile을 μž‘μ„±ν•  λ•ŒλΆ€ν„° λ³΄μ•ˆμ— 신경써야 ν•©λ‹ˆλ‹€.

 

πŸ”’λ”μš± μ•ˆμ „ν•œ 이미지λ₯Ό λ§Œλ“œλŠ” Dockerfile μž‘μ„± 팁 5κ°€μ§€

κ·Έλ ‡λ‹€λ©΄ Dockerfile을 μ–΄λ–»κ²Œ μž‘μ„±ν•΄μ•Ό ν• κΉŒμš”? μ—¬κΈ° λ³΄μ•ˆμ— κ°•ν•œ Dockerfile μž‘μ„± 팁 5κ°€μ§€λ₯Ό μ†Œκ°œν•΄λ“œλ¦½λ‹ˆλ‹€.

Multi-Stage λ°©μ‹μœΌλ‘œ λΉŒλ“œ

  • Dockerfile λ‚΄μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ λͺ…λ Ήμ–΄ μ‹€ν–‰ ν›„ λ‚˜μ˜€λŠ” μ΅œμ’… μ‚°μΆœλ¬Όμ„ λ˜λ‹€λ₯Έ Base Image둜 λ³΅μ‚¬ν•˜κ³ , ν•΄λ‹Ή Base Imageλ₯Ό μ΅œμ’… Docker Image둜 λΉŒλ“œν•˜λŠ” 기법을 Multi-Stage라고 ν•˜λŠ”λ°μš”.
  • Multi-Stage λ°©μ‹μœΌλ‘œ λΉŒλ“œλœ Docker 이미지 λ‚΄μ—λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ동에 ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μš”μ†Œλ§Œ λ‹΄κ²¨μžˆμœΌλ―€λ‘œ, μžμ—°μŠ€λŸ½κ²Œ 잠재된 λ³΄μ•ˆ 취약점도 더 μ μ–΄μ§‘λ‹ˆλ‹€.

ν•„μš”μ—†λŠ” νŒ¨ν‚€μ§€ 제거

  • Docker μ»¨ν…Œμ΄λ„ˆ λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ동에 ν•„μš”μ—†λŠ” νŒ¨ν‚€μ§€λ₯Ό μ œκ±°ν•˜λŠ” 것 μ—­μ‹œ 잠재 λ³΄μ•ˆ 취약점을 쀄여주기 λ•Œλ¬Έμ— ꢌμž₯λ©λ‹ˆλ‹€.

Rootκ°€ μ•„λ‹Œ λ³„λ„μ˜ μ‚¬μš©μžλ₯Ό 생성 및 μ‚¬μš©

  • Container 내에 Root 계정이 μ‚¬μš©λ  경우, μΉ¨μž… 사고 λ°œμƒ μ‹œ ν”Όν•΄κ°€ 컀질 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ κΆŒν•œμ΄ μ œν•œλœ λ³„λ„μ˜ μ‚¬μš©μžλ₯Ό μƒμ„±ν•˜κ³  μ‚¬μš©ν•˜λŠ” 것이 μ•ˆμ „ν•©λ‹ˆλ‹€.

Container λ‚΄ λ―Όκ°ν•œ νŒŒμΌλ“€μ€ Read Only둜

  • 배포 이후 Docker Container λ‚΄μ—μ„œ μΆ”ν›„ μˆ˜μ •μ΄ ν•„μš”ν•˜μ§€ μ•ŠλŠ” νŒŒμΌλ“€μ„ 'Read Only'둜 μ„€μ •ν•˜λ©΄ λ³΄μ•ˆμ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

Shell μ ‘κ·Ό 제거

  • μ»¨ν…Œμ΄λ„ˆ μ•ˆμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•œ shλ‚˜ bash λ“±μ˜ Shell은 λ™μž‘ 쀑인 μ»¨ν…Œμ΄λ„ˆ λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 디버깅할 λ•Œ μ‚¬μš©λ˜λŠ” κ²½μš°κ°€ μžˆμ§€λ§Œ, 이런 ν†΅λ‘œλ₯Ό μ œκ±°ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ μΉ¨μž…μ΄ μ–΄λ €μ›Œμ Έ λ³΄μ•ˆμ„±μ΄ λ†’μ•„μ§‘λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ Shell 접근을 μ œκ±°ν•  땐 μ•„λž˜ μ£Όμ˜μ‚¬ν•­μ— λŒ€ν•΄ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • μ»¨ν…Œμ΄λ„ˆ μ΄λ―Έμ§€μ—μ„œ λ™μž‘ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Shell을 μ‚¬μš©ν•˜κ³  μžˆμ§€ μ•Šμ€μ§€ 확인해야 ν•©λ‹ˆλ‹€.
    • ν•΄λ‹Ή 이미지λ₯Ό λ°°ν¬ν•œ 뒀에 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 디버깅할 수 μžˆλŠ” λ‹€λ₯Έ λŒ€μ•ˆμ„ 미리 λ§ˆλ ¨ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

πŸ”Žμ»¨ν…Œμ΄λ„ˆ λ³΄μ•ˆμ„ 지킬 수 μžˆλŠ” λ˜λ‹€λ₯Έ 방법

μ§€κΈˆκΉŒμ§€ Dockerfile을 μž‘μ„±ν•  λ•Œ λ³΄μ•ˆμ„±μ„ λ†’μ΄λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ΄€λŠ”λ°μš”. λ§Œμ•½ Docker 이미지λ₯Ό 직접 λΉŒλ“œν•˜λŠ” κ²½μš°κ°€ μ•„λ‹Œ, 이미 λˆ„κ΅°κ°€ μ œμž‘ν•œ Docker 이미지λ₯Ό μ‚¬μš©ν•  λ•Œ κ·Έ 이미지가 μ•ˆμ „ν•œμ§€λŠ” μ–΄λ–»κ²Œ μ•Œ 수 μžˆμ„κΉŒμš”?

이럴 λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” 방법이 λ°”λ‘œ μ»¨ν…Œμ΄λ„ˆ λ³΄μ•ˆ μŠ€μΊλ‹μž…λ‹ˆλ‹€. λŒ€ν‘œμ μΈ μ»¨ν…Œμ΄λ„ˆ λ³΄μ•ˆ μŠ€μΊλ‹ νˆ΄λ‘œλŠ” Trivy와 Clairκ°€ μžˆλŠ”λ°μš”.

μ»¨ν…Œμ΄λ„ˆ 이미지 λ³΄μ•ˆ μŠ€μΊλ‹μ— λŒ€ν•΄μ„œλŠ” μ§€λ‚œ μ†Œμ‹μ§€μ—μ„œ 닀룬 적이 있기 λ•Œλ¬Έμ— ν˜Ήμ‹œ 관심 μžˆμœΌμ‹œλ‹€λ©΄ μ•„λž˜ λ§ν¬μ—μ„œ ν™•μΈν•΄λ³΄μ„Έμš”.😊

 

πŸ”­λ§ˆμΉ˜λ©°...

μ˜€λŠ˜μ€ μ»¨ν…Œμ΄λ„ˆ 이미지 λ³΄μ•ˆμ„ μœ„ν•œ Dockerfile μž‘μ„± 팁 5가지와 μ»¨ν…Œμ΄λ„ˆ λ³΄μ•ˆ μŠ€μΊλ‹μ— λŒ€ν•΄ λ‹€λ€„λ΄€λŠ”λ°μš”. 

ν˜Ήμ‹œ 이번 λ‚΄μš© κ΄€λ ¨ν•΄μ„œ 더 κΆκΈˆν•œ 점이 μžˆμœΌμ‹œλ‹€λ©΄ μ•„λž˜ 메일리 λŒ“κΈ€ λ‚¨κ²¨μ£Όμ„Έμš”.πŸ˜€

그럼, λ‹€μŒ μ†Œμ‹μ§€μ—μ„œ 보닀 μ•Œμ°¨κ³  ν₯미둜운 λ‚΄μš©μœΌλ‘œ μ°Ύμ•„λ΅™κ² μŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜λ„ κ°μ‚¬ν•©λ‹ˆλ‹€, κ΅¬λ…μžλ‹˜ 😺

 

πŸ”—References

 

 

이번 μ†Œμ‹μ§€ λ‚΄μš©μ€ μ–΄λ– μ…¨λ‚˜μš”? μ†Œμ‹μ§€λ₯Ό 더 λ‚˜μ€ λ°©ν–₯으둜 κ°œμ„ ν•˜κΈ° μœ„ν•΄ μ•„λž˜ νΌμ—μ„œ 1~2λΆ„ 정도면 λλ‚˜λŠ” 짧은 ν”Όλ“œλ°±μ„ λ°›κ³  μžˆμ–΄μš”.πŸ‘‡

https://forms.gle/jjkvp9htV3atYLHG8

μ—¬λŸ¬λΆ„λ“€μ˜ μ†Œμ€‘ν•œ μ˜κ²¬μ— 항상 κ°μ‚¬ν•©λ‹ˆλ‹€!

 

λ³Έ μ†Œμ‹μ§€λ₯Ό μ•„μΉ΄μ΄λΉ™ν•˜κ³  λ‹€μ–‘ν•œ 정보λ₯Ό κ³΅μœ ν•˜λŠ” λΈ”λ‘œκ·Έλ„ 운영 μ€‘μž…λ‹ˆλ‹€ :)

πŸ”­Aiden's Lab λ‘˜λŸ¬λ³΄κΈ°

 

λ‹€κ°€μ˜¬ λ‰΄μŠ€λ ˆν„°κ°€ κΆκΈˆν•˜μ‹ κ°€μš”?

μ§€κΈˆ κ΅¬λ…ν•΄μ„œ μƒˆλ‘œμš΄ λ ˆν„°λ₯Ό λ°›μ•„λ³΄μ„Έμš”

βœ‰οΈ

이번 λ‰΄μŠ€λ ˆν„° μ–΄λ– μ…¨λ‚˜μš”?

Aidens Lab λ‰΄μŠ€λ ˆν„° λ‹˜μ—κ²Œ β˜•οΈ 컀피와 βœ‰οΈ μͺ½μ§€λ₯Ό λ³΄λ‚΄λ³΄μ„Έμš”!

λŒ“κΈ€

μ˜κ²¬μ„ λ‚¨κ²¨μ£Όμ„Έμš”

확인
의견이 μžˆμœΌμ‹ κ°€μš”? 제일 λ¨Όμ € λŒ“κΈ€μ„ λ‹¬μ•„λ³΄μ„Έμš” !

이전 λ‰΄μŠ€λ ˆν„°

λ‹€μŒ λ‰΄μŠ€λ ˆν„°

λ‹€λ₯Έ λ‰΄μŠ€λ ˆν„°

Β© 2026 Aidens Lab λ‰΄μŠ€λ ˆν„°

DevOps μ—”μ§€λ‹ˆμ–΄κ°€ μ—„μ„ ν•œ ν₯미둜운 IT 기술/업계 이야기λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€.

λ‰΄μŠ€λ ˆν„° 문의eduukulelekim@gmail.com

메일리 둜고

도움말 였λ₯˜ 및 κΈ°λŠ₯ κ΄€λ ¨ 제보

μ„œλΉ„μŠ€ 이용 문의admin@team.maily.so μ±„νŒ…μœΌλ‘œ λ¬Έμ˜ν•˜κΈ°

메일리 μ‚¬μ—…μž 정보

메일리 (λŒ€ν‘œμž: μ΄ν•œκ²°) | μ‚¬μ—…μžλ²ˆν˜Έ: 717-47-00705 | μ„œμšΈνŠΉλ³„μ‹œ μ†‘νŒŒκ΅¬ μœ„λ‘€κ΄‘μž₯둜 199, 5μΈ΅ 501-8호

μ΄μš©μ•½κ΄€ | κ°œμΈμ •λ³΄μ²˜λ¦¬λ°©μΉ¨ | μ •κΈ°κ²°μ œ μ΄μš©μ•½κ΄€ | λΌμ΄μ„ μŠ€