地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Docker】パッケージアップデートのベストプラクティス

pythonspeed.com

必須パッケージが古いことがわかっている場合は、ベースイメージのメンテナーに連絡した上で、アップデートするみたいなのがベストプラクティスってなっていたけど最近は上記の記事で言っているように違うらしい

hadolintで検証

検証用Dockerfile

FROM debian:9

RUN apt-get update && apt-get upgrade

古いやつ

$ hadolint --version
Haskell Dockerfile Linter 1.18.2-no-git

$ hadolint Dockerfile
Dockerfile:3 DL3005 Do not use apt-get upgrade or dist-upgrade
Dockerfile:3 DL3009 Delete the apt-get lists after installing something

最新。確かにアップデートは使うなという警告は無くなっている

$ docker container run -it hadolint/hadolint hadolint --version
Haskell Dockerfile Linter v2.3.0-0-g96e61f8

$ docker container run -i hadolint/hadolint < Dockerfile
-:3 DL3009 info: Delete the apt-get lists after installing something

ルールについての説明もリポジトリを見にくと確かに変わっているのがわかる。

github.com

ベースイメージでユーザが切り替わっている場合は再度スイッチしてrootでアップグレードした上でユーザを切り替えよう的な感じらしい。

そもそもディストロはいるのか

最近というか昔から言われているのがディストロ不要説。セキュリティ的にパッケージアップデートが必要なのは理解できるがそもそもセキュリティホールになるようなパッケージなりバイナリなりをおく必要があるのかという話。デバッグ用途でそれなりのコマンドを入れておくのは良さそうだけど本番運用するならいらないのかもしれない。