「コンテナーがいっぱい」と聞くと、なんだか港の風景を思い出してしまうが、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の上にあるのかといった違いのみだ。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