WSL 2 で Docker を使用する
2020 年 3 月 2 日 マット・ヘルナンデス著、@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 テクニカルプレビューをインストールします。
インストール後、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
個人的には、この構成を使用することでコンテナーの実行時間が大幅に改善され、通常の開発ワークフローの各部分が同じままであることに気づきました。また、特定の環境をテストするために、マシンに直接セットアップすることなく、WSL 内でDev Containers 拡張機能も使用しています。
フィードバックをお寄せください
これはプレリリースソフトウェアであり、Windows Insider Slow リングは非常に安定していますが、いくつかの問題に遭遇する可能性があることに注意してください。期待どおりに動作しないものを見つけた場合は、Windows のフィードバックツールから問題を報告してください。Docker に関連する直接の問題やフィードバックは、Docker for Windows リポジトリに記録できます。
ハッピーコーディング!
マット・ヘルナンデス、VS Code プログラムマネージャー @fiveisprime