GUIを使うためのdocker設定
モチベーション
書籍のgithubリポジトリやライブラリを動かすときに、それぞれ依存するライブラリが違うので、dockerを使いたいです。 ただ、強化学習などGUIが使われている場合、通常のdockerの設定では上手くいかないことも多いので、その辺を記述してみました。
dockerなどは素人なので、誤り、セキュリティ上の懸念などがあれば教えて下さい。
GUI用の設定
下記のQiitaおよび参照先が参考になりました。
上記の方法では、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の対応に結構苦戦しました。
その他感想・メモ
- dockerだと気兼ねなく環境を壊せるので気分が良い
- 私が試したときはnvidia container toolkitではOpenGLに対応できず、nvidia-docker2を使用している
- docker-composeを使う方法もあるが、とりあえずdocker runでやっている
- githubに置いてあるrequirements.txtをそのまま実行するか、anacondaから始めて足りないものだけinstallするか
gpuでないtensorflowを入れられることもあるので、いずれにしてもrequirements.txtは確認したほうが良いかもしれない