A A
[Docker] Container와 이미지

ν˜„λŒ€ μ†Œν”„νŠΈμ›¨μ–΄ 개발 ν™˜κ²½μ—μ„œ μ»¨ν…Œμ΄λ„ˆ(Container)와 이미지(Image)λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 배포와 관리λ₯Ό ν˜μ‹ μ μœΌλ‘œ λ³€ν™”μ‹œν‚¨ 핡심 κΈ°μˆ μž…λ‹ˆλ‹€. 이 ν¬μŠ€νŠΈμ—μ„œλŠ” μ»¨ν…Œμ΄λ„ˆμ™€ μ΄λ―Έμ§€μ˜ κ°œλ…, ν•„μš”μ„±, 그리고 이λ₯Ό 효과적으둜 ν™œμš©ν•˜κΈ° μœ„ν•œ 고렀사항에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


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

μ»¨ν…Œμ΄λ„ˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ 격리된 κ²½λŸ‰ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
μ΄λŠ” 독립적인 ν™˜κ²½μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 싀행될 수 μžˆλ„λ‘ ν•˜μ—¬, μ„œλ‘œ λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„μ˜ 간섭을 μ΅œμ†Œν™”ν•©λ‹ˆλ‹€.

ν”„λ‘œμ„ΈμŠ€μ™€μ˜ 관계

  • ν”„λ‘œμ„ΈμŠ€: μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ„ μ˜λ―Έν•˜λ©°, 예λ₯Ό λ“€μ–΄ λ©”λͺ¨μž₯μ΄λ‚˜ 크둬 λΈŒλΌμš°μ € 등이 μžˆμŠ΅λ‹ˆλ‹€.
  • μžμ› μ‚¬μš©: ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬, 파일 μ‹œμŠ€ν…œ, λ„€νŠΈμ›Œν¬ λ“± μ»΄ν“¨ν„°μ˜ λ‹€μ–‘ν•œ μžμ›μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 격리: μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— 싀행될 λ•Œ, μ„œλ‘œ κ°„μ„­ν•˜μ§€ μ•Šλ„λ‘ λ©”λͺ¨λ¦¬ μˆ˜μ€€μ—μ„œ κ²©λ¦¬λ©λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆλŠ” 여기에 더해 파일 μ‹œμŠ€ν…œκ³Ό λ„€νŠΈμ›Œν¬κΉŒμ§€λ„ κ²©λ¦¬ν•˜μ—¬ 보닀 μ² μ €ν•œ 뢄리λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆμ˜ ν•„μš”μ„±

그러면 μš°λ¦¬λŠ” μƒκ°ν•΄λ³Όμˆ˜ μžˆμ–΄μš”. μ™œ Containerκ°€ ν•„μš”ν• κΉŒμš”?
  • 격리된 ν™˜κ²½ 제곡: ν•˜λ‚˜μ˜ 컴퓨터 λ‚΄μ—μ„œλ„ λ…λ¦½λœ μ‹€ν–‰ ν™˜κ²½μ„ μ œκ³΅ν•˜μ—¬, μ—¬λŸ¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 좩돌 없이 싀행될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ•± κ°„ κ°„μ„­ κ°μ†Œ: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„μ˜ 간섭을 쀄여 μ•ˆμ •μ„±μ„ λ†’μž…λ‹ˆλ‹€.
  • μž₯μ•  격리: νŠΉμ • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μž₯μ• κ°€ λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
  • μœ μ—°ν•œ 격리 μˆ˜μ€€ μ‘°μ •: μš”κ΅¬μ‚¬ν•­μ— 따라 λ©”λͺ¨λ¦¬, 파일 μ‹œμŠ€ν…œ, λ„€νŠΈμ›Œν¬, 라이브러리, 운영체제(OS), ν•˜λ“œμ›¨μ–΄(H/W) λ“± λ‹€μ–‘ν•œ μžμ› μΈ΅μ—μ„œ 격리 μˆ˜μ€€μ„ μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆμ™€ κ°€μƒλ¨Έμ‹ μ˜ 비ꡐ

