ディスクパフォーマンスを向上させる
Dev Containers拡張機能は、デフォルトでローカルファイルシステムのソースコードを「バインドマウント」して使用します。これは最も簡単なオプションですが、macOSとWindowsでは、コンテナ内からyarn installのようなコマンドを実行すると、ディスクパフォーマンスが低下する場合があります。これらの問題を解決するためにできることがいくつかあります。
WindowsのWSL 2ファイルシステムにソースコードを保存する
Windows 10 2004以降には、完全なLinuxカーネルを提供するWindows Subsystem for Linux (WSL 2)の改良版が含まれており、WSL 1よりも大幅にパフォーマンスが向上しています。Docker Desktop 2.3以降には、DockerをVMではなくWSLで実行する新しいWSL 2エンジンが含まれています。したがって、WSL 2ファイルシステムにソースコードを保存すると、権限の設定などにおいて互換性が向上し、パフォーマンスも改善されます。
この新しいエンジンをVS Codeから使用する方法の詳細については、「WindowsでWSL 2フォルダーをコンテナで開く」を参照してください。
ビデオ: Windows上のDev Containersを高速化する
コンテナボリュームにリポジトリをクローンするを使用する
Dev Containers: コンテナボリュームにリポジトリをクローン... コマンドは、ローカルファイルシステムにバインドする代わりに、分離されたローカルのDocker名前付きボリュームを使用します。ファイルツリーを汚染しないだけでなく、ローカルボリュームにはWindowsおよびmacOSでのパフォーマンス向上の追加メリットがあります。
このアプローチの使用方法の詳細については、「分離されたコンテナボリュームでGitリポジトリまたはGitHub PRを開く」を参照してください。
次の2つのセクションでは、他のシナリオで名前付きボリュームを使用する方法について説明します。
ターゲット名付きボリュームを使用する
macOSとWindowsはVMでコンテナを実行するため、「バインド」マウントはコンテナのファイルシステムを直接使用するほど高速ではありません。幸いにも、Dockerにはローカルの「名前付きボリューム」という概念があり、コンテナのファイルシステムのように機能しますが、コンテナの再構築後も存続します。これにより、node_modulesのようなパッケージフォルダー、データフォルダー、またはbuildのような出力フォルダーなど、書き込みパフォーマンスが重要な場所でのストレージに最適です。devcontainer.jsonで参照しているものに基づいて、以下の適切な手順に従ってください。
Dockerfileまたはイメージ:
yarn installを高速化する方法を説明するために、vscode-remote-try-nodeリポジトリを使用します。
次の手順に従ってください
- 
devcontainer.jsonのworkspaceMountプロパティを使用して、VS Codeにソースコードをバインドする場所を伝えます。次に、mountsプロパティ (VS Code 1.41+) を使用して、node_modulesサブフォルダーを名前付きローカルボリュームにマウントします。"mounts": [ "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume" ]注: sourceには${localWorkspaceFolderBasename}、${devcontainerId}、またはハードコードされた名前を使用できます。
- 
このリポジトリはVS Codeを非ルートの「node」ユーザーとして実行するため、ユーザーがフォルダーにアクセスできるように postCreateCommandを追加する必要があります。"remoteUser": "node", "mounts": [ "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume" ], "postCreateCommand": "sudo chown node node_modules"コンテナ内で rootとして実行する場合は、この2番目のステップは必要ありません。
すでにコンテナをビルドして接続している場合は、コマンドパレット (F1) からDev Containers: コンテナを再構築を実行して変更を反映します。それ以外の場合は、Dev Containers: コンテナでフォルダーを開く... を実行してコンテナに接続します。
このアプローチに関する2つの注意点
- 
コンテナ内の node_modulesフォルダーを削除すると、ボリュームへの接続が失われる可能性があります。必要に応じて、node_modulesフォルダーの内容を削除してください (rm -rf node_modules/* node_modules/.*)。
- 
この方法では、空の node_modulesフォルダーがローカルに作成されることがわかります。これは、コンテナ内のボリュームマウントポイントがローカルファイルシステムバインドマウント内にあるためです。これは予期されたものであり、無害です。
Docker Compose:
vscode-remote-try-nodeはDocker Composeを使用しませんが、手順は似ていますが、ボリュームマウント構成が別のファイルに配置されます。
- 
Docker Composeファイル (または拡張されたもの) で、適切なサービスのために node_modulesサブフォルダーに名前付きローカルボリュームマウントを追加します。例えばversion: '3' services: your-service-name-here: volumes: # Or wherever you've mounted your source code - .:/workspace:cached - try-node-node_modules:/workspace/node_modules # ... volumes: try-node-node_modules:
- 
次に、 devcontainer.jsonのworkspaceFolderプロパティが実際のソースコードがマウントされている場所と一致していることを確認します"workspaceFolder": "/workspace"
- 
root以外のユーザーとしてコンテナ内で実行している場合は、マウントしたフォルダーがrootとしてマウントされた可能性があるため、その所有者を更新するために postCreateCommandを追加します。user-name-goes-hereを適切なユーザーに置き換えてください。"remoteUser": "node", "workspaceFolder": "/workspace", "postCreateCommand": "sudo chown user-name-goes-here node_modules"
すでにコンテナをビルドして接続している場合は、コマンドパレット (F1) からDev Containers: コンテナを再構築を実行して変更を反映します。それ以外の場合は、Dev Containers: コンテナでフォルダーを開く... を実行してコンテナに接続します。
ビデオ: 開発コンテナでnpm installを高速化する
ソースツリー全体に名前付きボリュームを使用する
最後に、上記のオプションのいずれもニーズを満たさない場合は、さらに一歩進んで、ソースツリー全体をローカルではなく名前付きボリューム内にクローンできます。既存のdevcontainer.json構成を取得し、次のように変更することで名前付きボリュームを設定できます (your-volume-name-hereをボリュームに付けたい名前に更新します)。
devcontainer.jsonで参照するものに応じて
- 
Dockerfileまたはイメージ: devcontainer.jsonの以下のプロパティを使用して、ローカルの名前付きボリュームをコンテナにマウントします"workspaceMount": "source=your-volume-name-here,target=/workspace,type=volume" "workspaceFolder": "/workspace",
- 
Docker Compose: 適切なサービスのために、 docker-compose.ymlを以下の内容で更新 (または拡張) しますversion: '3' services: your-service-name-here: volumes: - your-volume-name-here:/workspace # ... volumes: your-volume-name-here:また、 devcontainer.jsonのworkspaceFolderプロパティがボリュームがマウントされている場所 (またはボリューム内のサブフォルダー) と一致していることを確認する必要があります。"workspaceFolder": "/workspace"
すでにコンテナをビルドして接続している場合は、コマンドパレット (F1) からDev Containers: コンテナを再構築を実行して変更を反映します。それ以外の場合は、Dev Containers: コンテナでフォルダーを開く... を実行してコンテナに接続します。
次に、コマンドパレットからGit: クローンコマンドを使用するか、統合ターミナルを開始 (⌃⇧` (Windows, Linux Ctrl+Shift+`)) し、git cloneコマンドを使用してソースコードを/workspaceフォルダーにクローンします。
最後に、ファイル > 開く... / フォルダーを開く... コマンドを使用して、クローンしたリポジトリをコンテナで開きます。