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 バックエンドをインストールする前に、以下の手順を完了している必要があります。
- Windows 10, version 2004 以上をインストール。
- Windows 上での WSL2 機能の有効化。詳細手順は マイクロソフトのドキュメント を参照ください。
- Linux カーネル更新パッケージ のダウンロードとインストール
ダウンロード¶
Docker Desktop stable 2.3.0.2 以上のリリースをダウンロードします。
インストール¶
Docker Desktop Stable 2.3.0.2 リリースをインストールする 前に 、動作条件のセクションで説明した、 事前の手順 を必ず終えてください。
- 通常の Docker Desktop のインストール手順に従い、インストールを行います。もしサポートしているシステムであれば、 Docker Desktop のインストール中に、 WSL 2 を有効化するかどうか訊ねる画面が出ます。続けるには、画面に表示される文字を読み、WSL 2 を有効化します。
- Windows スタート・メニューから Docker Desktop をスタートします。
- Docker メニューから、 Settings > General を選択します。
- User WSL 2 based engine (WSL2 対応エンジンを使う) のチェックボックスを選択します。
WSL 2 をサポートしているシステム上に Docker Desktop をインストールした場合は、デフォルトでこのオプションが有効化されています。
- *Apply & Restart (適用と再起動)をクリックします。
- ディストリビューションが 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
に展開される。
- Linux コンテナ内にソースコードや他のデータを入れるには、Windows ファイルシステムよりも、Linux ファイルシステムでバインド・マウント(bind-mount)を使う(例、
- 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/