WSL 2 での開発コンテナーの使用
2020 年 7 月 1 日 Brigit Murtaugh, @BrigitMurtaugh 著
Docker コンテナーと Windows Subsystem for Linux 2 (WSL 2) のパワーを活用することで、深く統合された Linux カーネル内のサンドボックス化された親しみやすさの中でアプリケーションを開発することにより、Windows 環境を維持できます。
5 月には、仮想化の世界でいくつかのエキサイティングな発表がありました。Windows 10 May 2020 Update で WSL 2 が標準機能として追加され、Docker Desktop Stable 2.3.0.2 が WSL 2 バックエンドのサポートとともに GA になりました。
以前のブログ記事では、WSL 2 で Docker を使用する方法について説明しました。最初の要件は、WSL 2 のサポートがまだ安定版 Windows リリースの一部ではなかったため、Windows Insider をインストールすることでした。次は、Docker WSL 2 の Tech Preview をインストールすることでした。現在、Windows WSL 2 と Docker のサポートはどちらも安定版 GA リリースに含まれています!
この記事では、これらのツールがどのように機能するか、および Visual Studio Code でこれらのツールを活用して、WSL 2 で開発コンテナーを生産的に使用する方法を見ていきます。
仮想化の新時代
WSL 2 と最新バージョンの Docker Desktop はどちらも、仮想化の仕組みを変えます。
WSL 2
以前の投稿で説明したように、WSL 2 は、軽量仮想マシン (VM) 内で実際の Linux カーネルを使用することにより、Windows Subsystem for Linux に関する新しいアプローチを採用しています。高速な起動時間、小さなリソースフットプリント、および VM の構成や管理要件が一切ないように、シームレスで Windows 環境に深く統合されるように最適化されています。
システムコールを使用すると、ファイルへのアクセス、メモリの要求、プロセスの作成などの機能を実行できます。WSL 2 には完全な Linux カーネルが含まれているため、完全なシステムコール容量があり、Docker などのお気に入りのアプリが完全に確実に動作することを意味します。
Docker
WSL 1 では、Windows と Linux の根本的な違いにより、Docker Engine は WSL 内で直接実行できず、Docker チームは Hyper-V VM と LinuxKit を使用した代替ソリューションを開発しました。ただし、WSL 2 には完全なシステムコール容量が備わっているため、Docker は WSL 2 で完全に実行できるようになり、Docker チームからの投資が増えました。
新しい 2020 年 5 月バージョンの Docker Desktop は、WSL 2 の動的メモリ割り当てを活用するため、コンテナーをはるかに高速にビルドし、消費するリソースを削減できます。以前のバージョンではほぼ 1 分かかっていたコールドスタートに 10 秒もかかりません。さらに、Hyper-V はもはや要件ではないため、この記事で詳述されている手順は Windows 10 Home でも機能します。
Windows の WSL 2 と Docker Desktop は現在 GA であるため、WSL 2 で開発コンテナーをさらに安心して使用できます。
はじめに
前提条件
- Windows 10 バージョン 2004 をインストールします。
- デバイスで実行されている Windows のバージョンを確認するには、Windows ロゴ キー + R を押し、ファイル名を指定して実行 ボックスに winver と入力し、OK を選択します。
- Visual Studio Code をインストールします。
- WSL 2 インストールガイドに従って WSL 2 を有効にします。
- Microsoft Store から Ubuntu (またはお好みの Linux ディストリビューション) をインストールします。
- Docker Desktop Stable 2.3.0.2 をインストールします。
インストールが完了すると、Docker は WSL がインストールされていることを認識し、WSL 統合を有効にするように求めます。ポップアップウィンドウから WSL 統合を有効にする を選択します。
オプション: 新しい Windows Terminal をインストールすると、同じインターフェイスで新しい PowerShell および Ubuntu ターミナルを開く機能など、最高のエクスペリエンスが得られます。
WSL 2 で VS Code を開く
VS Code を WSL 2 エンジンに接続しましょう。Ubuntu ターミナルを開き、任意のソースコードフォルダに移動して、code .
と入力します。これにより、WSL をフルタイムの開発環境として使用できる VS Code のインスタンスが起動します。コマンドパレットから WSL に接続することもできます。簡単な HelloNode アプリケーションを開きます。
VS Code が開くと、WSL がインストールされていることが認識され、WSL 拡張機能をインストールするように推奨されます。インストール を選択します。
拡張機能をインストールしたら、VS Code をリロードして WSL 2 に接続できます。
リロードしたら、ウィンドウの左下隅にある WSL インジケーターを確認して、Ubuntu に接続されていることを確認できます。
WSL 拡張機能を追加すると、リモートエクスプローラーが VS Code に追加されました。エクスプローラーの中を見ると、Linux ディストリビューションに関する情報を確認できます。
コンテナーの操作
開発コンテナー拡張機能を利用して、コンテナーの表示とアタッチに加えて、次のようなさまざまなシナリオを実行できます。
これらの構成により、マシン間で同じ開発環境を簡単に再作成したり、プロジェクトに固有のツールと拡張機能を DevContainer にインストールしたり、展開環境と同様のセットアップで開発したりして、ローカルマシンを変更しないままにすることができます。Docker 拡張機能を使用して、コンテナーを表示およびアタッチすることもできます。
WSL 2 エンジンを使用する場合、Windows と WSL 2 ファイルシステムの両方からソースコードにアクセスできますが、パフォーマンスが大幅に向上するため、WSL 2 ファイルシステムを使用することをお勧めします。WSL 2 内のファイルシステムを使用するとパフォーマンスが向上するため、その使用方法について説明します。
コンテナーで開きたいフォルダーを選択する必要があります。まず、Dev Containers 拡張機能をインストールしていることを確認してください。次に、WSL 拡張機能を使用して既に開いているフォルダーから、Dev Containers: コンテナーで再度開く コマンドを呼び出すことができます。
WSL 2 ファイルシステムに既存の HelloNode フォルダーがあり、その中に Node プロジェクトがあります。Dev Containers: コンテナーで再度開く を選択します。
リポジトリに DevContainer 構成がまだないため、コンテナー定義のリストが表示されます。表示されるコンテナー構成定義のリストは、プロジェクトタイプに基づいてフィルタリングされます。Node.js 14 を選択します。
VS Code の新しいインスタンスが開きます。VS Code はイメージのビルドを開始し、コンテナーを起動します。
アプリケーションに .devcontainer フォルダーが追加され、コンテナー構成情報が格納されています。WSL とコンテナーの両方に接続されていることを再確認するために、統合ターミナルを開き、uname
と Node のバージョンを確認しましょう。
ご覧のとおり、uname
は Linux として返ってきました。つまり、WSL 2 エンジンにまだ接続されており、node -v
は v14.4.0 を返しました。つまり、Node 14 コンテナーを正常に構成しました。
F5 でアプリを実行してみましょう。
成功!
フィードバックと関連資料
WSL とコンテナーで VS Code をセットアップするために、VS Code リモート開発ドキュメントに詳細な記事を用意しています。チームへの質問やフィードバックがある場合は、VS Code リモート開発 GitHub リポジトリで問題をオープンするか、@code までツイートしてください。
ハッピーコーディング!
Brigit Murtaugh, VS Code プログラムマネージャー @BrigitMurtaugh