호슀트 OS μˆ˜μ€€μ˜ 격리 (가상머신):

  • ν•˜μ΄νΌλ°”μ΄μ €λ₯Ό μ‚¬μš©ν•˜μ—¬ 가상머신(VM)을 μƒμ„±ν•©λ‹ˆλ‹€.
  • 높은 μˆ˜μ€€μ˜ 격리λ₯Ό μ œκ³΅ν•˜λ©° λ³΄μ•ˆμƒ 이점이 ν½λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ 운영체제의 λͺ¨λ“  μ‹€ν–‰ μš”μ†Œλ₯Ό 포함해야 ν•˜λ―€λ‘œ 무겁고 초기 ꡬ동 속도가 λŠλ¦½λ‹ˆλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μˆ˜μ€€μ˜ 격리 (μ»¨ν…Œμ΄λ„ˆ):

  • 운영체제 κ΄€λ ¨ μš”μ†Œλ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 가상머신보닀 훨씬 κ°€λ³μŠ΅λ‹ˆλ‹€.
  • κ²½λŸ‰ ν”„λ‘œμ„ΈμŠ€λ‘œ λ™μž‘ν•˜λ©° 초기 ꡬ동 속도가 λΉ λ¦…λ‹ˆλ‹€.
  • ν‘œμ€€ 기술둜 μžλ¦¬μž‘μ•„ λ‹€μ–‘ν•œ ν™˜κ²½μ—μ„œ ν˜Έν™˜μ„±μ΄ λ›°μ–΄λ‚©λ‹ˆλ‹€.

Image (이미지)λž€?

μ΄λ―Έμ§€λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•œ 파일 묢음 μž…λ‹ˆλ‹€.
μ΄λŠ” μ„œλ²„ μ‹€ν–‰ μ†ŒμŠ€ μ½”λ“œ, λͺ…λ Ήμ–΄, μ˜΅μ…˜ 정보 등을 ν¬ν•¨ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆκ°€ μΌκ΄€λ˜κ²Œ 싀행될 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
  • 일λͺ…, μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“€κΈ° μœ„ν•œ μ„€κ³„λ„μ˜ˆμš”. 이 μ„€κ³„λ„μ—λŠ” 앱을 μ‹€ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  것듀이 ν¬ν•¨λ˜μ–΄ 있죠—μ½”λ“œ, μ„€μ •, λͺ…λ Ήμ–΄ λ“±.

 

μ΄λ―Έμ§€μ˜ νŠΉμ§•

 

  • 이동성: μ΄λ―Έμ§€λŠ” 파일 ν˜•νƒœμ΄κΈ° λ•Œλ¬Έμ— λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ‰½κ²Œ μ£Όκ³  받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 버전 관리: μ΄λ―Έμ§€λŠ” νŠΉμ • μ‹œμ μ˜ μƒνƒœλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜κΈ° μœ„ν•΄ Digest(λ‹€μ΄μ œμŠ€νŠΈ)λΌλŠ” ν•΄μ‹œκ°’μ„ μ‚¬μš©ν•˜μ—¬ 버전 관리λ₯Ό ν•©λ‹ˆλ‹€.
  • μž¬μ‚¬μš©μ„±: λ™μΌν•œ 이미지λ₯Ό μ—¬λŸ¬ 번 μ‚¬μš©ν•˜μ—¬ μΌκ΄€λœ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ§€μ†μ μœΌλ‘œ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
그러면, 이미지λ₯Ό μ‚¬μš©ν• λ•Œ κ³ λ €ν•΄μ•Ό ν•˜λŠ”κ²ƒμ€‘μ— 버전관리, 즉 Digest(λ‹€μ΄μ œμŠ€νŠΈ)λ₯Ό ν™œμš©ν•΄μ„œ 버전관리λ₯Ό ν•œλ‹€κ³  ν–ˆλŠ”λ°,  Digest(λ‹€μ΄μ œμŠ€νŠΈ)λŠ” λ¬΄μ—‡μΌκΉŒμš”?

 

Digest(λ‹€μ΄μ œμŠ€νŠΈ)

  • μ •μ˜: 이미지λ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” ν•΄μ‹œκ°’μœΌλ‘œ, μžλ™μœΌλ‘œ μƒμ„±λ©λ‹ˆλ‹€.
  • νƒœκ·Έ(Tag): DigestλŠ” μ‚¬λžŒμ΄ μ΄ν•΄ν•˜κΈ° μ–΄λ €μš΄ ν•΄μ‹œκ°’μ΄κΈ° λ•Œλ¬Έμ—, 이λ₯Ό λŒ€μ‹ ν•  νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 별칭을 λΆ€μ—¬ν•©λ‹ˆλ‹€.
    • 예: latest νƒœκ·ΈλŠ” μ΅œμ‹  이미지λ₯Ό κ°€λ¦¬ν‚€λŠ” λ³„μΉ­μœΌλ‘œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 버전 관리: νƒœκ·ΈλŠ” μ‹œμ μ— 따라 λ‹€λ₯Έ Digestλ₯Ό μ°Έμ‘°ν•  수 μžˆμœΌλ―€λ‘œ, νŠΉμ • μ‹œμ μ˜ 이미지λ₯Ό λͺ…ν™•ν•˜κ²Œ μ§€μ •ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

 

