WSL Containersの使い方

WSL Containersは、DockerやPodmanなどのサードパーティツールを使わずに、WSL2(Windows Subsystem for Linux 2)上でLinuxコンテナをネイティブに実行できる新機能です。

本記事では、現役エンジニアの管理人が、WSL Containersのインストール方法や使い方、Dockerとの違いを紹介します。また、Dockerから乗り換えるべきかどうかも解説します。

※WSLの全体像や基本設定を確認したい方は、WSL完全ガイドを先にご覧ください。

インストール前の前提条件

  • OS: Windows 11 または Windows 10 Build 19044以上
  • WSLバージョン: WSL2をインストール済み

もしWSL2が未設定の場合、関連記事の「WSL2のWindows11へのインストール、起動とシャットダウン」をご参照ください。

wslcのインストール

WSL Containersを使うには、wslc(または wslc.exe)というコンテナ操作用のCLIツールが必要です。本記事執筆時点のWSL最新安定バージョン(2.7.10)にはまだ含まれていないため、リリース前バージョン(プレリリース版)に更新します。

wsl --update --pre-release

更新を有効化するため、WSLを再起動(終了)します。

wsl --shutdown

WSLのバージョンを確認し、2.9.4以降になっていれば更新成功です。

 wsl --version

実行結果例:

WSL バージョン: 2.9.4.0
カーネル バージョン: 6.18.35.2-1
WSLg バージョン: 1.0.79
MSRDC バージョン: 1.2.7214
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26200.8875

新しくPowerShellを起動すると、自動的にPATHが通って wslc コマンドが使えるようになります。

wslc --help

注: Linuxディストリビューション(Ubuntu等)のターミナル内から実行する場合は、wslc.exe のように拡張子を明示して実行します。

wslcコマンドの使い方

wslc コマンドは、サブコマンドやオプション含め、docker コマンドとほぼ同様の感覚で操作できます。

コンテナ実行:

wslc run --rm -it ubuntu:latest bash -c "echo Hello world from WSL container!"

イメージ一覧の表示

wslc image ls

実行中コンテナ一覧

wslc list

コンテナ停止:

wslc stop container_name

コンテナ内でBash起動:

wslc exec -it container_name bash

Windowsホストへのコンテナポート公開

Dockerと同様に、コンテナの任意のポートをWindowsホストマシンに公開できます。

# コンテナ80番ポートをホスト8080番ポートで公開
wslc run -it --rm -d -p 8080:80 --name web nginx

# コンテナ動作の確認 (Windows上から)
curl.exe localhost:8080

# コンテナ停止
wslc stop web

注: Linuxディストリビューション上でコンテナを起動した場合でも、ポートが公開されるのはWindowsホスト側になります。そのため、Linuxディストリビューション側のシェルで curl localhost:8080 を実行しても接続できない場合がありますのでご注意ください。

Dockerfileからのイメージビルド

DockerfileやContainerfileからカスタムイメージをビルド可能です。

Dockerfile例:

FROM alpine:latest
CMD ["echo", "Build test success!"]

カスタムイメージのビルド:

wslc build -t test-alpine .

作成したイメージの実行:

wslc run --rm test-alpine

Dockerとの違い

Docker (Desktop / Engine) と WSL Containers の主な違いは以下の通りです。

デーモンレス

  • ocker: 内部で dockerd というプロセス(デーモン)が常時バックグラウンドで稼働しています。コンテナを起動していなくてもメモリを一定量占有し続けます。
  • WSL Containers (wslc): デーモンレスの設計です。必要な時だけプロセスが起動し、コンテナを停止するとWindowsホストへ即座にメモリを返却します。また、開発用の個別Linuxディストリビューションを常時起動させておく必要もありません。

複数コンテナ連携は現時点では不可

  • Docker: docker-compose.yml を使い、複数サービス(Webサーバー+データベースなど)をコマンド一発で一括起動・連携できます。
  • WSL Containers (wslc): 現時点では wslc 単体でのCompose相当機能がサポートされていません。複数コンテナを組み合わせる複雑な開発環境には、まだDockerに優位性があります。

商用ライセンス不要

  • Docker Desktop: 従業員数250人以上または年間売上1000万ドル以上の企業では有料サブスクリプションが必要です。(※Docker Engine単体はオープンソース/無料)
  • WSL Containers (wslc): Windows自体の機能拡張であるため、企業規模に関係なく完全無料で利用可能です。

WSL Containersの仕組み

WSL Containersは、ユーザーが作成したLinuxディストリビューション(Ubuntu等)とは完全に独立・分離されたセッションで実行されます。これはPowerShellから実行しても、Linuxディストリビューション内から実行しても同様です。

ただし、双方ともにWSL2の共通Linuxカーネル基盤を共有して動作しています。

  • Windows OS
    • WSL2の共通Linuxカーネル
      • ディストリビューション A (例: Ubuntu)
      • ディストリビューション B (例: Debian)
      • WSL Containers (wslc用セッション)
        • コンテナA (例: Nginx)
        • コンテナB (例: Node.js)

そのため、WSL側のUbuntu環境の設定を変更したり環境を壊したりしても、wslc で動作しているコンテナには一切影響を与えません。また、特定のディストリビューションを起動していなくても、wslc のみを取り出して軽量に利用することができます。

まとめ:WSL Containersは単体コンテナ実行ならおすすめ

検証環境の作成やCLIツールのちょっとしたテストなど、単体コンテナを中心に実行する用途であれば、WSL ContainersはDockerに比べてデーモンレスで動作が軽快なため、導入するメリットが十分にあります。

一方で、Webアプリケーションとデータベースを連携させるような複数コンテナの構築・管理においては、引き続き Docker Compose を利用するのが確実です。

今後さらに機能拡張が期待される注目の新機能ですので、気になる方はぜひプレリリース版で体験してみてください!

Linuxでの開発を体系的に学びたい場合はプログラミングスクールもおすすめです。「おすすめのプログラミングスクール」の記事で詳しく紹介しているので、参考にしてみてください。

WSLをさらに使いこなすための全手順はこちら!