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"