WSL2上でのDocker環境構築について

はじめに

Windows Subsystem Linux 2(以下WSL2)が正式リリースされてだいぶ経ちます。 簡単にLinux環境を利用できるので、とても便利です。 WindowsLinux環境を使える利点はいろいろありますが、今回はDockerをインストールして使う手順と注意点を紹介したいと思います。

WSL2のセットアップ

WSL2のインストール手順は、Microsoft公式サイトで公開されているので、それを参考にインストールしましょう。

docs.microsoft.com

ディストリビューションは任意のものを選びましょう。シェアで考えるとUbuntuあたりが無難でしょうか。 WSL2とディストリビューションをインストールしたら、起動して環境内部のセットアップに移ります。

systemdの起動構築

一般的なLinux環境では、systemd(システム管理デーモン)が起動していますが、WSL2の環境ではこれが存在していません。 そのため、Dockerをインストールしてもサービスが動作しません。 これを解決する手段として、genieというものが開発されてます。

github.com

これをインストールして実行することで、systemdを動作させることが出来ます。

genie -i

ただしWSL2が一度終了して再度起動した場合は、またsystemdが存在しない状態になります。 起動のたびに上記コマンドを実行すれば解決・・・はするのですが、手作業では面倒くさい。 自動的に実行したいですが、systemdが動いてないのでcronで定義しても動作しません。rc.localファイルに書いてもダメです。 ではどうするのかというと・・・いくつか方法はありますが、私はWindows側からコマンドを実行させる方法を使っています。 以下のコマンドをWindowsコマンドプロンプトで実行すると、WSL2環境にコマンドを実行させることが出来ます。

wsl /bin/bash -l -c "genie -i"

batファイルにして実行するとコマンドプロンプトが一瞬表示されてちょっと気になるので、VBScriptを使い非表示のまま実行するように手を加えます。

CreateObject("Wscript.Shell").run "wsl /bin/bash -l -c 'genie -i'", vbHide

これをWindowsのスタートアップ時に実行させれば、自動的にWSL2環境のsystemdを動作させるようにできます。 コマンドプロンプトを管理者権限で開き、以下のコマンドを実行すると、スタートアップ時に上記の処理を書いたスクリプトファイルを実行するようにできます。

echo CreateObject("Wscript.Shell").run "wsl /bin/bash -l -c 'genie -i'", vbHide > "%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\StartUp\wsl2_genie.vbs"

Docker Engineのインストール

公式サイトの手順に従ってインストールできます。 OSごとに手順が記載されているので、自分の環境にあった手順を見てインストールしましょう。

docs.docker.com

前述したsystemdの起動ができていれば、それ以上特に特殊な手順は必要ありません。 Dockerサービスが起動していれば、以下のコマンドがエラーにならず正常に動作するはずです。

docker ps

Docker Composeのインストール

こちらはDocker Engineだけで十分な場合は、インストールしなくても問題ありません。 インストールする場合は、こちらも公式サイトの手順に従って行いましょう。

docs.docker.com

日本語でインストール手順を紹介した記事も多数ありますが、注意しないと古いバージョン番号を指定して書かれていることがあります。 公式サイトを参照したほうが無難かと思います。

まとめ

WSL2のセットアップと、その環境にDockerを構築する手順を説明しました。 Docker自体には別に特殊な手順は必要ありませんでした。systemdなどWSL2独自の特殊な仕様は注意が必要です。 WSL2は便利ですが、事前に知っておかないと困る仕様などもあります。利用する場合はそれを承知したうえで使っていきましょう。