WSL 2 で Docker を使用する
2020 年 3 月 2 日 by Matt Hernandez, @fiveisprime
昨年 6 月、Docker チームは Windows Subsystem for Linux (WSL) で Docker を実行させるための投資を行うと発表しました。これはすべて、軽量仮想マシン (VM) 内で WSL を実行するための最近のアーキテクチャ変更によって可能になりました。これについては、以前のWSL 2 に関するブログ記事で触れました。この発表以降、Docker チームは WSL 2 での実行をサポートする Docker のテクニカル プレビューをリリースしました。
この記事では、Docker Desktop テクニカル プレビューの仕組みと、Docker 拡張機能をテクニカル プレビューで使用する方法について説明します。
仕組み
この新しい Docker アーキテクチャは、Visual Studio Code のWSL リモート開発サポートと非常によく似た仕組みで動作します。ホストマシン上で実行される Docker CLI が、リモートの WSL VM 上で実行される Docker Integration Package 内でコマンドを実行します。
画像提供: 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 統合を有効にしてください (Enable WSL integration)。
このオプションにより、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 リポジトリに記録できます。
ハッピーコーディング!
Matt Hernandez, VS Code Program Manager @fiveisprime