WindowsでLinuxを利用できる「WSL」に注目が集まっています。Windows 11のWSL 2に用意したUbuntuでコンテナを利用する開発環境を構築する方法を紹介します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「macOSやUNIXベースのOSを利用して開発したい」という考え方が広まる中、多くの企業でmacOSが搭載されたMacを社用PCとして利用できるようになりました。一方、業務システムとの互換性の問題などからWindowsの利用を求められる企業も少なくありません。そこで注目されているのが、WindowsでLinuxを利用できる「WSL」(Windows Subsystem for Linux)です。WSLを利用することで、業務システムとの互換性はWindowsで保ちつつ、快適な開発作業をLinuxで進められるようになります。
WSLの登場以前は「VMware」や「VirtualBox」などの仮想化ソフトウェアを使用してLinuxを実行したり、LinuxのコマンドなどをWindowsに移植した「Cygwin」のようなツールを利用したりするなどの方法がありました。しかし、前者はホストOSであるWindowsで仮想化ソフトウェアを実行した上でLinuxをインストールするため、オーバーヘッドの大きさが課題でした。後者はあくまでもLinuxで利用できる一部のコマンドをWindowsで利用できるようにしたもので機能面に課題がありました。
WSLも仮想マシンの仕組みを用いていますが、Windowsと親和性の高い「Hyper-V」を使用しているのでオーバーヘッドが小さく、Cygwinのようなツールと違い、本物のLinuxを実行できます(Hyper-Vを利用しているのは後述するWSL 2からとなります)。
WSLは2016年に登場しましたが、2019年に「WSL 2」が発表され、2021年には「WSLg」が発表されました。バージョンアップを重ねてきたわけですが、それぞれの違いはどこにあるのでしょうか。
WSLとWSL 2はWindows上でLinuxディストリビューションを実行する点は同じですが、仕組みが異なります。WSLでは、LinuxのシステムコールをWindowsカーネル向けに変換する独自機能を追加してWindows上でLinuxを実行しています。Linuxから見たときにWindowsカーネルがLinuxカーネルに見えるような仕組みが整っています。
WSL 2では、Hyper-Vを使用してLinuxを実行しています。Hyper-VはMicrosoftが開発した仮想マシンの仕組み(ハイパーバイザー)で、Windowsとの親和性が高く、VMwareやVirtualBoxなどと比較してオーバーヘッドが抑えられています。
WSLgは、Windows上で動く本物のLinuxで、Linux GUIアプリケーションを実行できる機能です。他と大きく違うのは、WindowsでLinuxのデスクトップが開き、その上でGUIアプリケーションが実行されるのではなく、WindowsのウィンドウとしてLinuxのGUIアプリケーションが起動して表示される点にあります。
ここまでWSLの仕組みとその進化を簡単に紹介しました。ここからは手を動かして、WSL 2を触ってみましょう。WSL 2ではHyper-Vを使用するためWindows側でCPUの仮想化支援機能(Intel VTやAMD-V)を有効にする必要があります。
必要に応じてBIOS設定画面を確認し、仮想化支援機能が無効になっている場合は有効化してください。設定方法がPCごとに異なるため、詳細な手順は触れませんが、進める前に現在の設定を確認しておくことを推奨します。
仮想化支援機能が有効であることを確認した後、Windows11の[設定]→[アプリ]→[オプション]で「Windowsのその他の機能」をクリックします。
「Windowsの機能」画面で、[Linux用Windowsサブシステム]と[仮想マシンプラットフォーム]にチェックを入れ、[OK]をクリックします。
再起動を求められますので、Windowsを再起動します。
この先の手順ではコマンドを入力する箇所が何カ所かあります。「> 」で始まるものはWindowsのコマンドプロンプト、「$ 」で始まるものはUbuntuのコンソールに入力するものとします。
WSL 2の使用をデフォルトにします。
> wsl --set-default-version 2
WSL 2のアップデートを実行します(コマンドプロンプトを管理者権限で実行する必要があります)。
> wsl --update
「https://aka.ms/WSL 2kernel」にアクセスし、WSL 2用Linuxカーネル更新プログラムパッケージをダウンロードします。
以下の画面で[Next]をクリックします。
以下の画面で[Finish]をクリックします。
続いてUbuntuをインストールします。
> wsl --install -d ubuntu
Ubuntuのインストールが始まります。インストール後、Ubuntuが起動します。Ubuntuで利用するユーザーネーム(任意)を入力します。
パスワードを2回入力します。
なおUbuntuはそれ自体が独立して動いていますので、Windowsのユーザー名やパスワードに合わせる必要はありません。それではWSLgを使って、Linux GUIアプリケーションを実行してみましょう。ここでは代表的なLinux GUIアプリケーションである「xeyes」を試してみます。
以下のコマンドを実行してパッケージをインストールします。
$ sudo apt update $ sudo apt install x11-apps
xeyesを実行します。
$ xeyes
このようにWindowsのウィンドウであるかのように、Linux GUIアプリケーションが表示されます。
続いてWSL 2のUbuntuでDockerコンテナを起動、実行してみましょう。
「https://www.docker.com/products/docker-desktop」にアクセスし、「Docker Desktop for Windows」のインストーラーパッケージをダウンロードします。
ダウンロードしたインストーラーパッケージを実行します。「Install required Windows comoponents for WSL 2」にチェックが入っていることを確認して進みます。
インストールしたら以下のコマンドを実行し、Docker DesktopがWSL 2に追加されていることを確認します。
> wsl -l -v
正しくインストールできていれば、WSL 2のディストリビューション一覧に「docker-desktop」と「docker-desktop-data」が表示されます。
「nginx」のDockerイメージをダウンロードし、Ubuntu上で実行してみましょう。
$ docker pull nginx:latest $ docker run -d -p 80:80 --name nginxtest nginx:latest
「http://localhost/」にアクセスすると、nginxのデフォルト画面が表示されます。
WSL 2はWSLと比較して確実に進化しており、本当にWindowsの一部として本物のLinuxが使えるようになったといえるでしょう。またコンテナをWSL 2で実行できるのも、Dockerを開発に使用しているユーザーからはうれしい点になるでしょう。
一方、WSLgは、開発目線では使いどころに困ることがあるかもしれません。今回、記事の執筆に当たって環境を検証しましたが、WSL 2を最新版にアップデートしてもウィンドウが表示されずエラーになるなどの不具合が見受けられました。WSLでGUIアプリケーションを実行するよりもはるかに利便性は高まっているものの、Linux GUIアプリケーションを開発していることがない限り、メリットを享受できない可能性は高いでしょう。
また、本記事で紹介したような環境を利用して複数人でコンテナを用いた開発を進めていくとコンテナイメージの置き場(レジストリ)に困ることがあります。レジストリサービスは複数あるので、どの方法でコンテナイメージを管理するか検討しておくことを推奨します。参考までに幾つか選択肢を紹介します。
Docker Hubではない別のレジストリを使用してイメージを取得する方法はDocker公式ドキュメントも参考になるでしょう。
本記事がコンテナを用いた開発業務に関わる皆さまの生産性向上に寄与すれば幸いです。
1978年生まれ、神奈川県横須賀市出身。メーカー系システムインテグレーター、ISP、商社系ネットワークインテグレーターで、インフラエンジニアとしてプリセールスからITインフラ設計/構築/運用と、上流工程より一貫して携わる。現在はWebシステム開発運用会社でオンプレミス環境からパブリッククラウドへの移行案件を担当している。
Copyright © ITmedia, Inc. All Rights Reserved.