はじめに
docker上にGUIアプリを乗せたいなーという状況があると思います。しかし、dockerにGUIを乗っけている例が少なく、まとまった情報が集められません。情報を集めて、実装してみたけど、なんだかうまくいかないといったケースがそれなりにあると思います。実際に私もdockerにGUIアプリを乗っける際に、いくつかのポイントで詰まりました。当記事では、なんだかうまくいかないの原因のヒントになるかもしれない、私の体験した詰まりポイントを紹介していきます。みなさまのdocker GUI環境構築の助けになれば幸いです。
実際に私が作ったvscode(visual studio code)の入ったイメージをbuildするdockerfileをアップしています。
興味がある方はどうぞ。( https://github.com/yn-git/vscode-in-docker )
1. GUIを表示させる際の詰まりポイント
OpenGLを使用するGUIアプリへの対応
DockerはOpenGLをサポートしていない
通常、dockerではOpenGLのアプリを描写できません。しかし、GUIアプリには、OpenGLを使用するものがあります。もし、そのようなGUIアプリを描写しようとすると、下記のようなエラーがでると思います。そんなエラーなんて出力されないんだけど・・・という方は、アプリのエラー出力がされていないかもしれません。オプションを指定することで、エラーを出力してくれるアプリもあります。
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
サードパーティの力を借りることで描写が可能になる
3つの作業を行うことで、dockerでも、OpenGLを使用するGUIアプリも描写可能です。
1. nvidia-docker2をインストールする
インストール方法はこちらに詳しく書かれています。
2. build時にopenGLをサポートしたイメージをベースにする
nvidia-docker2そのものはOpenGLをサポートしていません。そのため、OpenGLをサポートした専用のイメージが提供されています。この専用イメージをベースイメージとして利用することで、OpenGLが利用できるイメージが作成できます。
専用のイメージの詳細はこちらで確認できます。
3. run時にオプションとして、--runtime=nvidiaを指定する
nvidia-docker2のサポートをコンテナが利用できるように、オプションを指定する必要があります。
docker run --runtime=nvidia ~
Docker for Windows + VcXsrv(windows環境)ではうまくいかなかった
当初、私はDocker for Windows + VcXsrv(Windowsで動くフリーのXサーバ)で環境を構築していました。ただ、fcitxをインストールした後にvscodeを表示させようとすると、VcXsrvフリーズしてしまいました。私の力では、この問題を解決できず、Linuxに逃げました。もし、Windowsでなんとか実装しようと頑張っている方は、Linuxに逃げたら、楽になるかもしれませんよ。
2. 日本語に対応させる
GUIの日本語表示には日本語フォントが必要
公式のイメージをベースにしてbuildすることは多いと思います。しかし、すでに日本語フォントがインストールされている公式イメージはほとんどないと思います。その状態で、LANG=ja_JP.UTF-8にしただけでは、GUIの日本語は正常に表示されません。文字化けして、豆腐(□)が表示されます。お好みの日本語フォントをインストールすることで、文字化けを解消できます。
mozcはrootだと動かない
mozcとは、Googleが提供するIME(日本語入力システム)です。mozcは、どうやらrootでは動かないそうです。もし、他のIMEを使っていて、半角/全角を押し反応があるのに、日本語入力できないときは、rootが問題かもしれません。dockerの思想を無視して、コンテナ内でもrootで作業していた私は、この問題で一番つまずきました・・・(ごめんなさい、もうしません;;)