μ €μž₯ νš¨μœ¨μ„± (Layer 방식)

그리고 이미지λ₯Ό κ΄€λ¦¬ν• λ•Œ, 이미지가 클수둝 μ „μ†‘ν•˜λŠ”λ° μ‹œκ°„μ΄ 많이 걸릴수 μžˆμ–΄μš”.
κ·Έλž˜μ„œ μ΄λ―Έμ§€μ˜ μ €μž₯ νš¨μœ¨μ„±μ— λ°ν•΄μ„œ 신경을 μ¨μ•Όν•©λ‹ˆλ‹€. μ΄λ•Œ Layer(λ ˆμ΄μ–΄)방식을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 이미지 크기: 이미지가 클수둝 λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ 전솑 μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ ˆμ΄μ–΄(Layer) 방식:
    1. 이미지λ₯Ό μ—¬λŸ¬ 개의 λ ˆμ΄μ–΄ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μ €μž₯ν•©λ‹ˆλ‹€.
    2. 각 λ ˆμ΄μ–΄λŠ” λ³€κ²½λ˜μ§€ μ•Šμ€ 뢀뢄을 μž¬μ‚¬μš©ν•  수 μžˆμ–΄, 쀑볡 μ €μž₯을 λ°©μ§€ν•˜κ³  μ €μž₯ νš¨μœ¨μ„±μ„ λ†’μž…λ‹ˆλ‹€.
    3. 예λ₯Ό λ“€μ–΄, 베이슀 이미지와 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ ˆμ΄μ–΄λ₯Ό λΆ„λ¦¬ν•˜μ—¬ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μΆ”κ°€ 고렀사항

  • λ³΄μ•ˆ: 이미지에 ν¬ν•¨λœ μ†Œν”„νŠΈμ›¨μ–΄μ˜ 취약점을 κ΄€λ¦¬ν•˜κ³ , μ‹ λ’°ν•  수 μžˆλŠ” μ†ŒμŠ€μ—μ„œ 이미지λ₯Ό κ°€μ Έμ˜€λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.
  • μ΅œμ ν™”: λΆˆν•„μš”ν•œ νŒŒμΌμ΄λ‚˜ νŒ¨ν‚€μ§€λ₯Ό μ œκ±°ν•˜μ—¬ 이미지 크기λ₯Ό μ΅œμ†Œν™”ν•˜κ³ , μ‹€ν–‰ 속도λ₯Ό ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 버전 일관성: νƒœκ·Έμ™€ λ‹€μ΄μ œμŠ€νŠΈλ₯Ό 적절히 μ‚¬μš©ν•˜μ—¬, 개발 ν™˜κ²½κ³Ό ν”„λ‘œλ•μ…˜ ν™˜κ²½ κ°„μ˜ 일관성을 μœ μ§€ν•©λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆμ™€ μ΄λ―Έμ§€λŠ” ν˜„λŒ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 및 배포의 핡심 λ„κ΅¬λ‘œ μžλ¦¬μž‘μ•˜μŠ΅λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆλŠ” κ²½λŸ‰ν™”λœ 격리 ν™˜κ²½μ„ μ œκ³΅ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ•ˆμ •μ„±κ³Ό 이식성을 높이며, μ΄λ―Έμ§€λŠ” μ΄λŸ¬ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κ³  배포할 수 μžˆλŠ” κΈ°λ°˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

이λ₯Ό 톡해 κ°œλ°œμžλŠ” λ”μš± λΉ λ₯΄κ³  μœ μ—°ν•˜κ²Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κ³  μš΄μ˜ν•  수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œλ„ μ»¨ν…Œμ΄λ„ˆμ™€ 이미지 κΈ°μˆ μ€ λ”μš± λ°œμ „ν•˜μ—¬ λ‹€μ–‘ν•œ ν™˜κ²½μ—μ„œμ˜ ν™œμš©μ„±μ΄ λ”μš± ν™•λŒ€λ  κ²ƒμœΌλ‘œ κΈ°λŒ€λ©λ‹ˆλ‹€.

References

 

Home

Docker Documentation is the official Docker library of resources, manuals, and guides to help you containerize applications.

docs.docker.com