ディスクパフォーマンスを向上させる
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以降には、VMではなくWSLでDockerを実行する新しいWSL 2エンジンが含まれています。したがって、WSL 2ファイルシステムにソースコードを保存すると、パフォーマンスが向上し、パーミッション設定などの互換性も向上します。
この新しいエンジンをVS Codeから使用する方法については、WindowsでWSL 2フォルダをコンテナで開くを参照してください。
動画: Windowsで開発コンテナを高速化する
コンテナボリュームでリポジトリをクローンするを使用する
Dev Containers: Clone Repository in Container Volume...コマンドは、ローカルファイルシステムにバインドするのではなく、分離されたローカルの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を非rootの「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: Rebuild Containerを実行して変更を反映させます。それ以外の場合は、Dev Containers: Open Folder in Container...を実行してコンテナに接続します。
このアプローチに関する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以外のユーザーとしてコンテナで実行している場合は、マウントしたフォルダの所有者を更新するために
postCreateCommand
を追加します。rootとしてマウントされた可能性があるためです。user-name-goes-here
を適切なユーザーに置き換えてください。"remoteUser": "node", "workspaceFolder": "/workspace", "postCreateCommand": "sudo chown user-name-goes-here node_modules"
コンテナをすでに構築して接続している場合は、コマンドパレット (F1) からDev Containers: Rebuild Containerを実行して変更を反映させます。それ以外の場合は、Dev Containers: Open Folder in Container...を実行してコンテナに接続します。
動画: 開発コンテナで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: Rebuild Containerを実行して変更を反映させます。それ以外の場合は、Dev Containers: Open Folder in Container...を実行してコンテナに接続します。
次に、コマンドパレットからGit: クローンコマンドを使用するか、統合ターミナルを開始 (⌃⇧` (Windows, Linux Ctrl+Shift+`)) し、git clone
コマンドを使用してソースコードを/workspace
フォルダにクローンします。
最後に、ファイル > 開く... / フォルダを開く...コマンドを使用して、クローンされたリポジトリをコンテナで開きます。