「コンテナーがいっぱい」と聞くと、なんだか港の風景を思い出してしまうが、Windowsにもコンテナーが複数ある。コンテナーとは、アプリケーションの独立した実行環境とそこで動作するソフトウェアや設定などをファイル化して実行させるもの。あらかじめコンテナーを作っておけば、あとはそれを組み合わせてシステムを構築できるわけだ。
仮想マシン環境に似ているが、コンテナー自体にはOSは含まれないし、必ずしも仮想マシン支援機能を前提としているためでもない。そもそもコンテナーが普及した1つの理由は、仮想マシンにつきもののオーバーヘッドや長い起動時間、大量のメモリー消費といった問題がないため。コンテナーは、特定のハードウェアに縛られることなく実行でき、システムを複数のコンテナーで構築することも可能であり、このとき仮想マシンに比べて実行オーバーヘッドの低いコンテナーは魅力的だったのだ
Windowsにもコンテナーの機能が取り込まれた
そんなコンテナーブームを受けて、MicrosoftもWindowsにコンテナー技術を持ち込んだ。これを「Windowsコンテナー」(あるいはWindows Container On Windows、WCOW)という。このWindowsコンテナーには大きく2種類あり、1つは「Windowsプロセス分離」(かつてはWindows Server コンテナーといった)、もう1つは「Hyper-V分離」(Hyper-Vコンテナーとも)である。
このWindowsコンテナー、当初はPowerShellベースの管理コマンドを利用する予定だったが、Dockerと提携し、Dockerコマンドを取り込むことにした。これがWindowsにおける「Docker EE for Windows Server」である。
しかし、すでに世の中はLinux上のコンテナーが普及しており、Linuxコンテナーをそのまま使いたいという要望が強かったようだ。これに対応して、Microsoftが作ったのが「Windows Linuxコンテナー」(Linux Container On Windows、LCOW)である。これは、Hyper-Vで専用のLinux仮想マシン(Moby VMと呼ばれている)を動かし、そこでLinuxコンテナーを動作させるもの。仮想マシンを使うため、なにか無理矢理感がないわけではない。
その後、Docker自身がWindows用のDocker for Windowsをリリースする。Docker EE for Windows Serverでは、LCOWは実験的機能として提供されたが、Docker for Windowsでは正式に対応となった。というか、そもそもDockerのコンテナーはLinux用なので、当たり前といえば当たり前のこと。ただし、Docker for Windowsでは、WindowsコンテナーとLinuxコンテナーは同時に利用することはできず、切り替えてどちらかしか使えない。コマンドは同じでも、管理方法などがかなり違うためだ。
同じDockerで2つの実行環境(WindowsとLinux)を扱うことは、かなりユーザーを混乱させた。どちらもDockerであり、どれもコンテナーだからだ。Linuxのコンテナーになれた人には、WindowsのSQLサーバーがDocker Hub(コンテナーが登録されているリポジトリ)にあることに奇妙な感じを抱くし、Windows側のユーザーも、Linuxの環境に違和感を感じた。コンテナーもいっぱいあれば、Dockerもいっぱいあったからだ。
WSL2がWindowsにおけるコンテナーを変えた
そこに登場したのがWSL2だ。Windows内でLinuxを動かす「Windows Subsystem for Linux(WSL)」は、当初は、Linuxカーネルをエミュレーションする形で実現されたが、後継となるWSL2では“本物”のLinuxカーネルを導入した。これにより、WSL2では、オリジナルのDockerがそのまま動くようになった。しかも、仮想マシンよりも起動時間が短く、システム負荷も小さい。
このWSL2に対応して作られたのがDocker Desktopである。Docker Desktopは、Docker for Windowsの後継として作られ、WSL2を使って、Dockerネイティブのコンテナーを動作させる。ただし、制御コマンドや管理ツールは、Windows側で動作する。このあたりをまとめたのが、以下の表だ。
WindowsにはDockerとコンテナーがいっぱいある。とりあえず、今からWindowsユーザーが使うなら、Docker Desktopだろう。Windows 10ではWindowsコンテナーを使う必要はあまりないが、Node.jsなんかをちょっと試してみたい、WordPressをカスタマイズしたいけど稼働中のブログは止めたくないのでコンテナーで試してみる、といった用途になら十分利用できる。Docker DesktopのWSL2環境は、専用のディストリビューションを使うので、WSL2ディストリビューションの環境も変更しない。ちょっと試して、綺麗さっぱり消すこともできる。
ただ今のところ、Windows Insider ProgramのDev Channelで公開されているWSL2ではGPU機能が利用ができない。これは、GPUを使う場合、Linux(WSL2)側で動作するDockerをNVIDIAのモジュールでカスタマイズする必要があるからだ。
現在のDocker Desktopでは、専用のWSL2環境を使う関係で、ユーザーがWSL2側のDockerをカスタマイズすることができない。WSL2のGPU機能が正式機能として取り込まれる頃には、なんとかしてくれるのではないかと思っている。もっとも、そうならないとしてもWSL2でネイティブのDockerコマンドを使えば、GPUもちゃんと動くわけで、違いは管理ツールがWindowsの上にあるのかWSL2の上にあるのかといった違いのみだ。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ













