Skip to content

๐Ÿ“ฆDocker์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๋…ธํ˜„์ง„ edited this page Nov 9, 2024 · 1 revision

๋ชฉ์ฐจ


๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Docker์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


Docker๋ž€?

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


Docker์˜ ์ฃผ์š” ๊ฐœ๋…

Docker์˜ ์ฃผ์š” ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฏธ์ง€(Image)

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ทธ ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์„ค์ •, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ฝ”๋“œ ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ์ผ์ข…์˜ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋Š” ๋ถˆ๋ณ€(Immutable)ํ•˜์—ฌ ์ˆ˜์ •๋˜์ง€ ์•Š์œผ๋ฉฐ, Dockerfile์ด๋ผ๋Š” ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ(Container)

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

  • Dockerfile

    ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ๋กœ, ํŠน์ • ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ผ๊ด€๋œ ํ™˜๊ฒฝ์„ ์ž๋™์œผ๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Docker Hub

    Docker ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” Registry๋กœ, ๊ณต์‹ ์ด๋ฏธ์ง€๋‚˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“ค์–ด ๊ณต์œ ํ•œ ์ด๋ฏธ์ง€๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด docker pull node ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Node.js ๊ณต์‹ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Docker์˜ ์žฅ์ 

Docker์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ผ๊ด€์„ฑ

    ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜์—ฌ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋น ๋ฅธ ๋ฐฐํฌ์™€ ํ™•์žฅ์„ฑ

    ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ํ™•์žฅํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ DevOps์™€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฝ๋Ÿ‰์„ฑ

    ์šด์˜ ์ฒด์ œ ์ „์ฒด๋ฅผ ๊ฐ€์ƒํ™”ํ•˜๋Š” VM(Virtual Machine, ๊ฐ€์ƒ ๋จธ์‹ )๊ณผ ๋‹ค๋ฅด๊ฒŒ, Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•„์š”ํ•œ ์ข…์†์„ฑ๋งŒ์„ ํฌํ•จํ•˜๋Š” ๊ฐ€๋ฒผ์šด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ VM๋ณด๋‹ค ๊ฐ€๋ณ๊ณ , ์ž์›์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์œ ์—ฐ์„ฑ

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


Docker Compose๋ž€?

Docker Compose๋Š” ์—ฌ๋Ÿฌ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ณ  ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์„ YAML ํŒŒ์ผ๋กœ ์ •์˜ํ•˜๊ณ , ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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


Docker Compose์˜ ์ฃผ์š” ๊ฐœ๋…

Docker Compose์˜ ์ฃผ์š” ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค(Services)

    ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ(Networks)

    ์„œ๋น„์Šค๋“ค๊ฐ„์˜ ํ†ต์‹ ์„ ์ •์˜ํ•˜๋Š” ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ช…์‹œ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์„œ๋กœ ์‰ฝ๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ณผ๋ฅจ(Volumns)

    ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ๊ณผ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๊ณต์œ ํ•˜๋Š” ๊ณต๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์„ ์„ค์ •ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘์ง€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.


Step 1 - Docker ์„ค์น˜ํ•˜๊ธฐ

๋จผ์ € ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

curl -fsSL https://get.docker.com | sh

Docker๊ฐ€ ์ž˜ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ๋‹ค์Œ ๋ช…๋ ์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ Docker ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

docker -v
sudo systemctl status docker

pic1

pic2


Step 2 - Docker ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ํ•˜๊ธฐ

Docker ๋ช…๋ น์–ด๋Š” ํ•ญ์ƒ root ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜ ๊ณ„์ •์—์„œ Docker ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ํ•ญ์ƒ sudo๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  Docker ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ๊ณ„์ •์„ Docker ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

sudo usermod -aG docker $USER

์ดํ›„ Docker ๊ทธ๋ฃน ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ์„ ์žฌ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค.

sudo reboot now

์žฌ๋ถ€ํŒ… ์ดํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker ๊ทธ๋ฃน์— ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

groups $USER

pic3


Step 3 - Docker Compose ์„ค์น˜ํ•˜๊ธฐ

์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ƒ์„ฑํ•˜๊ธฐ

๋จผ์ € /usr/local/bin/docker-compose๊ฐ€ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์—†๋Š” ๊ฒฝ์šฐ /usr/local/bin ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Docker Compose ์„ค์น˜ํ•˜๊ธฐ

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker Compose๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

