DockerfileのADD/COPYに--chownオプションができた
- 11/10: 追記。CI/CDでの制限について書いてなかった。
Dockerのベストプラクティスに、サービスをnon-rootユーザーで走らせなさい、というのがある。
そうすること自体は簡単なのだけれども、当然ながらユーザー権限にあわせてコンテナ内のファイル等の権限を設定しなきゃいけない。仮にUSER
指定した後にCOPY
してもroot:rootの権限になるので、別途chownをしてやらなければならなかった。
USER app COPY . $APP_DIR # $APP_DIRの権限はroot:root RUN chown -R app:app $APP_DIR
RAILSなど関連ファイル数が結構な量になるサービスの場合、すべての権限が変わるまで10min~15minとか余裕でかかってた。このせいで、dockerのベスプラに従ってなかった人は多いと思う。僕も無視してた(ごめん)
それがv17.09.0-ceから解決された。
Release v17.09.0-ce · docker/docker-ce · GitHub
まあ、端的にいうと ADD/COPY
に chown
をオプションでつけられるようになったのだ。
USER app COPY --chown=app:app . $APP_DIR
当然ビルド時間も気にならないぐらい短いので、是非dockerのベスプラに従っていこう。
追記
尚、CI/CDのDockerのバージョンがv17.09.0-ceでなければ意味がない。例えばGCPのContainer Builderはv17.06ぐらいなのでビルドに失敗する。考えてみれば当たり前である...