2017/02/27
Docker で GUI アプリケーションを実行する方法
「Docker 上で GUI アプリケーションを動かす」という投稿を見つけたので、ちょっとやってみました1。
参考
ポイントは以下の3点です。
- 実行時に X11 ソケット
/tmp/.X11-unix/
をボリュームとして共有 - user ID, group ID をホストのユーザーと同じにする
DISPLAY
環境変数をホストのユーザーと同じにする
Firefox は重いので、x11-apps
の時計を表示してみました2。
Docker ファイルの用意
以下のような Dockerfile
を適当なディレクトリに作成。
このとき、uid
, gid
がホストユーザーと同じになるようにします3。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | FROM ubuntu:16.04 RUN apt-get update && apt-get install -y x11-apps # Replace 1000 with your user / group id ARG uid=1000 ARG gid=1000 RUN groupadd -g ${uid} tester && \ useradd -u ${gid} -g tester -r tester && \ mkdir /home/tester && \ chown ${uid}:${gid} -R /home/tester USER tester WORKDIR /home/tester |
ビルド
ビルドしてイメージを作成
$ docker build -t gui_test . |
uid
, gid
を指定する場合は以下
$ docker build --build-arg uid=1001 --build-arg gid=1001 -t gui_test . |
コンテナの実行
実行時に -e
, -v
オプションで環境変数 DISPLAY
と X11 ソケットを適切に設定する必要があります。
以下ではインタラクティブシェルを起動していますが、直接 xclock
を起動することも可能です。
$ docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix gui_test /bin/bash |
xclock を立ち上げる
tester@6cbd2a43f6c6:~$ xclock |
表示されました。
ホストとタイムゾーンを揃える
GUIとは関係ないですが、Docker 内の時刻は UTC になっているので、表示される時計も UTC のものです。
ホストとタイムゾーンを揃えたい場合は以下のように、/etc/localtime
を共有します。
$ docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix -v /etc/localtime:/etc/localtime:ro gcalc /bin/bash |
参考
0 件のコメント:
コメントを投稿