GUIを使うためのdocker設定

モチベーション

書籍のgithubリポジトリやライブラリを動かすときに、それぞれ依存するライブラリが違うので、dockerを使いたいです。 ただ、強化学習などGUIが使われている場合、通常のdockerの設定では上手くいかないことも多いので、その辺を記述してみました。

dockerなどは素人なので、誤り、セキュリティ上の懸念などがあれば教えて下さい。

GUI用の設定

下記のQiitaおよび参照先が参考になりました。

qiita.com

wiki.ros.org

上記の方法では、rootでなくユーザーでdockerに入ります。
ユーザーで入ると、dockerで作成したファイルのownerがrootになってしまう問題が解決されるメリットもあります。

ただし、/home/$USERの権限が無いと、jupyter notebookなど上手く起動してくれないプログラムがあります。
(--allow-rootで起動する方法もあるが、作成ファイルのownerがrootとなってしまうので良くない)

そのため、上記の方法では/home/$USERをマウントしていますが、この方法だとhostの~/.bashrcなどを読んでしまうし、/home/$USERに書き込まれる可能性もあります。 これを解決するには、コンテナで$USERをownerとして/home/$USER を作れば良いです。 というわけで、dockerfileに以下のようなコマンドを書きました。

# docker build時に以下のように引数を指定する
# --build-arg USER=$USER --build-arg UID=$(id -u) --build-arg GID=$(id -g) 

ARG USER
ARG UID
ARG GID
RUN mkdir /home/$USER && chown $UID:$GID /home/$USER

Pythonで学ぶ強化学習 -入門から実践まで(https://www.amazon.co.jp/dp/4065172519)」
を動かすためのdockerfile等をgistに置いています。OpenGLの対応に結構苦戦しました。

GUIを使うためのdocker設定 · GitHub

その他感想・メモ

  • dockerだと気兼ねなく環境を壊せるので気分が良い
  • 私が試したときはnvidia container toolkitではOpenGLに対応できず、nvidia-docker2を使用している
  • docker-composeを使う方法もあるが、とりあえずdocker runでやっている
  • githubに置いてあるrequirements.txtをそのまま実行するか、anacondaから始めて足りないものだけinstallするか
    gpuでないtensorflowを入れられることもあるので、いずれにしてもrequirements.txtは確認したほうが良いかもしれない  

参考資料

amalog.hateblo.jp

pythonspeed.com

qiita.com