도커 작업
note
빌드 시간 동안에 도커 컨테이너와 호스트 파일 시스템 간에 참조 링크 또는 하드 링크를 생성하는 것은 불가능합니다. 다음으로 할 수 있는 가장 좋은 방법은 BuildKit 캐시 마운트를 사용하여 빌드 간에 캐시를 공유하는 것입니다. Alternatively, you may use podman because it can mount Btrfs volumes during build time.
도커 이미지 크기 및 빌드 시간 최소화
- Use a small image, e.g.
node:XX-slim
. - 가능하고 합리적인 경우 다중 단계를 활용하세요.
- BuildKit 캐시 마운트를 활용하세요.
예시 1: 도커 컨테이너에서 번들 빌드
Since devDependencies
is only necessary for building the bundle, pnpm install --prod
will be a separate stage
from pnpm install
and pnpm run build
, allowing the final stage to copy only necessary files from the earlier
stages, minimizing the size of the final image.
.dockerignore
node_modules
.git
.gitignore
*.md
dist
Dockerfile
FROM node:20-slim AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
COPY . /app
WORKDIR /app
FROM base AS prod-deps
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
FROM base AS build
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN pnpm run build
FROM base
COPY --from=prod-deps /app/node_modules /app/node_modules
COPY --from=build /app/dist /app/dist
EXPOSE 8000
CMD [ "pnpm", "start" ]