๐Ÿณ์ธํ”„๋ผ/Docker

4. ์ด๋ฏธ์ง€๋นŒ๋“œ

๊ณ„๋ž€์†Œ๋…„ 2024. 8. 31. 16:59

์ด๋ฏธ์ง€๋นŒ๋“œ๋ž€?

 

์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๋Š”์ง€, ์ด๋ฏธ์ง€๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ ˆ์ด์–ด๋“œ ๊ตฌ์กฐ

์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•: ์ปค๋ฐ‹, ๋นŒ๋“œ

  • ๋นŒ๋“œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋„์ปค ํŒŒ์ผ์ด๋ผ๋Š” ๋ช…์„ธ์„œ ์ž‘์„ฑ
  • ๋” ํšจ์œจ์ ์ธ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐฉ์‹: ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง• ๋ฐฉ์‹

 

1. ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด์–ด

์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์œ„ํ•œ ์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผ์ด๋ฉฐ, ๋„์ปค ์ด๋ฏธ์ง€๋Š” ๋ ˆ์ด์–ด๋“œ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

๋ ˆ์ด์–ด๋ž€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธต์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์˜ ์ธต์œผ๋กœ, ๋ ˆ์ด์–ด๋“œ ๊ตฌ์กฐ๋Š” ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ๊ตฌ์กฐ์ด๋‹ค.

์ด ๋ ˆ์ด์–ด๋“ค์ด ๋ชจ์—ฌ์„œ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๊ฐ ๋ ˆ์ด์–ด๋Š” ์ด๋ฏธ์ง€์˜ ์ผ๋ถ€๋ถ„์ด๋‹ค.

 

  • ์™œ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑํ• ๊นŒ?
    • -> ๊ณต๊ฐ„์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ด๋ฏธ์ง€ ์ €์žฅ&์ „์†ก ์‹œ ์Šคํ† ๋ฆฌ์ง€์™€ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฑด์ถ•๋„๋ฉด์„ ์ƒ๊ฐํ•˜์ž

ํˆฌ๋ช…ํ•œ ๋„๋ฉด์„ ์—ฌ๋Ÿฌ ์žฅ ์ค€๋น„ํ•˜์—ฌ ๊ฐ ์ฃผ์ œ๋ณ„๋กœ ํ•œ์žฅ์”ฉ ๊ทธ๋ ค ์ด ์šฉ์ง€๋“ค์„ ํ•ฉ์น˜๋ฉด ํ•˜๋‚˜์˜ ๊ฑด๋ฌผ์— ๋Œ€ํ•œ ์„ค๊ณ„๋„๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

์ „๊ธฐ ๋ถ€๋ถ„์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด ์žฌํ™œ์šฉ์ด ์œ ๋ฆฌํ•œ ๊ตฌ์กฐ์ด๋‹ค. ๋„๋ฉด ์ „์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „๊ธฐ ๊ด€๋ จ ๋„๋ฉด๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

๋˜ํ•œ ์„ค๊ณ„๋„ A์™€ B๊ฐ€ ์ „๊ธฐ ๋ถ€๋ถ„๋งŒ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•˜์˜€์„ ๋•Œ, ๊ฒน์น˜๋Š” ๋‚˜๋จธ์ง€ ๋ ˆ์ด์–ด๋Š” ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ๋ ˆ์ด์–ด๋“œ ๊ตฌ์กฐ์ด๋ฉด ๋‚˜๋จธ์ง€ ๊ฒน์น˜๋Š” ๊ตฌ์กฐ๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋Š” ์ง์ „ ๋‹จ๊ณ„ ๋ ˆ์ด์–ด์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์ €์žฅ๋œ๋‹ค.

 

์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์„œ๋ฒ„์— ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” Nginx๋ฅผ ์„ค์น˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

๋จผ์ € OS๋ฅผ ์„ค์น˜ํ•˜๊ณ  Nginx ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•œ๋‹ค. ์ด๋•Œ, OS์˜ ํŠน์ • ํด๋”์— Nginx ์†Œํ”„ํŠธ์›จ์–ด ๊ด€๋ จ๋œ ํŒŒ์ผ๋“ค์ด ์ถ”๊ฐ€๋˜๊ณ  ์ด๋ ‡๊ฒŒ ๊ธฐ์กด ๋ ˆ์ด์–ด์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ๋“ค์€ ๊ธฐ์กด ๋ ˆ์ด์–ด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๋ ˆ์ด์–ด ์œ„์— ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ๋“ค์ด ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋กœ ์ €์žฅ๋œ๋‹ค. 

