Docker HubのAmazon Linux公式リポジトリで公開されている”タグ”と”イメージ”の関係を深堀りしてみた

Docker HubにはどんなAmazon Linuxイメージが公開されているのか調べているうちに、Amazon Linux公式リポジトリにおける"タグ"と"イメージ"の関係がちょっとだけ深堀りできたのでまとめてみました。
2020.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Docker HubにはどんなAmazon Linuxイメージが公開されているのか調べているうちに、Amazon Linux公式リポジトリにおける"タグ"と"イメージ"の関係がちょっとだけ深堀りできたのでまとめてみました。

背景

開発用のDockerコンテナに利用しているAmazon Linux AMIイメージのサポート期間終了を見越してAmazon Linux 2への変更を行うことになり、Docker HubのAmazon Linux公式リポジトリからAmazon Linux 2のイメージを探そうとしていました。

タグ一覧を見ても、どのタグがどのようなイメージであるか分からない

Amazon Linux 2イメージを探すために、まずAmazon LinuxリポジトリTOPページの[Tag]タブからどんなイメージが公開されているのか見てみました。

タグ一覧には、latestwith-sources2018.03.0.20200318.1-with-sources2018.03.0.20200318.12018.03-with-sources2018.03…といくつものタグが並んでいますが、それぞれのタグについての説明などの記載はなく、どのタグがどのようなイメージであるかにわかには分かりませんでした。(それどころかAmazon Linux AMIと2のどちらなのかすら見分けが付かなかったです…。)

これではどのイメージを選べば良いのか分からないので何か手掛かりがないかリポジトリ内のページを探っていると、[Description]タブに[Supported tags and respective Dockerfile links]という欄がありました。

「Supported tags and respective Dockerfile links」欄の記載をハイパーリンク含めて抜粋したのが下記です。(2020/4現在)

以降、この抜粋した4項目を上から1組目、2組目、3組目、4組目と呼び、深堀りしていきます。

同じ組のタグは同じイメージを指している

結論から言いますと、これら4項目はAmazon Linuxリポジトリで利用できるタグの組であり、同じ組のタグは同じDockerfileから作成されるイメージであることを指しているようです。(各項目のハイパーリンクからそれぞれのDockerfileソースに飛ぶことができます)実際に1組目の3つのタグ2.0.20200304.0, 2, latestをプルしてみると、プルされたイメージのIDは3つともcd2d92bc1c0cであり、3つのタグが同じイメージを指していることが分かります。

$ docker pull amazonlinux:latest
latest: Pulling from library/amazonlinux
Digest: sha256:deadcaae52851831a2f579185eceb9e86c824d67c25334fbd5ef2ee75cf525a9
Status: Image is up to date for amazonlinux:latest

$ docker pull amazonlinux:2
2: Pulling from library/amazonlinux
Digest: sha256:deadcaae52851831a2f579185eceb9e86c824d67c25334fbd5ef2ee75cf525a9
Status: Downloaded newer image for amazonlinux:2

$ docker pull amazonlinux:2.0.20200304.0
2.0.20200304.0: Pulling from library/amazonlinux
Digest: sha256:deadcaae52851831a2f579185eceb9e86c824d67c25334fbd5ef2ee75cf525a9
Status: Downloaded newer image for amazonlinux:2.0.20200304.0

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
amazonlinux             2                   cd2d92bc1c0c        2 days ago          163MB
amazonlinux             2.0.20200304.0      cd2d92bc1c0c        2 days ago          163MB
amazonlinux             latest              cd2d92bc1c0c        2 days ago          163MB

1および2組目はAmazon Linux 2のイメージを指したタグ、3および4組目はAmazon Linux AMIのイメージを指したタグである

そして上から1および2組目はAmazon Linux 2、3および4組目はAmazon Linux AMIのイメージを指したタグであるようです。実際にそれぞれの組のタグをプルしてディストリビューションを確認してみると、1および2組目は「Amazon Linux release 2 (Karoo)」、3および4組目は「Amazon Linux AMI release 2018.03」となっていました。

// 上から1組目のタグ(latest)
$ docker run --rm -it amazonlinux:latest
Unable to find image 'amazonlinux:latest' locally
latest: Pulling from library/amazonlinux
a8d577519c9f: Pull complete 
Digest: sha256:deadcaae52851831a2f579185eceb9e86c824d67c25334fbd5ef2ee75cf525a9
Status: Downloaded newer image for amazonlinux:latest
bash-4.2# cat /etc/system-release
Amazon Linux release 2 (Karoo)

// 上から2組目のタグ(with-sources)
$ docker run --rm -it amazonlinux:with-sources
Unable to find image 'amazonlinux:with-sources' locally
with-sources: Pulling from library/amazonlinux
a8d577519c9f: Already exists 
639485fb25df: Pull complete 
Digest: sha256:1c2ff16aec2969b471271d267c5d3458c3a99fc8f584c410464de5e56a29d060
Status: Downloaded newer image for amazonlinux:with-sources
bash-4.2# cat /etc/system-release
Amazon Linux release 2 (Karoo)

