0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLコンテナを試す

0
Last updated at Posted at 2026-10-12

What's?

WSL 2.9.3からWSLC(WSLコンテナ)が使えるようになりました。

せっかくなので試してみましょう。

WSLC(WSLコンテナ)?

ドキュメントはこちらです。

設定はこちら。

WSLコンテナのリリースブログはこちら。

アーキテクチャに関するブログ記事。

ドキュメントを中心に見ていきましょうか。

  • WSLコンテナとはLinuxコンテナのビルド、実行、操作を行えるwslc、WSLコンテナAPIの2つの主要コンポーネントから構成される
  • WSL 2.9.3以降で利用可能

リリースブログには、パブリックプレビュー以降の変更が書かれていますね…。

パブリックプレビュー時のブログ記事はこちら。

ただ、こちらも実際の使い方について詳しく書かれているわけではありません。
dockerコマンドに似たものとして、使ってみた方が早そうですね。

環境

今回の環境はこちら。

PS > wsl --version
WSL バージョン: 3.0.1.0
カーネル バージョン: 6.18.40.1-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.9457

WSLCを使ってみる

それでは使ってみましょう。

バージョン。

PS > wslc --version
wslc 3.0.1.0

ヘルプ。

PS > wslc --help
Copyright (c) Microsoft Corporation.All rights reserved.
この製品に関するプライバシー情報については、https://aka.ms/privacy にアクセスしてください。

WSLC はLinux 用 Windows サブシステム Container CLI ツールです。これにより、コマンド ラインから WSL コンテナーの管理と対話が可能になります。

使用: wslc [global-options] [<コマンド>] [オプション]

コマンド:
  container  コンテナーを管理します。
  image      イメージを管理します。
  network    ネットワークを管理します。
  registry   レジストリ資格情報を管理します。
  settings   既定のエディターで設定ファイルを開きます。
  system     システムレベルのコマンド
  volume     ボリュームを管理します。
  attach     コンテナーにアタッチします。
  build      Dockerfile からイメージをビルドします。
  create     コンテナーを作成します。
  exec       実行中のコンテナーでコマンドを実行します。
  events     コンテナー イベントを監視します。
  export     コンテナーのファイルシステムを tar アーカイブとしてエクスポートします。
  images     イメージを一覧表示します。
  import     tarball から画像をインポートします。
  info       システム情報を表示します。
  inspect    オブジェクトを検査します。
  kill       1 つ以上の実行中のコンテナーを強制終了します。
  list       コンテナーを一覧表示します。
  load       イメージを読み込みます。
  login      レジストリにログインします。
  logout     レジストリからログアウトします。
  logs       コンテナー ログを表示します。
  pull       イメージをプルします。
  push       イメージをレジストリにアップロードします。
  remove     コンテナーを削除します。
  restart    コンテナーを再起動します。
  rmi        イメージを削除します。
  run        コンテナーを実行します。
  save       イメージを保存します。
  start      コンテナーを開始します。
  stats      コンテナーのリソース使用状況の統計を表示します。
  stop       コンテナーを停止します。
  tag        イメージにタグを付けます。
  version    バージョン情報を表示します。

特定のコマンドの詳細については、それにヘルプ オプションを渡します。 [-?]

オプション :
  -v  --version  このツールのバージョン情報を表示します
  -?  --help     選択したコマンドに関するヘルプを表示

'wslc' のグローバル オプション:
      --session  使用するセッションを指定する

ヘルプはサブコマンドごとに見れます。

PS > wslc run --help
Copyright (c) Microsoft Corporation.All rights reserved.
この製品に関するプライバシー情報については、https://aka.ms/privacy にアクセスしてください。

コンテナーを実行します。デフォルトでは、コンテナーはフォアグラウンドで開始されます。--detach を使用してバックグラウンドで実行します。

使用: wslc run [オプション] <image> [<command>] [<arguments>...]

エイリアス:
  wslc container run, wslc run

引数:
  image      イメージ名
  command    実行するコマンド
  arguments  コンテナーの初期化プロセスに渡す引数

オプション :
      --cidfile              指定されたパスにコンテナー ID を書き込みます
      --cpus                 CPU の数 (例: 0.5、1、2.5)
  -d  --detach               コンテナーをデタッチ モードで実行します
      --dns                  resolv.conf 内の DNS ネームサーバーの IP アドレス
      --dns-option           DNS オプションを設定します
      --dns-search           DNS 検索ドメインを設定します
      --domainname           コンテナー ドメイン名
      --entrypoint           コンテナー初期化プロセスの実行可能ファイルを指定します
  -e  --env                  環境変数の Key=Value のペア
      --env-file             環境変数の key=value のペアを含むファイル
      --gpus                 Add GPU devices to the container ('all' to pass all GPUs)
      --health-cmd           コンテナーの正常性をチェックするために実行するコマンド
      --health-interval      正常性チェックの実行間隔 (例: 30s, 1m30s)
      --health-retries       コンテナーを異常として報告するために必要な連続失敗回数
      --health-start-period  正常性チェックのカウントダウンを開始する前にコンテナーを初期化するための開始期間 (例: 30s、1m30s)
      --health-timeout       1 回の正常性チェックを実行するために許可される最大時間 (例: 30s、1m30s)
  -h  --hostname             コンテナー ホスト名
  -i  --interactive          stdin にアタッチして開いたままにする
      --ip                   コンテナーにネットワーク上の IPv4 アドレスを割り当てます
  -l  --label                オブジェクトにメタデータを設定します
  -m  --memory               メモリ制限 (例: 512M, 1G)
      --mount                ファイルシステム マウントをコンテナーにアタッチします
      --name                 コンテナーの名前
      --network              コンテナーをネットワークに接続する
      --network-alias        コンテナーにネットワーク スコープのエイリアスを追加する
      --no-healthcheck       コンテナーで指定された正常性チェックを無効にする
  -p  --publish              コンテナーからホストへのポートを公開します
  -P  --publish-all          公開されているすべてのポートをランダム ホスト ポートに発行する
      --pull                 イメージのプル ポリシー (always|missing|never) (既定値: missing)
      --rm                   コンテナーを停止後に削除します
      --shm-size             /dev/shm のサイズ (例: 64M、1G)
      --stop-signal          コンテナーを停止するシグナル
      --stop-timeout         コンテナーを強制終了する前に停止するタイムアウトです (秒単位、タイムアウトなしの場合は -1)
      --tmpfs                tmpfs を指定されたパスにあるコンテナーにマウントします
  -t  --tty                  コンテナー プロセスで TTY を開きます。
      --ulimit               Ulimit オプション (形式: <name>=<soft>[:<hard>]、無制限の場合は -1 を使用)
  -u  --user                 プロセスのユーザー ID (name|uid|uid:gid)
  -v  --volume               ボリュームをコンテナーにバインド マウントします
  -w  --workdir              コンテナー内の作業ディレクトリ
  -?  --help                 選択したコマンドに関するヘルプを表示