๊ทธ๋ž˜์„œ ๊ธฐ์กด OS ํŒŒ์ผ์‹œ์Šคํ…œ์— Nginx์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„๋งŒ ๋”ฐ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ ,  ์ด์ „ ๋ ˆ์ด์–ด์™€ ๋น„๊ตํ•ด์„œ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋‹ค์Œ ๋ ˆ์ด์–ด๋กœ ์ €์žฅ๋œ๋‹ค.

์ด๋ฏธ์ง€์—์„œ ํ•œ ๋ฒˆ ์ €์žฅ๋œ ๋ ˆ์ด์–ด๋Š” ๋ณ€๊ฒฝ๋ถˆ๊ฐ€, ๋ณ€๊ฒฝ์‚ฌํ•ญ ์žˆ์„ ์‹œ ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋กœ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

 

  • ์ด๋ฒˆ์—๋Š” index.html๊นŒ์ง€ ์ด๋ฏธ์ง€ A๋ฅผ ์™„์„ฑ ํ•˜์˜€๋Š”๋ฐ, ์ด๋ฏธ์ง€ B๋ฅผ ์ƒˆ๋กœ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋ณด์ž, ์ „์ฒด ๊ณผ์ •์€ ๋˜‘๊ฐ™๊ณ , ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ index.html์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด๋•Œ ๊ทธ์ „ ๋‹จ๊ณ„๊นŒ์ง€๋Š” ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๊ฐ™์€ ๋ ˆ์ด์–ด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๋งˆ์ง€๋ง‰ index.html ๋ ˆ์ด์–ด๋งŒ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฏธ์ง€ B๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

 

์ •๋ฆฌํ•˜๋ฉด ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์Œ“์ด๊ณ , ๊ฐ ๋ ˆ์ด์–ด๋Š” ์ด์ „ ๋ ˆ์ด์–ด์—์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

๊ฐ™์€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ ๋ ˆ์ด์–ด๋Š” ๊ณต์œ ํ•ด์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋Š” ์ด์ „ ํŒŒ์ผ์—์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๊ธฐ์— ๊ตฌ์„ฑ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

Docker run ๋ช…๋ น์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ด๋ฏธ์ง€์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ ˆ์ด์–ด ์œ„์—์„œ ์ƒˆ๋กœ์šด ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ€๋Šฅ ๋ ˆ์ด์–ด๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. ์ด ์ถ”๊ฐ€๋œ ๋ ˆ์ด์–ด๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด์ด๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋กœ๊ทธ๊ฐ€ ์Œ“์ด๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์— ์ƒ๊ธฐ๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ด ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด์— ์ €์žฅ๋œ๋‹ค.

 

์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด์™€ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด์˜ ์—ญํ• ์€ ์™„์ „ํžˆ ๋‹ค๋ฅด๋‹ค.

  • ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด(์ฝ๊ธฐ์ „์šฉ): ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ save point ์—ญํ• 
  • ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด(์ฝ๊ธฐ, ์“ฐ๊ธฐ): ์‹ค์ œ๋กœ ์ด ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•œ ๋‹ค์Œ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ€๊ฒฝํ•˜๋Š” ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๋Š” ๋ ˆ์ด์–ด

์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด ํ•œ์žฅ์ด ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด ์ƒ๋‹จ์— ์ถ”๊ฐ€๋˜์–ด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ค‘์— ๋ณ€๊ฒฝ๋˜๋Š” ๋‚ด์šฉ๋งŒ ๊ธฐ๋กํ•œ๋‹ค. ์ด๋ฏธ์ง€ A๋กœ ๋‘๋ฒˆ์งธ ์ปจํ…Œ์ด๋„ˆ์ธ ์ปจํ…Œ์ด๋„ˆ2๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ2์— ์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ ˆ์ด์–ด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

Container1, 2๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๊ฐ™๊ธฐ์— ๋™์ผํ•œ ์ฝ๊ธฐ ์ „์šฉ ๋ ˆ์ด์–ด๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ „์ฒด ๋ ˆ์ด์–ด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด๋ฏธ์ง€ ์œ„์— ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด๋งŒ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€

 

