はじめに
- DockerHubなどのイメージについて「バージョンのタグを指定してればイメージが変わることはない」というのは勘違いです。
- 「
latest
じゃなきゃ大丈夫」ではないです - むしろかなりのイメージで上書きが行われています。
- 公式イメージでも結構変更されてます。
- この記事では実際に公式イメージの変更履歴を集めているGitHubリポジトリで調べてみます
イメージ変更履歴を集めているGitHubリポジトリで見れます
DockerHubのwebサイトでは変更日時ぐらいしか見れませんが、
docker-library/repo-infoというリポジトリで公式イメージの変更履歴が見れます
変更履歴の見方
-
repo-info/repos/
配下から調べたいイメージ名のディレクトリを見つけます - その配下の
remote
かlocal
の中にあるタグ名のmdファイルを見ます-
local
はpull実行で差分を検知した際に収集したもので、remote
はapiで変更を検知した際のものです。たぶん定期実行でpollingしてるんだと思います。(ほぼ違いはないはず?)
-
- 「History」ボタンでコミットログから変更が追えます
- イメージのshaがmdファイルに記録されているので、それを使って古いものをpullすることもできます。(消されていなければ)
例えば、node:11.15.0-stretch-slim
イメージの変更履歴を見てみる
docker-library/repo-info の node/remote/11.15.0-stretch-slim.mdを見てみます。
- 思ったよりたくさん更新されてました
-
-
ちなみに、今回はDockerfile自体が変更されているので、nodeのdockerfileリポジトリでも変更が見れます
他にどんな変更があるのか
完全にイメージに依りますが、次のケースが多そうです。
- セキュリティアップデート
- セマンティックバージョンでマイナーバージョンまで指定しているタグの場合、パッチアップデートで上書きされる
-
2.0
タグのイメージの中身が2.0.0
から2.0.1
に代わる
-
- セマンティックバージョンでメジャーバージョンまで指定しているタグの場合、マイナーアップデートで上書きされる
-
2
タグのイメージの中身が2.0.3
から2.1.0
に代わる
-
まとめ
- 「latest以外のタグを指定していればイメージが書き換わることはない」は勘違いです
- 書き換わって困るのであれば自分のレジストリでイメージ管理したほうがいいでしょう