使用 Docker
注意
在构建期间,不可能在 Docker 容器和主机文件系统之间创建引用链接或硬链接。 您可以做的下一个最佳操作是使用 BuildKit 缓存挂载在构建之间共享缓存。 或者,您可以使用 podman ,因为它可以在构建期间挂载 Btrfs 卷。
最小化 Docker 映像大小和构建时间
- 使用小图像,例如
node:XX-slim
。 - 如果可能且有意义,请利用 multi-stage。
- 利用 BuildKit 缓存挂载功能。
示例 1:在 Docker 容器中构建捆绑包
由于 devDependency
仅用于构建捆绑包,因此 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" ]