๐Ÿ“ฆ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ํ˜๋ช…, Docker ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ œ๋Œ€๋กœ ํŒŒํ—ค์ณ ๋ดค์–ด์š”!

๐Ÿ“ฆ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ํ˜๋ช…, Docker ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ œ๋Œ€๋กœ ํŒŒํ—ค์ณ ๋ดค์–ด์š”!

์•ˆ๋…•ํ•˜์„ธ์š”, ๋‚™์„œ์žฅ์ž…๋‹ˆ๋‹ค!

์š”์ฆ˜ ๊ฐœ๋ฐœ ๊ณต๋ถ€์— ํ•œ์ฐฝ ๋ถˆ์ด ๋ถ™์–ด์„œ ์ด๊ฒƒ์ €๊ฒƒ ํŒŒ๊ณ  ์žˆ๋Š”๋ฐ, 2026๋…„ ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ์—์„œ “Docker”๋ฅผ ๋นผ๋†“์„ ์ˆ˜ ์—†๋”๋ผ๊ณ ์š”. ์‚ฌ์‹ค ์˜ˆ์ „๋ถ€ํ„ฐ ์ด๋ฆ„์€ ๋งŽ์ด ๋“ค์—ˆ์ง€๋งŒ, ๋ง‰์ƒ ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•ด๋ณด๋ ค๋‹ˆ ๋ง‰๋ง‰ํ–ˆ๋˜ ๋ถ„๋“ค ๋งŽ์œผ์‹œ์ฃ ? ์ €๋„ ๊ทธ๋žฌ๊ฑฐ๋“ ์š”! ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ œ๋Œ€๋กœ ํŒŒ๊ณ ๋“ค๋ฉด์„œ ์ดˆ๋ณด์ž ๋ˆˆ๋†’์ด์— ๋งž์ถฐ ์ •๋ฆฌํ•ด๋ดค์–ด์š”. “๋‚ด ์ปดํ“จํ„ฐ์—์„  ์ž˜ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์™œ ์„œ๋ฒ„์—์„  ์•ˆ ๋ ๊นŒ?” ์ด๋Ÿฐ ๊ฒฝํ—˜ ์žˆ์œผ์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์˜ค๋Š˜ ํฌ์ŠคํŒ…์ด ์•„์ฃผ ์œ ์šฉํ•  ๊ฒ๋‹ˆ๋‹ค!

๐Ÿค” ๋„๋Œ€์ฒด Docker๊ฐ€ ๋ญ”๋ฐ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ• ๊นŒ์š”?

Docker๋ฅผ ํ•œ๋งˆ๋””๋กœ ์ •์˜ํ•˜์ž๋ฉด “์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ณ  ์ผ๊ด€๋˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ”๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ข€ ๋” ์‰ฝ๊ฒŒ ๋น„์œ ๋ฅผ ๋“ค์–ด๋ณผ๊ฒŒ์š”.

ํ˜น์‹œ ์˜ˆ์ „์— ์ปดํ“จํ„ฐ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” “๊ฐ€์ƒ ๋จธ์‹ (Virtual Machine, VM)”์„ ์จ๋ณด์‹  ์  ์žˆ๋‚˜์š”? VM์€ ๋งˆ์น˜ ‘ํ•œ ์•„ํŒŒํŠธ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ์•„ํŒŒํŠธ’๋ฅผ ํ†ต์งธ๋กœ ์ง“๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ์šด์˜์ฒด์ œ(Windows, Linux ๋“ฑ)๊นŒ์ง€ ์ „๋ถ€ ๋‹ค ํฌํ•จํ•ด์„œ ํ•˜๋‚˜๋ฅผ ๋” ๋งŒ๋“œ๋Š” ๊ฑฐ์ฃ . ๋…๋ฆฝ์ ์ด๊ณ  ์™„๋ฒฝํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๊ทธ๋งŒํผ ๋ฌด๊ฒ๊ณ  ์ž์›์„ ๋งŽ์ด ์žก์•„๋จน์–ด์š”. ๋ถ€ํŒ… ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ ์š”.

