2022年3月15日火曜日

Windows の Docker Desktop で、 GUI アプリを動かす

Debian コンテナで xeyes を実行し、目玉を確認するところまで。

前提

事前準備

Docker Desktop の WSL Integration を有効にする

Docker Desktop では、 WSL2 ディストリビューションから Docker Desktop の Docker Engine へアクセスするための仕組み「WSL Integration」を提供している。

WSL Integration を有効にすることで、 WSL ディストリビューション内で docker コマンドが実行可能となり、そのコマンドで Docker Desktop の Docker Engine へアクセスできるようになる。

  1. タスクトレイ内の Docker アイコン右クリック -> Setting -> Resources -> WSL INTEGRATION を選択
    • Docker を実行する WSL2 ディストリビューションを選択
    • 今回は、デフォルトディストリビューションの Ubuntu-20.04 を利用するため、 Enable integration with my default WSL distro にチェックを入れる

Docker で GUI アプリを実行

Debian コンテナをで、 xeyes を実行する。

WSL ディストリビューション起動

WSL2 ディストリビューションの、 Ubuntu-20.04 を起動。

コンテナ起動

WSL2 のディストリビューションには、 WSLg で GUI を実行するための環境変数とディレクトリが用意されている。 それをマウントしながら Docker コンテナを起動する。

Ubuntu 上で以下コマンドを実行。

docker run -it --rm \
    -e  DISPLAY=$DISPLAY \
    -e  WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
    -e  XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
    -e  PULSE_SERVER=$PULSE_SERVER \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /mnt/wslg:/mnt/wslg \
    debian bash

WSLg に必要な環境変数・ディレクトリは以下 6 つ。

  • -e DISPLAY=$DISPLAY
  • -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY
  • -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR
  • -e PULSE_SERVER=$PULSE_SERVER
  • -v /tmp/.X11-unix:/tmp/.X11-unix
  • -v /mnt/wslg:/mnt/wslg

xeyes をインストールして実行

起動した Debian コンテナ上で以下コマンドを実行。

apt update
apt install -y x11-apps
xeyes

これで、Windows 上に、 xeyes の目玉が表示されるはず。

参考資料

0 件のコメント:

コメントを投稿