WSL2のAlpine LinuxでDockerを使う
以前WSL2にAlpine Linuxをインストールする手順を紹介しましたが、この環境にDockerを導入してみます。
WSL2でDockerを使用する方法については既に幾つものWebサイトで解説されていますので、後述の自動起動に関する手順など参考にさせていただきました。
dockerと関連パッケージ導入
docker-ceとdocker composeの他に、自動起動するためのOpenRCを導入します。
apk add openrc docker docker-cli-compose
openrc sysinit
touch /run/openrc/softlevel
rc-update add docker
一般ユーザー用設定
一般ユーザー権限でdockerを使用できるようにするためには、対象ユーザーをdockerグループに所属させる必要があります。
addgroup <ユーザー名> docker
自動起動失敗回避
2023年7月頃のdocker-openrcパッケージ更新によりOpenRC経由でのdockerdの起動が失敗してしまうようになりました。
これはAlpine Linuxのissueによるとdockerが生成したネットワークがnetworkingサービスの再起動時に壊れてしまうことに対応するため、dockerとnetworkingに依存関係を設定したことに起因するようです。
WSL2にAlpine Linuxのminirootfsをインポートした環境ではnetworkingサービスは使用されず、設定ファイルが存在しないためnetworkingの起動に失敗します。そのため、dockerの起動前提を満たせないことになりdockerサービスの起動に失敗してしまいます。
暫定対応として、dockerサービスの起動定義ファイル(/etc/init.d/docker
)を、依存関係が追加されたときのコミットを参照して以前の状態に手動で戻します。
/etc/init.d/docker
のdepend
内のnet
を削除します。
depend() {
- need sysfs cgroups net
+ need sysfs cgroups
after firewall
}
これで、OpenRCからdockerが起動できるようになります。
自動起動設定
Windowsから以下のコマンドを実行することでOpenRCが起動し、OpenRCによってdockerサービスが起動します。
wsl -d Alpine -u root --exec /sbin/openrc sysinit
この方法では、タスクスケジューラーなどでWindowsログイン時に上記コマンドを実行してあげる運用が考えられます。
また、Microsoft Store版WSLではディストリビューション起動時にコマンドを自動実行する機能が追加されています。
今更ながら WSL2 の Alpine で Docker 環境構築という記事に/etc/wsl.conf
の[boot]
セクションに起動コマンドを設定する方法について書かれていました。通常はこちらの手順で自動起動するのが使い勝手が良いと思います。