WSL 2 での Docker の使用
2020年3月2日 Matt Hernandez, @fiveisprime
昨年6月、Docker チームは、Windows Subsystem for Linux (WSL) で Docker を実行できるように投資することを発表しました。これはすべて、軽量仮想マシン (VM) 内で実行される WSL のアーキテクチャへの最近の変更によって可能になりました。これについては、以前のWSL 2 に関するブログ記事で説明しました。発表以来、Docker チームは WSL 2 での実行をサポートする Docker のテクニカルプレビューをリリースしました。
この記事では、Docker Desktop テクニカルプレビューの仕組みと、テクニカルプレビューで Docker 拡張機能を使用する方法について説明します。
仕組み
この新しい Docker アーキテクチャは、ホストマシンで実行されている Docker CLI がリモート WSL VM 上で実行されている Docker Integration Package 内でコマンドを実行するという点で、Visual Studio Code のWSL リモート開発サポートとよく似ています。
画像クレジット: Docker Engineering
DockerD は WSL 内で直接実行されるため、Hyper-V VM は不要で、すべての Linux コンテナはパフォーマンスと互換性を向上させるために Windows 上の Linux ユーザースペース内で実行されます。
セットアップ方法
まず、いくつかの前提条件
- WSL 2 用の Windows 10 Insider Preview ビルド 18975 (Slow) 以降をインストールします。
- Microsoft Store から Ubuntu をインストールします。
- こちらのガイドに従って WSL 2 を有効にします。
- VS Code 用の WSL 拡張機能をインストールします。
- Docker WSL 2 Technical Preview をインストールします。
インストールが完了すると、Docker は WSL がインストールされていることを認識し、WSL 統合を有効にするように促します。このチュートリアルでは、必ず WSL 統合を有効にしてください。
このオプションを使用すると、Linux ディストリビューション内から Docker CLI を介して Docker Desktop に直接アクセスできます。
複数の Linux ディストリビューションがある場合は、Docker 設定で正しいディストリビューションに対してのみ WSL 統合がオンになっていることを確認してください。
これを設定すると、すべてのコマンドは Linux コンテキストで実行されます。これには PowerShell から実行される Docker コマンドも含まれるため、docker run mongo…
のようなコマンドを実行すると、WSL VM 内で Linux コンテナが起動します。
WSL で docker ps
コマンドを実行すると、期待どおりにコンテナが表示されます。コンテナ ID が一致することに注意してください。
VS Code の使用
この設定が完了して実行されている状態で、VS Code Docker 拡張機能をインストールして、コンテナにアクセスできます。すでに WSL 2 と WSL 拡張機能を実行している場合は、コンテナが必要なときにコンテキストを切り替えるのではなく、Docker を WSL ワークフローに統合するのに役立ちます。また、Docker CLI のコンテキストは WSL の DockerD を使用するように設定されているため、VS Code を WSL 拡張機能を使用して開いたかどうかに関係なく、拡張機能はコンテナで動作します。
下のスクリーンショットで、WSL に接続して作業しており、好みの環境 (Ubuntu の zsh) から変更することなく、コンテナをビルド/実行していることに注目してください。
テーマ: Noctis Sereno
私は個人的に、この構成を使用するとコンテナの実行時間が大幅に向上することに気づきました。また、通常の開発ワークフローの各部分は同じままです。また、Dev Containers 拡張機能を WSL 内で使用して、マシンに直接設定することなく、特定の環境をテストしています。
皆様のフィードバックをお待ちしております
プレリリースソフトウェアを使用していることに注意してください。Windows Insider Slow リングは非常に安定していますが、問題が発生する可能性があります。予期しない動作が発生した場合は、Windows のフィードバックツールから問題を報告してください。Docker に関する直接的な問題やフィードバックは、Docker for Windows リポジトリに記録できます。
ハッピーコーディング!
Matt Hernandez, VS Code プログラムマネージャー @fiveisprime