😸

DockerでGUIアプリを使う

2025/02/28に公開

Dockerの移植耐性をGUIアプリにも適用しようというお話です。

DockerでGUIアプリを使う

結論としては、こちらのDocker imageを使用することで、GUIを高速にリモートからホストへのGUI転送が可能になります。技術的には、Virtual Network Computing(VNC)⇒ブラウザを経由することで高速化が図られています。

手順

Dockerコンテナを起動する。

docker run -it -p 6080:6080 akarita/docker-ubuntu-desktop

ポートを転送する。(WSLだと不要です。)

ssh -N -L 6080:localhost:6080 user@ip

ブラウザから画面を表示し、DISPLAY変数を確認する。
http://localhost:6080/vnc.html

外部ターミナルからの起動については、Dockerコンテナ内にアタッチしたターミナル内でDISPLAY環境変数を正しく設定することで可能です。

以下の例では、ROSのrvizを外部ターミナルから起動しています。

# 外部ターミナル1
roscore
# 外部ターミナル2
export DISPLAY=:1
rviz

ブラウザ内のターミナルから操作をする必要がないので、VSCodeでもなんでもお好きなターミナルからどうぞ!

さいごに

よく使われるX11 ForwardingによるGUI転送は、ターミナルのみで操作が完結する点で便利です。しかし、冗長な描画情報を転送するために遅延が発生してしまいます。一方で、上述のVNC⇒ブラウザを経由した転送は変更差分のみを転送するため高速な転送が可能です。

関連記事

https://zenn.dev/headwaters/articles/78ea44ec2441b1

ヘッドウォータース

Discussion