sudo curl -SL "https://github.com/docker/compose/releases/download/latest/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

์ดํ›„ Docker Compose ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์— ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

sudo chmod +x /usr/local/bin/docker-compose

Docker Compose๊ฐ€ ์ž˜ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ๋‹ค์Œ ๋ช…๋ ์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ Docker Compose ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

docker compose --version

Step 4 - Docker ๋ช…๋ น์–ด ์‚ฌ์šฉํ•˜๊ธฐ

์•„๋ž˜์˜ ๋ช…๋ น์–ด๋Š” ๋ชจ๋‘ Step 2 - Docker ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ํ•˜๊ธฐ ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค๊ณ  ๊ฐ€์ •ํ•œ ์ƒํƒœ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰ - docker search

docker search ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker Hub์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋Š” node ๊ด€๋ จ ์ด๋ฏธ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

docker search node

pic4


์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ - docker pull

docker pull [์ด๋ฏธ์ง€ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker Hub์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋Š” node.js ๊ณต์‹ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ๋ฐ›๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

docker pull node

์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ™•์ธ - docker images

docker images ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ์ปฌ์— ์ €์žฅ๋œ ๋ชจ๋“  ์ด๋ฏธ์ง€ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker images

pic5


์ด๋ฏธ์ง€ ์‚ญ์ œ - docker rmi

docker rmi [์ด๋ฏธ์ง€ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํŠน์ • ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker rmi node

์ด๋ฏธ์ง€ ๋นŒ๋“œ - docker build

docker build -t [์ด๋ฏธ์ง€ ์ด๋ฆ„] . ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Dockerfile์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋Š” ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” Dockerfile๋กœ my-app์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ตœ์‹  ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง„ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

docker build -t my-app:latest .

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ - docker run

docker run [์˜ต์…˜] [์ด๋ฏธ์ง€ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํŠน์ • ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋Š” openvidu/openviud-dev:2.30.0 ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

docker run -p 4443:4443 --rm -e OPENVIDU_SECRET=MY_SECRET openvidu/openvidu-dev:2.30.0

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ ์„ค๋ช…
-d ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. (Detached ๋ชจ๋“œ)
-p [ํ˜ธ์ŠคํŠธ ํฌํŠธ]:[์ปจํ…Œ์ด๋„ˆ ํฌํŠธ] ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
--rm ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๋„๋ก ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
--restart always ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
--restart unless-stopped ์ˆ˜๋™์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
--name ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
-e [ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ด๋ฆ„]:[ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ฐ’] ์ปจํ…Œ์ด๋„ˆ์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
-v [ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ]:[์ปจํ…Œ์ด๋„ˆ ๋””๋ ‰ํ† ๋ฆฌ] ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. (๋ณผ๋ฅจ)

์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ํ™•์ธ - docker ps

docker ps ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -a ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •์ง€๋œ ์ปจํ…Œ์ด๋„ˆ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker ps

์ปจํ…Œ์ด๋„ˆ ์ •์ง€ - docker stop

docker stop [์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์‹คํ–‰ ์ค‘์ธ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker stop my-app:latest

๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

docker stop $(docker ps -a -q)

์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ - docker restart

docker restart [์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ •์ง€๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker restart my-app

์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ - docker rm

docker rm [์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ •์ง€๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker rm my-app

๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

docker rm $(docker ps -a -q)

์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํ™•์ธ - docker logs

docker logs [์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker logs my-app

Step 4 - Docker Compose ๋ช…๋ น์–ด ์‚ฌ์šฉํ•˜๊ธฐ

Compose ์‹คํ–‰ - docker compose up

docker compose up [์˜ต์…˜] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” docker-compose.yml ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker compose up

๋งŒ์•ฝ ํŠน์ • ์„œ๋น„์Šค๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด docker compose [์„œ๋น„์Šค ์ด๋ฆ„] ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

docker compose up my-service

Compose ํ™•์ธ - docker compose ps

docker compose ps ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker compose ps

Compose ์ข…๋ฃŒ - docker compose down

docker compose down ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  Compose ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ , ๋„คํŠธ์›Œํฌ๋‚˜ ๋ณผ๋ฅจ ๋“ฑ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker compose down

Compose ๋กœ๊ทธ ํ™•์ธ - docker compose logs

docker compose logs ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Compose๋กœ ์‹คํ–‰๋œ ์„œ๋น„์Šค๋“ค์˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker compose logs

Step 5 - Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œํ•˜๊ธฐ

Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € Dockerfile์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ œ๊ฐ€ ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ธฐ์ค€์œผ๋กœ Docker ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


.dockerignore ์ƒ์„ฑํ•˜๊ธฐ

.dockerignore ํŒŒ์ผ์€ Docker๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ณต์‚ฌํ•˜์ง€ ๋ง์•„์•ผ ํ•  ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ Docker Context ๋‚ด์— ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์ด ๋นŒ๋“œ ์ด๋ฏธ์ง€์— ํฌํ•จ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ, ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ด๊ณ  ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Dockerfile์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ ์ตœ์ƒ๋‹จ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ .dockerignore ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

# Node.js ํ™˜๊ฒฝ
node_modules

# Git ๊ด€๋ จ ํŒŒ์ผ
.git
.gitignore

# ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ
.env

# Next.js ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ
.next

์œ„์˜ ๋‚ด์šฉ์„ ์„ค๋ช…ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • node_modules

    Node.js์˜ ์˜์กด์„ฑ ํŒŒ์ผ์ด ์ €์žฅ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ, ๋ณดํ†ต ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  • .git๊ณผ .gitignore

    Git ๊ด€๋ จ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ํฌํ•จํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  • .env

    ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด๋Š” ๋ณดํ†ต ๋ณด์•ˆ ์ƒ์˜ ์ด์œ ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์— ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ

    ๋นŒ๋“œ ํ›„ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์ด ์ €์žฅ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ, ๋ณดํ†ต ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋นŒ๋“œ ๊ณผ์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

.dockerignore ํŒŒ์ผ์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์†๋„ ํ–ฅ์ƒ

    ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ œ์™ธํ•จ์œผ๋กœ์จ Docker ๋นŒ๋“œ Context ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ ธ ๋นŒ๋“œ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”

    ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ œ์™ธํ•จ์œผ๋กœ์จ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ณด์•ˆ ๊ฐ•ํ™”

    ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ์„ ์ด๋ฏธ์ง€์—์„œ ์ œ์™ธํ•จ์œผ๋กœ์จ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Dockerfile ์ž‘์„ฑํ•˜๊ธฐ

Docker ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € Dockerfile์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. VSCode์—์„œ Dockerfile์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด VSCode์—์„œ Docker extensions๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

pic6

์ดํ›„ ํ”„๋กœ์ ํŠธ ์ตœ์ƒ๋‹จ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ Dockerfile ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” Dockerfile ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

# 1. ๋นŒ๋“œ ๋‹จ๊ณ„
# ์ƒ์„ฑํ•  Docker ์ด๋ฏธ์ง€์˜ ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
FROM node:20-alpine AS build

# 1-1. ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•  ๊ธฐ๋ณธ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
# /app ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์ดํ›„์˜ ๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ ์ด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
WORKDIR /app

# 1-2. ์˜์กด์„ฑ ํŒŒ์ผ ๋ณต์‚ฌ
COPY package.json package-lock.json ./

# 1-3. ์˜์กด์„ฑ ์„ค์น˜
# ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
RUN npm install --force

# 1-4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ณต์‚ฌ
# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ /app ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
COPY . .

# 1-5. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
ENV NEXT_PUBLIC_BACKEND_URL=https://mafiacamp.p-e.kr

# 1-6. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ
RUN npm run build

# 2. ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„
FROM node:20-alpine

# 2-1. ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋ณต์‚ฌ
WORKDIR /app
COPY --from=build /app/.next ./.next
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/public ./public

# 2-2. ํฌํŠธ ์„ค์ •
# ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, ํ˜ธ์ŠคํŠธ์™€ ํ†ต์‹ ํ•  ํฌํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
EXPOSE 3000

# 2-3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
# ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰ํ•  ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
# CMD๋Š” Dockerfile์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
CMD [ "npm", "run", "start" ]

Dockerfile์„ ์ž‘์„ฑํ•œ ํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

docker build -t mafiacamp-fe .

๊ฐ ๋‹จ๊ณ„๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


1. ๋นŒ๋“œ ๋‹จ๊ณ„

# 1. ๋นŒ๋“œ ๋‹จ๊ณ„
# ์ƒ์„ฑํ•  Docker ์ด๋ฏธ์ง€์˜ ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
FROM node:20-alpine AS build

๋จผ์ € Docker์˜ ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด AS build๋กœ ์ด ์ด๋ฏธ์ง€ ๋‹จ๊ณ„๋ฅผ build๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ณ„์นญ์„ ์ง€์ •ํ•˜๊ณ , ๋‚˜์ค‘์— ๋‹ค๋ฅธ ๋‹จ๊ณ„์—์„œ ์ด ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋ž€ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์—์„œ ๋นŒ๋“œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ , ์ตœ์ข… ์ด๋ฏธ์ง€์—๋Š” ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ํฌํ•จํ•˜์—ฌ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ํŒŒ์ผ๋งŒ ์ตœ์ข… ํ”„๋กœ๋•์…˜ ์ด๋ฏธ์ง€์— ํฌํ•จํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์™ธํ•˜์—ฌ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ FROM ๋ช…๋ น์–ด๋Š” ์ƒ์„ฑํ•  Docker ์ด๋ฏธ์ง€์˜ ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Node.js ์ƒ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ node.js 20 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด node:20-alpine ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋ฒผ์šด Node.js ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

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


1-1. ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •

# 1-1. ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•  ๊ธฐ๋ณธ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
# /app ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์ดํ›„์˜ ๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ ์ด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
WORKDIR /app

WORKDIR๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•  ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.


1-2. ์˜์กด์„ฑ ํŒŒ์ผ ๋ณต์‚ฌ

# 1-2. ์˜์กด์„ฑ ํŒŒ์ผ ๋ณต์‚ฌ
COPY package.json package-lock.json ./

COPY๋Š” COPY [source] [dest] ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ์ด๋‚˜ ํด๋”๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” package.json๊ณผ package-lock.json ํŒŒ์ผ์„ ๋จผ์ € ๋ณต์‚ฌํ•˜์—ฌ ์˜์กด์„ฑ ์„ค์น˜ ์ค€๋น„๋ฅผ ๋งˆ์นฉ๋‹ˆ๋‹ค.


1-3. ์˜์กด์„ฑ ์„ค์น˜

# 1-3. ์˜์กด์„ฑ ์„ค์น˜
# ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
RUN npm install --force

RUN์€ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” npm install ๋ช…๋ น์–ด๋กœ package.json์— ์ง€์ •๋œ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ --force ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” Next.js v15.0.2๋ฅผ ๊ธฐ์ค€์œผ๋กœ React 19 RC๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜๊ฐ€ ์•ˆ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๊ฒฝ์šฐ --force ์˜ต์…˜์„ ์ œ์™ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


1-4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ณต์‚ฌ

# 1-4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ณต์‚ฌ
# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ /app ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
COPY . .

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.


1-5. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

# 1-5. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
ENV NEXT_PUBLIC_BACKEND_URL=https://mafiacamp.p-e.kr

ENV๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์ƒ์„ฑํ•œ .dockerignore ํŒŒ์ผ์—๋Š” .env ํŒŒ์ผ์„ ์ œ์™ธํ•˜๋„๋ก ์„ค์ •ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ์ „์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


1-6. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ

# 1-6. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ
RUN npm run build

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.


2. ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„

# 2. ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„
FROM node:20-alpine

๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ๋ถˆํ•„์š”ํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ์ด๋ฏธ์ง€์— ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด node:20-alpine ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Ÿฐํƒ€์ž„ ๋‹จ๊ณ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.


2-1. ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋ณต์‚ฌ

# 2-1. ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋ณต์‚ฌ
WORKDIR /app
COPY --from=build /app/.next ./.next
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/public ./public

--from=build๋ผ๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ build ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์ผ ์ค‘์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค๋งŒ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.


2-2. ํฌํŠธ ์„ค์ •

# 2-2. ํฌํŠธ ์„ค์ •
# ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, ํ˜ธ์ŠคํŠธ์™€ ํ†ต์‹ ํ•  ํฌํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
EXPOSE 3000

EXPOSE๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, ํ˜ธ์ŠคํŠธ์™€ ํ†ต์‹ ํ•  ํฌํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” 3000 ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.


2-3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

# 2-3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
# ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰ํ•  ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
# CMD๋Š” Dockerfile์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
CMD [ "npm", "run", "start" ]

CMD๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. CMD๋Š” ํ•˜๋‚˜์˜ Dockerfile ์•ˆ์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” npm run start ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


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

Dockerfile์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

docker build -t mafiacamp-fe .

์•„๋ž˜ ๊ฒฐ๊ณผ๋Š” ์œ„์˜ Dockerfile์„ ๊ธฐ๋ฐ˜์œผ๋กœ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ ๊ฒฐ๊ณผ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

PS C:\Users\user\๋ฌธ์„œ\vscode\web12-MafiaCamp\FE> docker build -t mafiacamp-fe .
[+] Building 140.9s (15/15) FINISHED                                                                                           docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                           0.0s
 => => transferring dockerfile: 1.93kB                                                                                                         0.0s
 => [internal] load metadata for docker.io/library/node:20-alpine                                                                              1.8s
 => [internal] load .dockerignore                                                                                                              0.0s
 => => transferring context: 174B                                                                                                              0.0s
 => [build 1/6] FROM docker.io/library/node:20-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9                  0.0s
 => => resolve docker.io/library/node:20-alpine@sha256:c13b26e7e602ef2f1074aef304ce6e9b7dd284c419b35d89fcf3cc8e44a8def9                        0.0s
 => [internal] load build context                                                                                                              0.0s
 => => transferring context: 6.29kB                                                                                                            0.0s
 => CACHED [build 2/6] WORKDIR /app                                                                                                            0.0s
 => CACHED [build 3/6] COPY package.json package-lock.json ./                                                                                  0.0s
 => CACHED [build 4/6] RUN npm install --force                                                                                                 0.0s
 => [build 5/6] COPY . .                                                                                                                       0.2s
 => [build 6/6] RUN npm run build                                                                                                             77.1s
 => [stage-1 3/6] COPY --from=build /app/.next ./.next                                                                                         1.2s
 => [stage-1 4/6] COPY --from=build /app/node_modules ./node_modules                                                                           4.5s
 => [stage-1 5/6] COPY --from=build /app/package.json ./package.json                                                                           0.2s
 => [stage-1 6/6] COPY --from=build /app/public ./public                                                                                       0.1s
 => exporting to image                                                                                                                        45.0s
 => => exporting layers                                                                                                                       33.8s
 => => exporting manifest sha256:1cbf4b5bee24744bfe02047906dab35edfd26e2d7e859d2d48126d5976948c26                                              0.0s
 => => exporting config sha256:d667149ae2af3795ca5b414568d640435664cb894727eb73af12f28b220ae24e                                                0.0s
 => => exporting attestation manifest sha256:a445a77eb5e50e332d06b5145d3437746bcb35a2f7f3596b9b277c089bab4dad                                  0.0s
 => => exporting manifest list sha256:d3e238644af5f4a6d2a27b9fc4051e83d1fb8f133120608debaebc30f9f8c0a2                                         0.0s
 => => naming to docker.io/library/mafiacamp-fe:latest                                                                                         0.0s
 => => unpacking to docker.io/library/mafiacamp-fe:latest                                                                                     11.0s

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

Docker ์ด๋ฏธ์ง€๊ฐ€ ๋นŒ๋“œ๋œ ํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

docker run -p 3000:3000 --rm mafiacamp-fe

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pic7


์ฐธ๊ณ  ์ž๋ฃŒ

MafiaCamp

๐Ÿ“”์†Œ๊ฐœ
๐ŸŽฏํ”„๋กœ์ ํŠธ ๊ทœ์น™
๐Ÿ’ปํ”„๋กœ์ ํŠธ ๊ธฐํš
๐Ÿ€๊ธฐ์ˆ  ์Šคํƒ
๐Ÿ“š๊ทธ๋ฃน ํšŒ๊ณ 
๐ŸŒˆ๊ฐœ๋ฐœ ์ผ์ง€
๐Ÿ€๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฒฝํ—˜
๐Ÿ”งํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…
Clone this wiki locally