์ •๋ฆฌํ•˜๋ฉด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ž ์ž๊ธฐ๋งŒ์˜ ์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ ˆ์ด์–ด ํ•œ์žฅ์„ ๊ฐ€์ง€๊ณ , ์ปจํ…Œ์ด๋„ˆ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋œ ์ด๋ฏธ์ง€์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€์˜ ์ฝ๊ธฐ ์ „์šฉ ๋ ˆ์ด์–ด ์ „์ฒด or ์ผ๋ถ€๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ : ์ด๋ฏธ์ง€์˜ ์ฝ๊ธฐ ์ „์šฉ ๋ ˆ์ด์–ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ „์ฒด ๊ณต๊ฐ„ ๋ณต์‚ฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ์— ์ปจํ…Œ์ด๋„ˆ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์„ ์ž‘๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋Š” ์ด์ „ ํŒŒ์ผ์— ์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๊ธฐ์— ๊ตฌ์„ฑ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

  • ๋ ˆ์ด์–ด๋ง: ๊ฐ ๋ ˆ์ด์–ด๋Š” ์ด์ „ ๋ ˆ์ด์–ด ์œ„์— ์Œ“์ด๋ฉฐ, ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€ ๊ฐ„ ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ ˆ์ด์–ด ๋ฐฉ์‹์€ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ด๋ฉฐ, ์ €์žฅ์†Œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Copy-on-Write: ๋‹ค์Œ ๋ ˆ์ด์–ด์—์„œ ์ด์ „ ๋ ˆ์ด์–ด ์ˆ˜์ • ์‹œ, ํ•ด๋‹น ํŒŒ์ผ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉ, ๋ณ€๊ฒฝ๋œ ๋ชจ๋“  ๊ฒƒ๋“ค์€ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด์— ์ €์žฅ๋จ. ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ copyํ•ด์„œ, ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด์—์„œ writeํ•จ
  • ๋ถˆ๋ณ€ ๋ ˆ์ด์–ด: ์ด๋ฏธ์ง€์˜ ๊ฐ ๋ ˆ์ด์–ด๋Š” ๋ถˆ๋ณ€ -> ์ด๋ฏธ์ง€์˜ ์ผ๊ด€์„ฑ ์œ ์ง€
  • ์บ์‹ฑ: ๋ ˆ์ด์–ด ์บ์‹œ๋ฅผ ํ†ตํ•ด, ์ด๋ฏธ ๋นŒ๋“œ๋œ ๋ ˆ์ด์–ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

2. ์ด๋ฏธ์ง€ ์ปค๋ฐ‹

์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” 2๊ฐ€์ง€ ๋ฐฉ์‹

  • ์ปค๋ฐ‹: ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜๋™์œผ๋กœ ์ปค๋ฐ‹ํ•˜์—ฌ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ
  • ๋นŒ๋“œ: Dockerfile์„ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ์ปค๋ฐ‹ํ•˜๋ฉด์„œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹

 

์ปค๋ฐ‹์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ, ๋นŒ๋“œ ๋˜ํ•œ ์ปค๋ฐ‹์„ ์‘์šฉํ•œ ๋ฐฉ์‹

์ง€๊ธˆ๊นŒ์ง€๋Š” ์ด๋ฏธ์ง€์—์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰๋งŒ ํ–ˆ๊ณ , ์ด๋ฒˆ์—๋Š” ์ปค๋ฐ‹์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ

 

docker commit <์ปจํ…Œ์ด๋„ˆ_ID> <์ƒˆ๋กœ์šด_์ด๋ฏธ์ง€์ด๋ฆ„>:<ํƒœ๊ทธ>

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰๊ณผ ๋™์‹œ์— ํ„ฐ๋ฏธ๋„ ์ ‘์†, ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋””๋ฒ„๊น…ํ•˜๋Š” ์šฉ๋„
docker run -it --name my_container ubuntu bin/bash
# ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑ
docker commit -m "ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ" my_container my_custom_image:v1

 

 

3. ์ด๋ฏธ์ง€ ๋นŒ๋“œ

 

IaC: ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ๊ด€๋ฆฌ

์ด๋ฏธ์ง€ ๋นŒ๋“œ: IaC ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

