2017/02/27
Docker で GUI アプリケーションを実行する方法
「[Docker](https://www.docker.com/) 上で GUI アプリケーションを動かす」という投稿を見つけたので、ちょっとやってみました ポイントは以下の3点です。 - 実行時に X11 ソケット `/tmp/.X11-unix/` をボリュームとして共有 - user ID, group ID をホストのユーザーと同じにする - `DISPLAY` 環境変数をホストのユーザーと同じにする Firefox は重いので、`x11-apps` の時計を表示してみました 。 ### Docker ファイルの用意 以下のような `Dockerfile` を適当なディレクトリに作成。 このとき、`uid`, `gid` がホストユーザーと同じになるようにします 。 Dockerfile ```text 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 ``` ### ビルド ビルドしてイメージを作成 ```console `gutter: false; $ docker build -t gui_test . ``` `uid`, `gid` を指定する場合は以下 ```console `gutter: false; $ docker build --build-arg uid=1001 --build-arg gid=1001 -t gui_test . ``` ### コンテナの実行 実行時に `-e`, `-v` オプションで環境変数 `DISPLAY` と X11 ソケットを適切に設定する必要があります。 以下ではインタラクティブシェルを起動していますが、直接 `xclock` を起動することも可能です。 ```console `gutter: false; $ docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix gui_test /bin/bash ``` ### xclock を立ち上げる ```console `gutter: false; tester@6cbd2a43f6c6:~$ xclock ``` 表示されました。 ### ホストとタイムゾーンを揃える GUIとは関係ないですが、Docker 内の時刻は UTC になっているので、表示される時計も UTC のものです。 ホストとタイムゾーンを揃えたい場合は以下のように、`/etc/localtime` を共有します。 ```console `gutter: false; $ docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix -v /etc/localtime:/etc/localtime:ro gcalc /bin/bash ``` > 参考 > - [Dockerでホストと同じタイムゾーンをコンテナ起動時に設定する - Qiita](http://qiita.com/ganta/items/a0f34866c994ebaeef69)。 > 参考 > - [Running GUI apps with Docker – Fábio Rehm](http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/)
0 件のコメント:
コメントを投稿