'wslc' のグローバル オプション:
      --session              使用するセッションを指定する

Dockerですね。

nginxで試してみましょう。

PS > wslc run -it --rm --name nginx nginx:1.31.6-trixie

コンテナイメージのダウンロードが始まります。

イメージ 'nginx:1.31.6-trixie' が見つかりません。プルしています
1.31.6-trixie: Pulling from library/nginx
ecc510c1e359: Extracting [=============================>] 29.16MB/29.84MB
04bdbc7ea6b5: Download complete
807ab930f3a0: Download complete
1efc53192927: Download complete
947d22046304: Download complete
8020170dc65f: Download complete
f7e1db57b58b: Download complete

コンテナのIPアドレスを確認。

PS > wslc inspect nginx | Select-String IPA

          "IPAMConfig": null,
          "IPAddress": "172.17.0.2",


アクセスしてみましょう。

PS > Invoke-WebRequest http://172.17.0.2
Invoke-WebRequest : リモート サーバーに接続できません。
At line:1 char:1
+ Invoke-WebRequest http://172.17.0.2
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequ
   est) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Comma
   nds.InvokeWebRequestCommand

…到達できませんね?どういうことでしょう?

コンテナ起動時にローカルのポートにバインドするようにしてみます。

PS > wslc run -it --rm --name nginx -p 80:80 nginx:1.31.6-trixie

今度は到達できました。

PS > (Invoke-WebRequest http://localhost).Content
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, nginx is successfully installed and working.
Further configuration is required for the web server, reverse proxy,
API gateway, load balancer, content cache, or other features.</p>

<p>For online documentation and support please refer to
<a href="https://nginx.org/">nginx.org</a>.<br/>
To engage with the community please visit
<a href="https://community.nginx.org/">community.nginx.org</a>.<br/>
For enterprise grade support, professional services, additional
security features and capabilities please refer to
<a href="https://f5.com/nginx">f5.com/nginx</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

OKですね。

本当に?

ローカルポートにバインドさせなかった時には、コンテナにアクセスできませんでした。
また、コンテナにしては起動が重い時がありました。

これはどういうことでしょう?とこちらを確認してみます。

image.png

これを見ていると、どうも間にLinux VMが挟まっていますね…。

とはいえ、WSLディストリビューションが動作しているわけではなさそうです。

PS > wsl --list
Linux 用 Windows サブシステムにインストールされているディストリビューションはありません。
この問題を解決するには、以下の手順に従ってディストリビューションをインストールしてください:

'wsl.exe --list --online' を使用して利用可能な配布を一覧表示する
および 'wsl.exe --install <Distro>' を使用してインストールしてください。

WSLCのコンテナとしては存在しますけどね。

PS > wslc ls
コンテナー ID       画像                    コマンド                     作成済み   状態             ポート   名前
fa12626dad92   nginx:1.31.6-trixie   "/docker-entrypoint.…"   2 分前   Up 2 minutes         nginx

この時にHost Compute System(HCS)の機能で作られる仮想マシンの一覧を見てみます。

PS > hcsdiag list
7BB9D250-53BE-4E49-AD4B-CB58DFF6F7CA
    VM,                         Running, 7BB9D250-53BE-4E49-AD4B-CB58DFF6F7CA, wslc-cli-admin-user

なんかありますね?

WSLを使っている時は、起動するWSLディストリビューションを増やしてもこの仮想マシンは増えませんでした。

ではここにWSLディストリビューションを追加してみます。

PS > wsl --install
ダウンロードしています: Ubuntu
[                           1.5%                           ]

WSLディストリビューション起動中に、仮想マシンの一覧を見てみます。

PS > hcsdiag list
7BB9D250-53BE-4E49-AD4B-CB58DFF6F7CA
    VM,                         Running, 7BB9D250-53BE-4E49-AD4B-CB58DFF6F7CA, wslc-cli-admin-user

E8F16996-8E4F-4F2F-9B33-406BC1B7EFCF
    VM,                         Running, E8F16996-8E4F-4F2F-9B33-406BC1B7EFCF, WSL

増えましたよ…。

というわけで、WSLCは通常のWSLディストリビューションとは異なる仮想マシン上で動作していると考えた方がよさそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?