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 ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ผ์ด๋๋ ์ผ์ ์ดํด๋ดค๋ค.
- pnpm install ์คํ → ์ปจํ ์ด๋ ๋ด๋ถ์ apps/chat/node_modules/ ์์ฑ
- COPY apps ./apps ์คํ → ๋ก์ปฌ์ apps ํด๋๋ฅผ ๊ฐ์ ์์น์ ๋ณต์ฌ ์๋
- ๊ฒฝ๋ก ์ถฉ๋ ๋ฐ์
๊ทธ๋ฐ๋ฐ ๋ก์ปฌ ์ธ์คํด์ค๋ฅผ ๋ค์ ํ์ธํด๋ณด๋
$ 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 ํ๊ฒฝ์์ ๋น์ฐํ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ํ๋ ํจ๊ป ๊ณ ๋ คํด์ผ ํ๋ค๋ ์ ์ ๋ค์ ํ๋ฒ ํ์ธํ๋ค.