Docker Desktop WSL 2 バックエンド

新しい Docker Desktop WSL 2 バックエンドは、Docker Desktop WSL 2 Tech Preview の後を継ぐものです。WSL2 バックエンド・アーキテクチャは Kubernetes 向けのサポートを導入し、更新版 Docker デーモンの提供、VPN と親和性のあるネットワーク機能や追加機能を提供します。WSL 2 は構造上の著しい変更をもたらします。Microsoft によってビルドされた完全な Linux カーネルによって、エミュレーションではなく、ネイティブに Linux コンテナを実行可能になります。WSL 2 上で Docker Desktop を実行しますと、利用者は Linux ワークスペースを活用できるようになり、また、ビルド用スクリプトは Windows 用と Linux 用との両方を準備する必要がなくなります。

また、Docker Desktop は WSL 2 で導入された動的メモリ割り当て機能も活用できるため、リソースの消費を著しく改善します。つまり、Docker Desktop は、コンテナのビルドのような CPU とメモリを大量に必要とするタスクでも、 CPU とメモリを必要量しか使わないため、より速く実行できます。

さらに、WSL 2 はDocker デーモンのコールド・スタート後は、起動に必要な時間が著しく早くなります。Docker デーモンの起動に、現在の Docker Desktop のバージョンでは数十秒かかるのと比べ、2秒以下です。

動作条件

Docker Desktop WSL 2 バックエンドをインストールする前に、以下の手順を完了している必要があります。

  1. Windows 10, version 2004 以上をインストール。
  2. Windows 上での WSL2 機能の有効化。詳細手順は マイクロソフトのドキュメント を参照ください。
  3. Linux カーネル更新パッケージ のダウンロードとインストール

ダウンロード

Docker Desktop stable 2.3.0.2 以上のリリースをダウンロードします。

インストール

Docker Desktop Stable 2.3.0.2 リリースをインストールする 前に 、動作条件のセクションで説明した、 事前の手順 を必ず終えてください。

  1. 通常の Docker Desktop のインストール手順に従い、インストールを行います。もしサポートしているシステムであれば、 Docker Desktop のインストール中に、 WSL 2 を有効化するかどうか訊ねる画面が出ます。続けるには、画面に表示される文字を読み、WSL 2 を有効化します。
  1. Windows スタート・メニューから Docker Desktop をスタートします。
  1. Docker メニューから、 Settings > General を選択します。
  1. User WSL 2 based engine (WSL2 対応エンジンを使う) のチェックボックスを選択します。

WSL 2 をサポートしているシステム上に Docker Desktop をインストールした場合は、デフォルトでこのオプションが有効化されています。

  1. *Apply & Restart (適用と再起動)をクリックします。
  1. ディストリビューションが WSL2 モードで動作しているかどうかを確認します。WSL はディストリビューションの v1 と v2 モードのどちらでも動作します。

WSL モードの確認は、次のように実行します。

wsl -l -v

v2 にアップグレードするには、次のように実行します。

wsl --set-version (distro name) 2

以後のインストールで v2 をデフォルトのバージョンにセットするには、次のように実行します。

wsl --set-default-version 2

7. Docker Desktop を再起動したら、 Settings > Resources > WSL Integration に移動し、Docker でアクセスしたい WSL 2 ディストリビューションを選択します。

WSL 統合によって、デフォルトの WSL ディストリビューションが有効化されます。このデフォルトの WSL ディストリビューションを変更するには wsl --set-default <ディストリビューション名> を実行します。

たとえば、デフォルト WSL ディストリビューションを Ubuntu に設定するには、 wsl --set-default ubuntu を実行します。

オプションの項目から、WSL 2 上で有効化したい追加ディストリビューションを選択できます。

8. 変更を有効にするには Apply & Restart をクリックします。

Docker と WSL 2 で開発する

以下のセクションでは、Docker と WSL 2 を用いたアプリケーション開発のはじめかた説明します。私たちの推奨は、皆さんのデフォルト Linux ディストリビューションにコードを入れる方法が、Docker と WSL 2 バックエンドを用いた開発体験にベストです。Docker Desktop で WSL 2 を有効化した後は、Linux ディストリビューションの中でコードが動き始めるので、Windows 上でありながら理想的な IDE(統合開発環境)となるでしょう。 VSCode を使えば、 このワークフローはより洗練されるでしょう。

1. VSCode を開き、 Remote - WSL エクステンションをインストールします。この拡張機能によって、Windows 上にある Linux ディストリビューションをリモート・サーバとして動かすことができ、Windows 上の IDE クライアントになります。

2. 次に、VSCode をリモートで動作するようにします。そのためには、ターミナルを開き、次のように実行します。

wsl

code .

これにより新しい VSCode のリモート接続先が、スクリーン上で下の端でチェックしている、デフォルトの Linux ディストリビューションになります。

あるいは、スタートメニューからデフォルトの Linux ディストリビューション名を入力し、開き、 code を実行します。

3. VSCode 内であれば、VSCode のターミナルを使って、Windows マシンからコードを取得し、ネイティブに動かせられます。

ベストプラクティス

  • ファイルのマウント(bind-mount)時に最高のシステムパフォーマンスを得るために:
    • Linux コンテナ内にソースコードや他のデータを入れるには、Windows ファイルシステムよりも、Linux ファイルシステムでバインド・マウント(bind-mount)を使う(例、 docker run -v <ホスト側パス>:<コンテナ側パス>)。
    • オリジナルのファイルが Linux ファイルシステム内にあれば、Linux コンテナはファイル変更イベント( "inotify events" )のみ受け取る
    • Windows ホストからリモート操作するより、Linux ファイルシステム上でファイルをバインド・マウントするほうが、パフォーマンスがより優れる。つまり docker run -v /mnt/c/users:/users を避ける( /mnt/c は Windows からマウントしている場所 )。
    • そのかわりに、 コマンドラインで docker run -v ~/my-project:/sources <自分のイメージ> のようなコマンドをシェルで用いると、 ~ にあたる場所は Linux シェルによって $HOME に展開される。
  • docker-desktop-data VHDX の容量についての懸念や、変更の必要があれば、 Windows に組み込まれた WSL ツール を参照
  • CPU やメモリ使用量に関する懸念があれば、 WSL 2 ユーティリティ VM に割り当て可能な メモリ、CPU 、スワップサイズにし制限を設ける
  • Docker Desktop 上の WSL 2 を用いることで、競合する可能性を避けるためには、Docker Desktop を通して Linux ディストリビューションを直接インストールする前に、古いバージョンの Docker Engine および CLI のアンインストールが必須

フィードバック

皆さんからのフィードバックが私たちとって重要です。皆さんのフィードバックをお伝えいただくには、 Docker Desktop for Windows GitHub リポジトリで、 WSL 2 ラベルを追加ください。

参考

Docker Desktop WSL 2 backend
https://docs.docker.com/docker-for-windows/wsl/