使用 Docker
注意事項
在建置時期,您無法在Docker容器與主機檔案系統間建立參照連結 (reflink) 或硬連結 (hard link)。 但您仍可透過 BuildKit 的 cache mount 功能,在不同組建間共享快取。 或者,您可以使用 podman,因為它可以在建置時期掛載 Btrfs 磁碟區。
最小化 Docker 映像尺寸及建置時間
- 使用較小的映像,例如
node:XX-slim
。 - 盡可能利用多階段建置。
- 利用 BuildKit 快取掛載區功能。
例一:在 Docker 容器中建置軟體包
因為僅在建置軟體時需要 devDependencies
,您可以將 pnpm install --prod
從 pnpm install
及 pnpm run build
中獨立出來成為單獨的階段,讓最後階段只從先前階段複製必須的檔案,從而降低最終產出映像的大小。
.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" ]