์‚ฌ๋žŒ์ด ์ง์ ‘ ์ธํ”„๋ผ๋ฅผ ์ปจํŠธ๋กค -> ์‹ค์ˆ˜ ๊ฐ€๋Šฅ -> DOckerfile์ด๋ผ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ”„๋ผ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ

 

  • ์ปค๋ฐ‹์˜ ๊ฒฝ์šฐ
    • ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ๋˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์ž…๋ ฅ, ์ปค๋ฐ‹ ํ•˜๋‚˜๋‹น ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด์–ด๊ฐ€ ํ•˜๋‚˜๊ฐ€ ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์ปค๋ฐ‹์ด ํ•„์š”
  • ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ
    • ์ด๋ฏธ์ง€ ์ œ์ž‘์ž๊ฐ€ ๋„์ปค๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์— ๋”ฐ๋ผ์„œ ๋„์ปค ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋ฉด ๋„์ปค๋Š” ์ž„์‹œ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋’ค์— ์ปค๋ฐ‹์„ ์‹คํ–‰. -> ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ด์–ด๋„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€๊ฐ€๋Šฅ

 

๋นŒ๋“œ๋ฅผ ํ†ตํ•ด ๋ ˆ์ด์–ด๋ฅผ ํ•œ ์žฅ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ์— ๋‹ค์‹œ ๊ทธ ๋ ˆ์ด์–ด๋กœ ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋งŒ๋“ค๊ณ  ๊ทธ ์ปจํ…Œ์ด๋„ˆ ์œ„์—์„œ ๋ณ€๊ฒฝ ์ž‘์—…์„ ํ•œ ๋‹ค์Œ์— ์ถ”๊ฐ€๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์„ ๋„์ปค๊ฐ€ ์•Œ์•„์„œ ๋ฐ˜๋ณต

docker build -t ์ด๋ฏธ์ง€๋ช… Dockerfile๊ฒฝ๋กœ : ๋„์ปคํŒŒ์ผ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๋นŒ๋“œ

# Dockerfile
FROM ์ด๋ฏธ์ง€๋ช… : ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€(์‹œ์ž‘์ )๋ฅผ ์ง€์ •
COPY ํŒŒ์ผ๊ฒฝ๋กœ ๋ณต์‚ฌํ• ๊ฒฝ๋กœ : ํŒŒ์ผ์„ ๋ ˆ์ด์–ด์— ๋ณต์‚ฌ
CMD ["๋ช…๋ น์–ด"] : ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ๋ช…๋ น์–ด ์ง€์ •

FROM nginx:1.23
COPY index.html /usr/share/nginx/html/index.html
CMD ["nginx", "-g", "daemon off;"]
# 1. ํ˜„์žฌ ๊ฒฝ๋กœ์—์„œ Dockerfile ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ  
docker build -t ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ณ„์ •๋ช…/buildnginx .

# 2. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ 
docker run -d -p 80:80 --name build-nginx ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ณ„์ •๋ช…/buildnginx

์ •๋ฆฌํ•˜๋ฉด ๋„์ปค๋Š” IaC ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ ์ด๋ฏธ์ง€๋ฅผ ๋„์ปค ํŒŒ์ผ์ด๋ผ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ด๋Š” ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ์ฝ”๋“œ์™€๋„ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ , ๋„์ปค ํŒŒ์ผ์—๋Š” ์ด๋ฏธ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์žˆ์–ด์„œ ๋„์ปค๊ฐ€ ์ด๋ฅผ ํ•ด์„ํ•ด์„œ ์ด๋ฏธ์ง€ ์ œ์ž‘ํ•œ๋‹ค.

์ปค๋ฐ‹์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•, ๋นŒ๋“œ๋Š” ๋„์ปค ๋ฐ๋ชฌ์ด ๋„์ปค ํŒŒ์ผ์— ์ ํžŒ ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•

ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์€ ๊ธฐ์กด ๋ ˆ์ด์–ด์— ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ์—, ์ปค๋ฐ‹ ์™„๋ฃŒํ•œ ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋งŒ๋“ค๊ณ  ๋‹ค์‹œ ์ปค๋ฐ‹์„ ํ•ด์•ผํ•˜์ง€๋งŒ, ๋„์ปคํŒŒ์ผ๋กœ ์ด ์ž‘์—…๋“ค์„ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

 

๋นŒ๋“œ ์ปจํ…์ŠคํŠธ

 

๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋ž€?

  • ๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ์— ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ Dockerfile์ด ํฌํ•จ๋œ ํด๋”
  • docker build ์‹คํ–‰ ์‹œ, ํ•ด๋‹น ํด๋” ์ „์ฒด๊ฐ€ Docker ๋ฐ๋ชฌ์— ์ „๋‹ฌ๋จ
  • ์ผ๋ฐ˜์ ์œผ๋กœ . (ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ์ง€์ •
docker build -t my-image .

โžก๏ธ ํ˜„์žฌ ํด๋”(.)๋ฅผ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋นŒ๋“œ

 

.dockerignore ํŒŒ์ผ์ด๋ž€?

  • ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์—์„œ ์ œ์™ธํ•  ํŒŒ์ผ ๋ฐ ํด๋”๋ฅผ ์ง€์ •
  • ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ œ์™ธํ•˜์—ฌ ๋นŒ๋“œ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ , ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ตœ์†Œํ™” ๊ฐ€๋Šฅ

 

๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ ์ ˆํžˆ ๊ด€๋ฆฌํ•˜๋Š” ์ด์œ 

  • โœ… ๋นŒ๋“œ ์†๋„ ์ตœ์ ํ™” → ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ œ์™ธํ•˜๋ฉด Docker ๋ฐ๋ชฌ์— ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ค„์–ด๋“ค์–ด ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋จ
  • โœ… ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ตœ์†Œํ™” → ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์ด ํฌํ•จ๋˜์ง€ ์•Š์•„ ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์–ด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ
  • โœ… ๋ณด์•ˆ ๊ฐ•ํ™” → .git, .env ๋“ฑ ๋ฏผ๊ฐํ•œ ํŒŒ์ผ์ด ์ด๋ฏธ์ง€์— ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€

 

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ

 

  • ์ •์˜: ๋„์ปค ํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ์™€ ์‹คํ–‰ ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•
  • ๋ชฉํ‘œ: ์ด๋ฏธ์ง€ ๋นŒ๋“œ์™€ ์‹คํ–‰์„ ๋ถ„๋ฆฌํ•˜์—ฌ, ๋ถˆํ•„์š”ํ•œ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์ตœ์ข… ์ด๋ฏธ์ง€์— ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ์ตœ์†Œํ™”๋œ ์‹คํ–‰ ํ™˜๊ฒฝ๋งŒ์„ ํฌํ•จํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
  • ์žฅ์ 
    • ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ตœ์ ํ™”: ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข… ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง
    • ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ์™ธ: ๋นŒ๋“œ ๋„๊ตฌ์™€ ํ™˜๊ฒฝ์ด ์ตœ์ข… ์ด๋ฏธ์ง€์—์„œ ์ œ์™ธ๋˜๋ฏ€๋กœ ๋ณด์•ˆ๊ณผ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋จ
    • ํšจ์œจ์ ์ธ ๋นŒ๋“œ: ๋นŒ๋“œ ํ™˜๊ฒฝ์€ ์ž„์‹œ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ํฌํ•จ๋˜๋ฏ€๋กœ ๋นŒ๋“œ์™€ ์‹คํ–‰์„ ๋ถ„๋ฆฌ

 

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ ๊ณผ์ •

  1. ๋นŒ๋“œ ์Šคํ…Œ์ด์ง€ (Build Stage)
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์ค€๋น„
  2. 2. ์‹คํ–‰ ์Šคํ…Œ์ด์ง€ (Run Stage)
    • ์‹ค์ œ ์‹คํ–‰์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋งŒ์„ ์ค€๋น„ํ•˜๊ณ  ๋นŒ๋“œ๋œ ํŒŒ์ผ์„ ์‹คํ–‰

 

๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ vs ์‹ฑ๊ธ€ ์Šคํ…Œ์ด์ง€

 

  • ์‹ฑ๊ธ€ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ
    • ํ•˜๋‚˜์˜ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ์™€ ์‹คํ–‰์„ ๋ชจ๋‘ ํฌํ•จ
    • ๋นŒ๋“œ ํ™˜๊ฒฝ๊ณผ ์‹คํ–‰ ํŒŒ์ผ์ด ๋ชจ๋‘ ํฌํ•จ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ
  •  ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ
    • ๋นŒ๋“œ ์Šคํ…Œ์ด์ง€์™€ ์‹คํ–‰ ์Šคํ…Œ์ด์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ตœ์ข… ์ด๋ฏธ์ง€์—์„œ ๋ถˆํ•„์š”ํ•œ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์ œ์™ธ
    • ์‹คํ–‰ ํŒŒ์ผ๋งŒ ํฌํ•จ๋œ ์ตœ์ ํ™”๋œ ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