WSL containerを触ってみた
環境
- Windows 11 Pro 25H2 (OS Build 26200.8655)
- Windows Subsystem for Linux 2.9.3
- Git for Windows (git version 2.54.0.windows.1)
インストール
特に再起動などは要求されず、下記のコマンドを打ち、後は指示にしたがうだけで終わりました。
ただし、Docker Desktop on Windowsとの相性は悪いらしく、WSL needs updatingの画面が表示されました。現在使っているのが、Docker Desktop on Windows 4.75.0 (227598) と少し古いのが影響しているのかもしれません。
wsl --update --pre-release
使ってみる
基本は docker コマンドの代わりに wslc コマンドを叩くだけで使えます。検証するにあたり、Docker Composeが移植できるか試したかったのですが、どうやらそちらは非対応のよう。
Clystian氏 がパッチを作っているらしく、そちらはある程度試せる状態の用です。詳細は clystian/WSLのPR #1 をご参照ください。
また、公式リポジトリの Discussion #40836 及び Issue #40948 はあまり活発ではなさそうです。WSL Container自体が最近の発表かつ、Public Preview入りしたばかりですから、これはばかりはしょうがないです。
下記に実際に打ってみたコマンドを貼ります。最低限コンテナで遊ぶ分には問題なく動いてくれます。
# Ubuntuのシェルをお試し
> wslc run --rm -it ubuntu:noble
# ps等の有名なショートカットは普通に動く
> wslc ps
CONTAINER ID NAME IMAGE CREATED STATUS PORTS
AADC7244B1FB noble_beartooth ubuntu:noble 16 minutes ago running 16 minutes ago
# 独自のPHPIpam Dockerイメージのビルド
# Src: https://github.com/mkaraki/phpipam-frankenphp-docker/tree/897f4c2f121d8e7c991c23c984e1bb6897b6931d
# デフォルトだと動かない為、後述する修正を実施。
> wslc build -t phpipam:latest .
# 簡単に http://localhost:8080 で接続できることを確認
> wslc run --rm -it -p 8080:80 phpipam:latest
# マウントテスト
# 先頭に`/mnt/`を付けたりもしたが、ダメそうである。
> wslc run --rm -it -p 8080:80 -v /d/projects/phpipam-frankenphp-docker/Dockerfile:/test phpipam:latest
> wslc exec -it 1da35be50090 sh
$ cat /test
cat: /test: Is a directory
Docker Buildのお試し
前セクションで wslc build コマンドを叩きましたが、これはうまく動きませんでした。表示されたWARNING、ERRORは下記の通り。
WARNING: current commit information was not captured by the build: git was not found in the system: exec: "git": executable file not found in $PATH
ERROR: failed to solve: dockerfile parse error on line 19: unknown flag: exclude
まず、本環境にはGit for Windowsがインストールされていますが、これは認識されないようです。
そして根本的なエラーとしては、COPY 命令における --exclude オプションを認識していない。本問題の解決は容易で、ファイル先頭に # syntax=docker/dockerfile:1.25.0 とDockerfileのシンタックスバージョンを指定することで解決しました。
標準で使われているSyntaxバージョンについては調査して居ませんが、これからはSyntaxバージョンを指定するようにした方が安全かもしれません。
全体的な感想
compose コマンドや cp コマンドが無いなど、Docker Desktop on Windowsの代替として使うにはあまりにも頼りないですが、簡単なデータベースを検証用途で動かす等の用途ではある程度使えそうです。
Network系のコマンドや、Volume系のコマンドは検証から外しましたが、Docker Compose実装パッチのスクリーンショットを見る限り、こちらもうまく動いてくれそうです。