質問: たとえば、サーバープログラムを、マシンにインストールする場合には、基本的に user を分けると思います。 mysql をインストールしているならば、そのデータディレクトリは mysql:mysql の owner であるようにすると思っています。 これは、セキュリティであったり、運用的に、サーバーが触るファイルをきっちりと分割することで、もろもろのトラブルを回避できるからやるのだと理解しています。 docker でとあるサーバーのイメージを自分で作る場合を考えます。この場合でもそのサーバー専用に `adduser` して、プログラム自体の実行はそのユーザーでやるし、また対応するデータディレクトリもその新しく定義したユーザーが所有者として動作するように設定を行うべきなのでしょうか? というのも、 docker container はその仕組み上、メインで動くプロセスはただそのサーバープログラムのみになる、と考えられます。ただそのプログラムのみが動くのであるならば、わざわざユーザーを分離するような設定は行うメリットはあるのだろうか、とふと疑問に思ったので質問しています。
回答: Dockerコンテナであっても不要または意図しないファイル変更を防ぐことができます. 誤ってファイルを削除してもDockerホストには影響ないかもしれませんが,プロセスの異常動作を防ぐことができるかもしれません. 特に開発時には `docker exec`コマンドで`bash`等を実行することがよくあります.このときもデフォルトでroot以外のユーザで実行すると操作ミスからデータを守ることができます. また,1つのコンテナで1つのプロセスのみを実行することが理想ですが,実際にはそうでなく単一コンテナで複数プロセスを実行する例もいくつかあります.このときはプロセスの実行ユーザを分けることで,Dockerコンテナ以外のときと同様の利点を得ることができます.