// 上から3組目のタグ(2018.03)
$ docker run --rm -it amazonlinux:2018.03
Unable to find image 'amazonlinux:2018.03' locally
2018.03: Pulling from library/amazonlinux
c107763d1573: Pull complete 
Digest: sha256:859097367161e0db986971d89e50e38541f9b94a7af95d6c9826ebe545fcd2f3
Status: Downloaded newer image for amazonlinux:2018.03
bash-4.2# cat /etc/system-release
Amazon Linux AMI release 2018.03

// 上から4組目のタグ(2018.03-with-sources)
$ docker run --rm -it amazonlinux:2018.03-with-sources
Unable to find image 'amazonlinux:2018.03-with-sources' locally
2018.03-with-sources: Pulling from library/amazonlinux
c107763d1573: Already exists 
aadc813f6201: Pull complete 
Digest: sha256:cedf10b8eb4977ce42083ee8356c79f569003b167888594e9204d17af7fca85f
Status: Downloaded newer image for amazonlinux:2018.03-with-sources
bash-4.2# cat /etc/system-release
Amazon Linux AMI release 2018.03

with-sourcesとあるタグは、ピュアなAmazon LinuxイメージにディストリビューションのソースRPMが付随したイメージを指す

2および4組目はタグ名にwith-sourcesと付いていますが、 これらの1および3組目との違いはリンク先のDockerfileを比べれば分かります。

FROM scratch
ADD amzn2-container-raw-2.0.20200304.0-x86_64.tar.xz /
CMD ["/bin/bash"]
FROM scratch
ADD amzn2-container-raw-2.0.20200304.0-x86_64.tar.xz /
CMD ["/bin/bash"]
RUN mkdir /usr/src/srpm \
 && curl -o /usr/src/srpm/srpm-bundle.tar.gz "https://amazon-linux-docker-sources.s3-accelerate.amazonaws.com/srpm-bundle-4cda1b0d98865d12f61886af2ff052cf2cb4a48734bded0ac84d2664a0361220.tar.gz" \
 && echo "c53ef45b008bcb392f9ecbd229a6fa38f69cfe536d630560a8e1a8daaa8b68e6  /usr/src/srpm/srpm-bundle.tar.gz" | sha256sum -c -

上記2つのDockerfileの違いを見る限り、2および4組目のwith-sourcesとあるタグは「1または3組目のピュアなAmazon LinuxイメージにディストリビューションのソースRPMが付随したイメージ」を指すタグのようです。

タグとイメージの対応関係はバージョンアップごとに変わっていき、latestタグは常に最新のイメージを指す

さてここで、AWSのドキュメントに以下のような記載を見つけました。

latest タグは、使用可能な最新の Amazon Linux コンテナイメージに常に対応します。

これを解釈して1組目のタグに当てはめてみると、タグlatestはAmazon Linuxの最新メジャーバージョンのタグ2のエイリアスであり、タグ2はAmazon Linux 2の最新マイナーバージョンのタグ2.0.20200304.0のエイリアスであると言えます。このタグ付けの法則が分かればタグとイメージの対応関係が将来どのように変更されていくかもなんとなく想像がつきます。

例えば将来Amazon Linux2の最新バージョン(2.0.YYYYMMDD.0)がリリースされた場合は、2タグのエイリアスターゲットのタグは2.0.20200304.0から2.0.YYYYMMDD.0に変更され、さらにAmazon Linuxがバージョン3にメジャーアップデートした場合は、latestタグのエイリアスターゲットのタグは2から3に変更されると考えられます。

これを整理して示すと、現在のlatestと同じイメージを指すタグの組は以下ですが、

  • 2.0.20200304.0, 2, latest

将来Amazon Linux 2がマイナーアップデート(2.0.20200304.02.0.20YYMMDD.0)された場合は以下のようになり、

  • 2.0.20YYMMDD.0, 2, latest

さらに将来Amazon Linuxのメジャーアップデートがされた場合は以下のようになると考えられます。

  • 3.0.20YYMMDD.0, 3, latest

まとめ

ここまでAmazon Linux公式リポジトリページの「Supported tags and respective Dockerfile links」欄の記載に端を発した深堀りをしてきましたが、これらをまとめると以下のようになります。

  • 同じ組(「2.0.20200304.02latest」など)のタグは同じイメージを指している
  • 1および2組目はAmazon Linux 2のイメージを指したタグ(2with-sourcesなど)、3および4組目はAmazon Linux AMIのイメージを指したタグ(11-with-sourcesなど)である
  • タグ名にwith-sourcesとあるタグは、ピュアなAmazon LinuxイメージにディストリビューションのソースRPMが付随したイメージを指す
  • タグとイメージの対応関係はバージョンアップごとに変わっていき、latestタグは常に最新のイメージを指す

おわりに

記事中で触れたとおりAmazon Linux AMIはサポート期限終了が迫っており、今後の案件でAmazon Linux 2への更新対応も増えていくと思うので、今のうちにAmazon Linuxの公式Dockerリポジトリの仕様について理解を深められて良かったです。

以上