背景
興味があるライブラリをDocker環境でテストしていたところGUI(画面表示、x window)が必須なプログラムが含まれていて困りましたが、調べて試行錯誤したらDockerのコンテナでGUIが必要なプログラムを動かせました。備忘録として設定方法を記事に残します。
動かす対象 ubuntuコンテナ上のgedit
下記のDockerfileでgedit(文章編集プログラム、テキストエディタ)をインストールしたubuntuコンテナを作成し、geditを起動してホストOSに表示しますDockerfile
FROM ubuntu:22.04
WORKDIR /app
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN apt update
RUN apt install -y gedit
hostがubuntuのときにtimezoneの設定でコンテナのbuildが止まってしまったので、/etc/localtimeに地域情報を入れています。
参考
Docker Build中に Configuring tzdataでハング
Ubuntu 20.04のdocker build時にタイムゾーン選択を求められた時の対処メモ
hostがubuntuの場合
環境- ubuntu22.04
- docker version24.0.5
公式のインストール手順に従いました
Dockerfileを配置したフォルダに移動してコンテナをbuildします。
コンテナのタグはubuntu-geditとしています。
このコマンドは一度実行すれば良いです。
docker buildx build . -t ubuntu-gedit
x windowのlocalからの接続を有効にします。
このコマンドはログインの度に実施が必要です。
xhost +local:
hostと接続しつつDISPLAYという変数をhostと同じ値に設定してコンテナのgeditを実行します。
docker run --net host -e DISPLAY -it ubuntu-gedit gedit
期待通りubuntuのhost上でubuntuコンテナのgeditを実行できました。
参考
DockerでGUIアプリケーションを開く基本的な押さえどころ
ヘッドレスでKinectのDepthエンジンを使う
hostがwindowsの場合
環境- windows 10
- docker desktop
下記コマンドでインストールしました。winget install Docker.DockerDesktop
- wsl v2
docker desktopの動作に必要です。
下記コマンドでインストールしてv2に変更しました。
set-versionコマンドで処理が数秒で終わってしまう場合は、表示される警告文のurlにアクセスしてwsl v2用のプログラムをインストールしてください。
また、wsl v2はbiosで仮想化処理(Intel Virtualization Technology)を有効にする必要もあります。wsl --install -D Ubuntu
wsl -set-version Ubuntu 2
# 確認
wsl -l -v - VcXsrv
windowsで動くx serverです。
下記コマンドでインストールしました。winget install marha.VcXsrv
スタートメニューからdocker desktopを選択して実行してください。
docker desktopを動かしておかないとpower shellでdockerを実行してもデーモン不在で動きません。
この手順はログインの度に必要です。
dockerを動かしたらDockerfileを配置したフォルダに移動してコンテナをbuildします。
コンテナのタグはubuntu-geditとしています。
このコマンドは一度実行すれば良いです。
docker buildx build . -t ubuntu-gedit
スタートメニューからXLaunchを実行します。
設定を聞かれますが標準設定で問題ありません。
この手順はログインの度に必要です。
power shellでhostと接続し、DISPLAYとして「host.docker.internal:0.0」を渡し、コンテナのgeditを実行します。
docker run -e "DISPLAY=host.docker.internal:0.0" --net host -it ubuntu-gedit bash -c gedit
期待通りに動きました。
参考
Dockerの初歩と詰まったことへの備忘録
Install WSL command
WSL2をインストールして使うときの注意点
おわり
dockerのコンテナ上で動かすGUIプログラムをhostの画面に表示して実行できました。今までGUIのプログラムはdockerの外で開発するしか無いと思っていましたが、この仕組みを使えばGUIプログラム開発にもdockerを使えて便利な場面がありそうです。
更にwindowsでも
参考
Dockerfile作成時Docker Build中に Configuring tzdataでハング
Ubuntu 20.04のdocker build時にタイムゾーン選択を求められた時の対処メモ
hostがubuntuの場合
DockerでGUIアプリケーションを開く基本的な押さえどころ
ヘッドレスでKinectのDepthエンジンを使う
hostがwindowsの場合
Dockerの初歩と詰まったことへの備忘録
Install WSL command
WSL2をインストールして使うときの注意点
0 件のコメント :
コメントを投稿