๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

turborepo + pnpm ํ™˜๊ฒฝ์„ ๋„์ปค ์„ค์ •์„ ์ˆ˜์ •ํ•˜๋‹ค๊ฐ€ ํฅ๋ฏธ๋กœ์šด ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚ฌ๋‹ค.

ERROR: failed to solve: cannot copy to non-directory: 
/var/lib/docker/overlay2/.../app/apps/chat/node_modules/typescript

node_modules ๊ด€๋ จ ์ถฉ๋Œ์ธ ๊ฑด ๋ถ„๋ช…ํ•œ๋ฐ, git์—๋Š” node_modules๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ด๋ผ ์›์ธ ํŒŒ์•…์ด ํ•„์š”ํ–ˆ๋‹ค.

 

 

์ƒํ™ฉ ๋ถ„์„

ํ˜„์žฌ๋Š” ์บ์‹œ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ Dockerfile ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

COPY apps/chat/package.json ./apps/chat/package.json
RUN pnpm install  
COPY apps ./apps  # ์—ฌ๊ธฐ์„œ ์—๋Ÿฌ ๋ฐœ์ƒ

git ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ ๊นจ๋—ํ–ˆ๋‹ค:

$ git status  
nothing to commit, working tree clean

$ ls apps/chat/
src/ public/ package.json # node_modules ๋ณด์ด์ง€ ์•Š์Œ

๊ทธ๋Ÿฐ๋ฐ ์™œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ• ๊นŒ?

 

 

์›์ธ ๋ฐœ๊ฒฌ

Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ์‚ดํŽด๋ดค๋‹ค.

  1. pnpm install ์‹คํ–‰ → ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— apps/chat/node_modules/ ์ƒ์„ฑ
  2. COPY apps ./apps ์‹คํ–‰ → ๋กœ์ปฌ์˜ apps ํด๋”๋ฅผ ๊ฐ™์€ ์œ„์น˜์— ๋ณต์‚ฌ ์‹œ๋„
  3. ๊ฒฝ๋กœ ์ถฉ๋Œ ๋ฐœ์ƒ

๊ทธ๋Ÿฐ๋ฐ ๋กœ์ปฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด๋‹ˆ

$ ls -la apps/chat/
drwxr-xr-x  3 user user 4096 Apr 23 15:05 node_modules
-rw-r--r--  1 user user 1122 May  9 15:40 package.json

์•„, ๋กœ์ปฌ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋œ node_modules๊ฐ€ ์‹ค์ œ๋กœ ์กด์žฌํ–ˆ๋‹ค. .gitignore๋กœ git์—๋Š” ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์•˜์ง€๋งŒ ํŒŒ์ผ์‹œ์Šคํ…œ์—๋Š” ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค..!

 

 

.dockerignore ์ด์Šˆ

๋‹น์—ฐํžˆ .dockerignore๋ฅผ ์„ค์ •ํ•ด๋’€๋‹ค.

node_modules/
**/node_modules/
apps/*/node_modules/

๊ทธ๋Ÿฐ๋ฐ ์™œ node_modules๊ฐ€ ๋ณต์‚ฌ๊ฐ€ ๋œ๋ ๊นŒ? .dockerignore๋Š” COPY . . ๊ฐ™์€ ๋ช…๋ น์–ด์—์„œ ํ•ด๋‹น ํŒŒ์ผ๋“ค์„ ์•„์˜ˆ ์ œ์™ธํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ง์ด๋‹ค.

Docker ๋นŒ๋“œ ์บ์‹œ๋‚˜ pnpm์˜ ํŠน์ˆ˜ํ•œ ๋งํฌ ๊ตฌ์กฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. --no-cache ์˜ต์…˜์œผ๋กœ ๋นŒ๋“œํ•ด๋ด๋„ ๋™์ผํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ž„์‹œ ํ•ด๊ฒฐ

์šฐ์„  ๋กœ์ปฌ node_modules๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด๋ดค๋‹ค:

mv apps/chat/node_modules apps/chat/node_modules.bak
docker build -t test .  # ์„ฑ๊ณต!

์˜ˆ์ƒ๋Œ€๋กœ ์ถฉ๋Œํ•  ํŒŒ์ผ์ด ์—†์œผ๋‹ˆ ์ •์ƒ ๋นŒ๋“œ๋๋‹ค.

 

 

ํฌ์ธํŠธ ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ

Docker COPY์˜ ๋™์ž‘

  • ๊ฐ™์€ ๊ฒฝ๋กœ์— ๋‹ค๋ฅธ ํƒ€์ž…(ํŒŒ์ผ vs ํด๋”)์ด ์žˆ์œผ๋ฉด ์ถฉ๋Œ ๋ฐœ์ƒ
  • .dockerignore๊ฐ€ ํ•ญ์ƒ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

pnpm workspace ํŠน์„ฑ

  • ๋ณต์žกํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๊ตฌ์กฐ๋กœ ์ผ๋ฐ˜์ ์ธ npm๊ณผ ๋‹ค๋ฅธ ๋™์ž‘
  • Docker ํ™˜๊ฒฝ์—์„œ๋Š” ์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ ํ•„์š”

์‹ค๋ฌด ๊ด€์ 

  • ์ด๋ก ์  ์ตœ์ ํ™”๋ณด๋‹ค ์•ˆ์ •์  ๋นŒ๋“œ๊ฐ€ ์šฐ์„ 
  • ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ๋ถ€์‚ฐ๋ฌผ๋„ Docker ๋นŒ๋“œ์— ์˜ํ–ฅ

 

๋งˆ๋ฌด๋ฆฌ

git์—๋Š” ์—†์ง€๋งŒ ๋กœ์ปฌ ํŒŒ์ผ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š” node_modules๊ฐ€ ์›์ธ์ด์—ˆ๊ณ , .dockerignore๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ๊ฒน์ณค๋‹ค. ๊ฒฐ๊ตญ node_modules๋ฅผ ์—†์• ์„œ ํ•ด๊ฒฐํ•œ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์˜€๋‹ค. Docker ํ™˜๊ฒฝ์—์„œ ๋‹น์—ฐํžˆ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ƒํƒœ๋„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ–ˆ๋‹ค.

๋ฐ˜์‘ํ˜•