๋ฐ˜๋ฉด์— Docker๋Š” “์ปจํ…Œ์ด๋„ˆ(Container)”๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ด์š”. ์ปจํ…Œ์ด๋„ˆ๋Š” ๋งˆ์น˜ ‘์•„ํŒŒํŠธ ์•ˆ์— ๊ฐ์ž์˜ ๋ฐฉ’์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ด์š”. ๊ฐ ๋ฐฉ์€ ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์ด์ง€๋งŒ, ์•„ํŒŒํŠธ์˜ ๊ณต์šฉ ์‹œ์„ค(์šด์˜์ฒด์ œ์˜ ์ปค๋„)์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ฃ . ๊ทธ๋ž˜์„œ VM๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ, ํ•„์š”ํ•œ ์ž์›๋งŒ ๋”ฑ! ์‚ฌ์šฉํ•ด์š”. ๋งˆ์น˜ ๊ตญ์ œ ํ‘œ์ค€ ๊ทœ๊ฒฉ์˜ “๋ฐฐ์†ก ์ปจํ…Œ์ด๋„ˆ”์ฒ˜๋Ÿผ, ์–ด๋–ค ๋ฌผ๊ฑด(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์„ ๋„ฃ์–ด๋„ ๋”ฑ ๋งž๋Š” ๊ทœ๊ฒฉ์œผ๋กœ ํฌ์žฅํ•ด์„œ ์–ด๋””๋“  ์‰ฝ๊ฒŒ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฑฐ์˜ˆ์š”. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋“ , ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด๋“ , ์‹ค์ œ ์„œ๋น„์Šค ํ™˜๊ฒฝ์ด๋“  ๋˜‘๊ฐ™์ด ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ๋„๊ตฌ์ธ ๊ฑฐ์ฃ !

โœจ Docker์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋“ค, ์ด๊ฒƒ๋งŒ ์•Œ๋ฉด ๋ฉ๋‹ˆ๋‹ค!

Docker๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ํ•ต์‹ฌ ์šฉ์–ด๋“ค์„ ์•Œ์•„์•ผ ํ•ด์š”. ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š” ์—†์ด, ๋”ฑ ์„ธ ๊ฐ€์ง€๋งŒ ๊ธฐ์–ตํ•ด๋‘์„ธ์š”!

1. Docker Image (๋„์ปค ์ด๋ฏธ์ง€): ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒญ์‚ฌ์ง„

์ด๋ฏธ์ง€(Image)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ(์ฝ”๋“œ, ๋Ÿฐํƒ€์ž„, ์‹œ์Šคํ…œ ๋„๊ตฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ)์„ ๋‹ด๊ณ  ์žˆ๋Š” “์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ”์ด์—์š”. ๋น„์œ ํ•˜์ž๋ฉด, ๋ถ•์–ด๋นต์„ ๋งŒ๋“œ๋Š” “ํ‹€”์ด๋‚˜ ๊ณผ์ž๋ฅผ ๋งŒ๋“œ๋Š” “๋ ˆ์‹œํ”ผ”๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์›Œ์š”. ์ด ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ๋˜‘๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ช‡ ๊ฐœ๋“  ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์ฃ .

2. Docker Container (๋„์ปค ์ปจํ…Œ์ด๋„ˆ): ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค

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

3. Dockerfile (๋„์ปคํŒŒ์ผ): ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ ˆ์‹œํ”ผ

Dockerfile์€ “๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ ์–ด๋†“์€ ํ…์ŠคํŠธ ํŒŒ์ผ”์ด์—์š”. ์–ด๋–ค ์šด์˜์ฒด์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ• ์ง€, ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ• ์ง€, ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ• ์ง€ ๋“ฑ์„ ํ•œ ์ค„ ํ•œ ์ค„ ๋ช…๋ น์–ด๋กœ ์ž‘์„ฑํ•˜์ฃ . ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

+ Docker Hub (๋„์ปค ํ—ˆ๋ธŒ): ์ด๋ฏธ์ง€ ๊ณต์œ  ํ”Œ๋žซํผ

Docker Hub๋Š” ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“  ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” “ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ”์˜ˆ์š”. ๋งˆ์น˜ ์•ฑ์Šคํ† ์–ด๋‚˜ ๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์ฒ˜๋Ÿผ, ํ•„์š”ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ฐ”๋กœ ๋‹ค์šด๋กœ๋“œ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์ด๋ฏธ์ง€๋“ค๋„ ๋งŽ์•„์„œ ์•„์ฃผ ํŽธ๋ฆฌํ•ด์š”!

๐Ÿš€ ์™œ Docker๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”? (feat. 2026๋…„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ)

2026๋…„ ํ˜„์žฌ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ Docker๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ํ•„์ˆ˜์— ๊ฐ€๊น๋‹ค๊ณ  ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ์—์š”. ๊ทธ๋งŒํผ ์žฅ์ ์ด ๋งŽ๋‹ค๋Š” ์–˜๊ธฐ๊ฒ ์ฃ ?

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

๐Ÿ› ๏ธ Docker, ์ง์ ‘ ํ•œ๋ฒˆ ์จ๋ณผ๊นŒ์š”? (๊ธฐ๋ณธ ๋ช…๋ น์–ด)

๋ง๋กœ๋งŒ ๋“ค์œผ๋ฉด ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด ๋ช‡ ๊ฐœ๋กœ ์ง์ ‘ Docker๋ฅผ ๊ฒฝํ—˜ํ•ด๋ด…์‹œ๋‹ค! (์ฐธ๊ณ : Docker Desktop์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ง„ํ–‰ํ• ๊ฒŒ์š”!)

1. Nginx ์›น ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ์˜ˆ์ œ ์ค‘ ํ•˜๋‚˜์ฃ . ์›น ์„œ๋ฒ„์ธ Nginx๋ฅผ Docker ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐ”๋กœ ์‹คํ–‰ํ•ด๋ณผ๊ฒŒ์š”. ๋‹จ ํ•œ ์ค„์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค!

docker run -d -p 80:80 --name my-nginx nginx
  • docker run: ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•˜๋ผ๋Š” ๋ช…๋ น์–ด์˜ˆ์š”.
  • -d: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ(detached)๋กœ ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
  • -p 80:80: ํ˜ธ์ŠคํŠธ(๋‚ด ์ปดํ“จํ„ฐ)์˜ 80๋ฒˆ ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ 80๋ฒˆ ํฌํŠธ์™€ ์—ฐ๊ฒฐํ•˜๋ผ๋Š” ๋œป์ด์—์š”. (ํฌํŠธ ํฌ์›Œ๋”ฉ)
  • --name my-nginx: ์ปจํ…Œ์ด๋„ˆ์— ‘my-nginx’๋ผ๋Š” ์ด๋ฆ„์„ ๋ถ™์—ฌ์ฃผ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
  • nginx: ์‹คํ–‰ํ•  ์ด๋ฏธ์ง€ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Docker Hub์—์„œ Nginx ์ด๋ฏธ์ง€๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋ฐ›์•„ ์‹คํ–‰ํ•ด์š”.

์ด์ œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  http://localhost ๋˜๋Š” http://127.0.0.1๋กœ ์ ‘์†ํ•ด๋ณด์„ธ์š”. “Welcome to nginx!” ํŽ˜์ด์ง€๊ฐ€ ๋ณด์ธ๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค!

2. ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธํ•˜๊ธฐ

์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด์˜ˆ์š”.

docker ps

๋ฐฉ๊ธˆ ์‹คํ–‰ํ•œ my-nginx ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ณด์ผ ๊ฑฐ์˜ˆ์š”.

3. ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ํ•˜๊ธฐ

์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ด์š”. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„(my-nginx)์ด๋‚˜ ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

docker stop my-nginx

4. ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œํ•˜๊ธฐ

์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๋ ค๋ฉด ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์š”. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์‚ฌ๋ผ์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๊ฑฐ๋“ ์š”.

docker rm my-nginx

๋งŒ์•ฝ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ•์ œ๋กœ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด -f ์˜ต์…˜์„ ๋ถ™์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” stop ํ›„ rm ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

5. ๋‹ค์šด๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ ํ™•์ธํ•˜๊ธฐ

๋‚ด ์ปดํ“จํ„ฐ์— ์–ด๋–ค Docker ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด์˜ˆ์š”.

docker images

nginx ์ด๋ฏธ์ง€๊ฐ€ ๋ณด์ผ ๊ฑฐ์˜ˆ์š”.

๐Ÿ“ ๋‚˜๋งŒ์˜ Docker Image ๋งŒ๋“ค๊ธฐ (Dockerfile ์˜ˆ์ œ)

์ด๋ฒˆ์—” ๊ฐ„๋‹จํ•œ Node.js ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Dockerfile๋กœ ๋งŒ๋“ค๊ณ , ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œํ•œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•ด๋ณผ๊ฒŒ์š”.

๋จผ์ €, ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— app.js์™€ Dockerfile ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

1. app.js (๊ฐ„๋‹จํ•œ Node.js ์›น ์„œ๋ฒ„)

// app.js
const http = require('http');

const hostname = '0.0.0.0'; // ์™ธ๋ถ€์—์„œ ์ ‘์† ๊ฐ€๋Šฅํ•˜๋„๋ก
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('์•ˆ๋…•ํ•˜์„ธ์š”, ๋‚™์„œ์žฅ์ž…๋‹ˆ๋‹ค! Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ธ์‚ฌ๋“œ๋ ค์š”!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

2. Dockerfile (์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ ˆ์‹œํ”ผ)

# Dockerfile
# Node.js 20 ๋ฒ„์ „์˜ ๊ณต์‹ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ
FROM node:20-alpine

# ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ž‘์—…ํ•  ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ(.js, .json ๋“ฑ)์„ ์ปจํ…Œ์ด๋„ˆ์˜ /app ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ
COPY . .

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•  ํฌํŠธ ๋ช…์‹œ (์‹ค์ œ ๋…ธ์ถœ์€ docker run์—์„œ)
EXPOSE 3000

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ช…๋ น์–ด
CMD ["node", "app.js"]

3. ์ด๋ฏธ์ง€ ๋นŒ๋“œํ•˜๊ธฐ

Dockerfile๊ณผ app.js ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.

docker build -t my-nodejs-app:1.0 .
  • docker build: ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ช…๋ น์–ด์˜ˆ์š”.
  • -t my-nodejs-app:1.0: ๋นŒ๋“œ๋  ์ด๋ฏธ์ง€์— my-nodejs-app์ด๋ผ๋Š” ์ด๋ฆ„๊ณผ 1.0์ด๋ผ๋Š” ํƒœ๊ทธ(๋ฒ„์ „)๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
  • .: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” Dockerfile์„ ์‚ฌ์šฉํ•˜๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด docker images ๋ช…๋ น์–ด๋กœ my-nodejs-app ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

4. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

์ด์ œ ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด๋ด…์‹œ๋‹ค!

docker run -d -p 8080:3000 --name node-server my-nodejs-app:1.0
  • -p 8080:3000: ํ˜ธ์ŠคํŠธ์˜ 8080๋ฒˆ ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ 3000๋ฒˆ ํฌํŠธ์™€ ์—ฐ๊ฒฐํ–ˆ์–ด์š”.

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080์œผ๋กœ ์ ‘์†ํ•ด๋ณด์„ธ์š”. “์•ˆ๋…•ํ•˜์„ธ์š”, ๋‚™์„œ์žฅ์ž…๋‹ˆ๋‹ค! Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ธ์‚ฌ๋“œ๋ ค์š”!” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ธ๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค!

โœ… ํ•ต์‹ฌ ํฌ์ธํŠธ ์š”์•ฝ!

  • Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๊ฐ€๋ณ๊ณ  ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ์˜ˆ์š”.
  • Image๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฒญ์‚ฌ์ง„(๋ ˆ์‹œํ”ผ), Container๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์‹ค์ œ ์ธ์Šคํ„ด์Šค(๋งŒ๋“ค์–ด์ง„ ๋ถ•์–ด๋นต)์ž…๋‹ˆ๋‹ค.
  • Dockerfile์€ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ์ด์—์š”.
  • Docker Hub๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
  • Docker๋Š” ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ, ๋ฐฐํฌ ์šฉ์ด์„ฑ, ํšจ์œจ์ ์ธ ์ž์› ์‚ฌ์šฉ ๋“ฑ ๋งŽ์€ ์žฅ์ ์„ ์ œ๊ณตํ•ด์š”.
  • ๊ธฐ๋ณธ ๋ช…๋ น์–ด: docker run (์‹คํ–‰), docker ps (ํ™•์ธ), docker stop (์ค‘์ง€), docker rm (์‚ญ์ œ), docker images (์ด๋ฏธ์ง€ ํ™•์ธ)

๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ ๐Ÿ‘‹

์˜ค๋Š˜์€ Docker์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๊ณผ ์™œ ์ค‘์š”ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•๊นŒ์ง€ ์•Œ์•„๋ดค์–ด์š”. ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ๋Š” ์กฐ๊ธˆ ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ผ๋‹จ ๋ช‡ ๋ฒˆ ๋”ฐ๋ผ ํ•ด๋ณด๋ฉด ์ •๋ง ํŽธ๋ฆฌํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ผ๋Š” ๊ฑธ ๋ฐ”๋กœ ๋А๋ผ์‹ค ๊ฑฐ์˜ˆ์š”. 2026๋…„ ๊ฐœ๋ฐœ์ž๋กœ ์‚ด์•„๋‚จ์œผ๋ ค๋ฉด Docker๋Š” ์ด์ œ ํ•„์ˆ˜ ์Šคํ‚ฌ์ด๋‹ˆ๊นŒ, ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ ๊ผญ ๋ณต์Šตํ•ด๋ณด์‹œ๊ณ  ์ง์ ‘ ์ด๊ฒƒ์ €๊ฒƒ ์‹คํ–‰ํ•ด๋ณด๋Š” ๊ฑธ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค!

๋‹ค์Œ๋ฒˆ์—๋Š” Docker Compose๋‚˜ Kubernetes ๊ฐ™์€ ๋” ์‹ฌํ™”๋œ ๋‚ด์šฉ์œผ๋กœ ์ฐพ์•„์˜ฌ ์ˆ˜๋„ ์žˆ๊ฒ ๋„ค์š”. ๊ทธ๋•Œ๊นŒ์ง€ ๋‹ค๋“ค ์ฆ๊ฑฐ์šด ์ฝ”๋”ฉ ์ƒํ™œ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค!

์ด์ƒ, ๋‚™์„œ์žฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค!

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