WSL2環境でDocker Desktopを使わずにDockerを使う
2022年11月26日
AWSが先日公開したfinchのように、非Linux環境におけるDocker環境に関して脱Docker Desktopの流れがあります。実はWindows環境のWSL2では、つい最近素のDocker Engineが使えるようになったのはご存知でしょうか?
「Windows Subsystem for Linux」が「systemd」に対応へ - 窓の杜
Microsoft Store版「Windows Subsystem for Linux」がv1.0.0に到達、プレビューを卒業 - 窓の杜
鍵は11月16日に正式版になったばかりのStore版WSLです。
そもそもなぜWSLでは、今までDocker Engineを使えなかったのか
今までのWSL2はDocker Engineを動かすために必須の、systemdに対応していませんでした。
systemdはLinux環境で使われているinitというもので、このinitがすべてのプロセスの親になっており、バックグラウンドで常に動いているデーモンなども管理しています。Docker Engineはsystemdに依存しているので、systemdのないWSL環境では動作しなかったということです。今までのWSLはinitがWSL独自のものになっていたのですが、Store版WSL2ではついにsystemdに対応しました。
ちなみに、非Linux環境においてDockerを使うためのソリューションでは仮想マシンを立てるものが多いのですが、Dockerはコンテナにすぎないため「WSL2の中にさらに仮想マシンを動かす」というようなことにはなりません。Dockerを動かすにはLinuxの環境が必要なので、Windowsでは(本物のLinuxが動く仮想マシンである)WSL2の上に乗せる、macOSでは仮想マシンを立てる、という解決方法がとられているのです。
実際に使ってみよう
まずMicrosoft StoreからWSLをインストールします。また現在新規でwsl --install
でのセットアップをするとStore版がインストールされるようになっているようです。
PowerShellかコマンドプロンプトでwsl --version
を実行して、WSL バージョンが1.0.0.0以降になっていれば、その環境ではStore版WSLが使われています。
ArchWSL
普段使っているのがArchWSLなので、まずそこから試してみます。
WSL環境内の/etc/wsl.conf
でsystemdを使うように指定します。ArchWSLの場合は最初からいくつか記述がなされており、もしかすると比較的新しいものだと最初からsystemdの使用が指定されているかもしれません。
systemdの使用を指定したら、いったんWSLを終了します。これはWindowsのコマンドプロンプトやPowerShellで行ってください。
WSL環境を開いたら、Dockerをインストールします。Arch Linuxでは特に難しいことはありません。
dockerのデーモンを登録し、起動します。これが以前のWSLではできなかったのです。
動かしてみましょう。
WSL2で、Docker DesktopやRancher DesktopでないDockerが動いています!
Ubuntu
WSLで動かすディストロとしてはより一般的なUbuntuでも試してみます。/etc/wsl.conf
を編集してsystemdを有効にするのは一緒です。
有効にしたら忘れずにWSLの再起動を。
Ubuntuにおいて、Docker EngineのインストールはDocker公式の案内に従うことになります。Dockerとしては有償のDocker Desktopを推しているようで、Docker Engineのドキュメントは少し埋もれるような形になってしまいました。
インストールが終わったらデーモンを立ち上げておきます。
docker
コマンドはUbuntuだとsudo
が要ります。
WSL2環境では「ふつうのDocker」が使えます
焦っていろいろなソリューションを試すよりは、Dockerが提供しているものに乗っかるわけなので安心感があると思っています。ただしGUIがないこと、Kubernatesについてはまた別の話になってくる辺りには注意が必要でしょう(k8sについては私がよくわかっていないので、よくわかっている方におまかせします!)。