使用 Podman
在容器和主机 Btrfs 文件系统之间共享文件
注意
此方法仅适用于 Podman 支持的写时复制文件系统,例如 Btrfs。对于其他文件系统,例如 Ext4,pnpm 将复制文件。
Podman 支持 Btrfs 等写时复制文件系统。使用 Btrfs 时,容器运行时会为其挂载的卷创建实际的 Btrfs 子卷。pnpm 可以利用此行为在不同的挂载卷之间建立 reflink。
要在主机和容器之间共享文件,请将存储目录和 node_modules
目录从主机挂载到容器。这允许容器内的 pnpm 自然地将主机上的文件作为 reflink 重用。
以下是一个演示容器设置的示例
Dockerfile
FROM node:20-slim
# corepack is an experimental feature in Node.js v20 which allows
# installing and managing versions of pnpm, npm, yarn
RUN corepack enable
VOLUME [ "/pnpm-store", "/app/node_modules" ]
RUN pnpm config --global set store-dir /pnpm-store
# You may need to copy more files than just package.json in your code
COPY package.json /app/package.json
WORKDIR /app
RUN pnpm install
RUN pnpm run build
运行以下命令来构建 podman 镜像
podman build . --tag my-podman-image:latest -v "$HOME/.local/share/pnpm/store:/pnpm-store" -v "$(pwd)/node_modules:/app/node_modules"