WSL2とは
WSL2はWSLの新バージョン・アーキテクチャで、WSL1の操作性を変えることなく最新の仮想化テクノロジーを使用することで機能を強化したものです。特徴はELF64 Linuxのバイナリが実行可能で、Linuxシステムコールの完全互換性を確保していることです。 【参考】:Windows Subsystem for Linuxに関するドキュメント 【参考】:WSL 2 とは
そもそもWSLとは
WSLは、マイクロソフト社によって提供されているサブシステムで「Windows Subsystem for Linux」の略です。Windows上でLinuxのコマンド・ツール・アプリケーション等を直接実行可能です。GNU/Linux 環境のほとんどのコマンド ライン ツール・ユーティリティ・アプリケーションがそのまま実行できます。 【参考】:Linux 用 Windows サブシステムとは
WSL1とWSL2の違いと特長
WSL1の動作の仕組みですが、Linux実行環境にLinuxカーネルを使用していません。LXCoreというWSL1のサブシステムが担当します。LXCoreがLinuxの関数呼び出しをWindowsの関数呼び出しに変更します。このためシステムコール互換性に難点がありました。
WSL2では、軽量のユーティリティ仮想マシン(Light Weight utility Virtual Machine)がハイパーバイザー上で実行されます。Linuxカーネルには必要とされるWSL2が適用され、正規のLinuxとして動作します。これにより完全互換性と高速性を実現しました。
上記のアーキテクチャ変更によりWSL2はWSL1と比較し、次のような違いと特長があります。 ・WSL2のメリット マネージドVM実装による、Linuxカーネルの実装とシステムコール互換機能が提供されます。 ・WSL2のデメリット OSファイルシステム間のアクセスパフォーマンスがWSL1に劣ります(遅くなります)。
WSL2のデメリットとなるOSファイルシステム間のアクセスパフォーマンス機能は、仮想マシンを使っているため実装上やむを得ない部分です。マイクロソフト社はそれを認識し、対処策・緩和策について自社サイトで公表しています。 【参考】:例外的に WSL 2 ではなく WSL 1 を使用する場合
WSL2の使い方
最初にWSL2のサポート構成について説明します。
これまでのHyper-V構成ではWindows10 Proが必要でしたが、WSL2はHome Editionにもインストール可能でメリットが大きいです。導入前の準備としてBIOS(UEFI)でVirtualization Technology(仮想化機能)をチェックしWindowsを起動しておきます。タスクマネージャーのCPU表示で「仮想化: 有効」となっていればインストール可能です。
WSLは、PowerShellまたはコマンドプロンプトからwsl.exeを実行します。wsl.exeの具体的な使い方やオプションですが、最初にディストリビューションを一覧表示するケースを見てみます。
・ディストリビューションを一覧表示 wsl --list、あるいはwsl -l
・使用できるディストリビューションをオンライン取得し表示 wsl --list --online、あるいはwsl --list -o、wsl -l -o
操作例:インストール可能なディストリビューションを表示する例です。
C:\WINDOWS\system32>wsl --list --online
実行結果:
C:\WINDOWS\system32>wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
既定の分布は ' * ' で表されます。
'wsl --install -d <Distro>'を使用してインストールします。
NAME FRIENDLY NAME
* Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
openSUSE-42 openSUSE Leap 42
SLES-12 SUSE Linux Enterprise Server v12
Ubuntu-16.04 Ubuntu 16.04 LTS
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
C:\WINDOWS\system32>
WSL2のインストール
実行環境が準備できたら、WSLのインストール作業を進めます。PowerShellまたはコマンドプロンプトからwsl.exeを実行し、”--install”オプションを指定します。 【参考】:WSL のインストール
オプションなし”wsl --install”コマンドでは、デフォルト設定のUbuntuディストリビューションがインストールされます。その他のインストールオプションは次の通りです。
・デフォルトのディストリビューションをインストール wsl --install
・ディストリビューションを指定してインストール wsl --install --distribution、またはwsl --install -d [引数]
デフォルトインストールされるUbuntuディストリビューションは、”wsl --install -d Ubuntu”のように明示することもできます。インストール済みのLinux ディストリビューションとWSL設定バージョンは、”wsl -l -v”で確認できます。使い方の詳細ヘルプは、”wsl --help”で表示されますので適宜ご確認ください。
実行結果:
C:\WINDOWS\system32>wsl --install
インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。
ダウンロード中: WSL カーネル
インストール中: WSL カーネル
WSL カーネル はインストールされました。
ダウンロード中: Ubuntu
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
C:\WINDOWS\system32>
再起動後、残りのインストール作業が行われて終了します。2022年1月時点のデフォルトディストリビューションは、Ubuntu 20.04 LTSがインストールされます。
WSL自体のステータスを確認するには、”wsl --status”を使用します。
C:\WINDOWS\system32>wsl --status
既定の配布: Ubuntu
既定のバージョン: 2
Linux 用 Windows サブシステムの最終更新日: 2022/01/25
WSL の自動更新が有効になっています。
カーネル バージョン: 5.10.16
C:\WINDOWS\system32>
WSL2の環境設定
WSL2のインストールが完了したら、ガイドに従い開発環境を設定します。デフォルトはUbuntuです。初回ユーザ名とパスワードの作成がWSL2のLinuxディストリビューションインストール時に求められますので、指示に従い作成します。 【参考】:WSL の開発環境を設定する
インストール時の設定例:
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: user
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
以降はスタートメニューからインストールしたディストリビューションをクリックし、起動します。
初回作成したユーザアカウントがデフォルトのユーザとして登録されます。また、Linux管理者としてsudoコマンドを実行可能となります。パスワード変更は、Linuxの”passwd”コマンドにより変更可能です。Linux管理者が設定できたら、必要に応じてディストリビューションのパッケージマネージャでパッケージ更新を行います。
sudo apt update && sudo apt upgrade
このパッケージ更新は定期的な更新が求められます。
Linux管理はコマンドラインインターフェースで実施します。そのため、WSLではWindows Terminalを用いたアプリケーション実行と管理が適しています。マイクロソフトストアからインストールしたり、GitHubからダウンロードしたりすることで入手できます。 【参考】:Install and get started setting up Windows Terminal
WSL1からWSL2へのバージョンアップ
インストール済みLinuxディストリビューションのWSLを、WSL1からWSL2にアップグレードする場合は、”wsl --set-version
インストール済みのディストリビューション表示は”wsl --list”、WSLバージョンを表示するには”wsl --list --verbose”を使います。指定オプションの"--list"は"-l"、"--verbose"は"-v"でも構いません。
実行結果:
C:\WINDOWS\system32>wsl -l
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
C:\WINDOWS\system32>
C:\WINDOWS\system32>wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
C:\WINDOWS\system32>
Dockerコンテナを利用するには
Dockerコンテナを利用するには、Linuxを稼働させる環境としてWSL2を使います。従来WSL1ではアーキテクチャの違いにより、Docker EngineをWSL内で実行することはできず、Hyper-V仮想マシンとLinuxKitが必要でした。
WSL2はLinuxのシステムコール完全互換となり、Docker LinuxコンテナをWSL2でそのまま利用することができます。 【参考】:WSL 2 での Docker リモート コンテナーの概要
WSL2を用いることで、Docker Desktop for WindowsおよびDocker Engineいずれも動作させることができます。Docker DesktopはDocker操作をGUIダッシュボードで一元管理できるソリューションで、Docker Engineはそのコアとなるエンジンコード部分です。Docker CLIというコマンドラインインターフェイスから操作することもできます。 【参考】:Docker Desktop for Windows
WSL2導入で手軽にLinux環境を手に入れましょう
WSL2は、軽量のユーティリティ仮想マシンでLinuxが稼働します。専用のハードウェアを用意せずにLinuxディストリビューションをインストールできます。
ちょっとしたLinuxの処理や構築確認で利用できるため、DockerやVisual Studio Codeバックエンドサーバーとしてウェブアプリケーション開発にも適しています。このお手軽環境を試してみてはいかがでしょうか。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから