Got Some \W+ech?

Could be Japanese. Could be English. Android, セキュリティ, 機械学習などをメインに、たまにポエムったり雑感記載したりします。

DockerfileのADD/COPYに--chownオプションができた

Dockerのベストプラクティスに、サービスをnon-rootユーザーで走らせなさい、というのがある。

docs.docker.com

そうすること自体は簡単なのだけれども、当然ながらユーザー権限にあわせてコンテナ内のファイル等の権限を設定しなきゃいけない。仮に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/COPYchown をオプションでつけられるようになったのだ。

USER app
COPY --chown=app:app . $APP_DIR

当然ビルド時間も気にならないぐらい短いので、是非dockerのベスプラに従っていこう。