Docker HubのAmazon Linux公式リポジトリで公開されている”タグ”と”イメージ”の関係を深堀りしてみた
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]タブからどんなイメージが公開されているのか見てみました。
タグ一覧には、latest
、with-sources
、2018.03.0.20200318.1-with-sources
、2018.03.0.20200318.1
、2018.03-with-sources
、2018.03
…といくつものタグが並んでいますが、それぞれのタグについての説明などの記載はなく、どのタグがどのようなイメージであるかにわかには分かりませんでした。(それどころかAmazon Linux AMIと2のどちらなのかすら見分けが付かなかったです…。)
「Supported tags and respective Dockerfile links」を見ると「タグ」と「イメージ」の関係が分かってきた
これではどのイメージを選べば良いのか分からないので何か手掛かりがないかリポジトリ内のページを探っていると、[Description]タブに[Supported tags and respective Dockerfile links]という欄がありました。
「Supported tags and respective Dockerfile links」欄の記載をハイパーリンク含めて抜粋したのが下記です。(2020/4現在)
2.0.20200304.0
,2
,latest
2.0.20200304.0-with-sources
,2-with-sources
,with-sources
2018.03.0.20200318.1
,2018.03
,1
2018.03.0.20200318.1-with-sources
,2018.03-with-sources
,1-with-sources
以降、この抜粋した4項目を上から1組目、2組目、3組目、4組目と呼び、深堀りしていきます。
同じ組のタグは同じイメージを指している
結論から言いますと、これら4項目はAmazon Linuxリポジトリで利用できるタグの組であり、同じ組のタグは同じDockerfileから作成されるイメージであることを指しているようです。(各項目のハイパーリンクからそれぞれのDockerfileソースに飛ぶことができます)実際に1組目の3つのタグ2.0.20200304.0
, 2
, latest
をプルしてみると、プルされたイメージのIDは3つともcd2d92bc1c0c
であり、3つのタグが同じイメージを指していることが分かります。
[shell highlight="18-20"]
$ 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
[/shell]
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」となっていました。
[shell highlight="9,20,30,41"]
// 上から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
[/shell]
with-sources
とあるタグは、ピュアなAmazon LinuxイメージにディストリビューションのソースRPMが付随したイメージを指す
2および4組目はタグ名にwith-sources
と付いていますが、 これらの1および3組目との違いはリンク先のDockerfileを比べれば分かります。
- 1組目
2.0.20200304.0
,2
,latest
のリンク先のDockerfile
FROM scratch
ADD amzn2-container-raw-2.0.20200304.0-x86_64.tar.xz /
CMD ["/bin/bash"]
- 2組目
2.0.20200304.0-with-sources
,2-with-sources
,with-sources
のリンク先のDockerfile
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.0
→2.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.0
、2
、latest
」など)のタグは同じイメージを指している - 1および2組目はAmazon Linux 2のイメージを指したタグ(
2
、with-sources
など)、3および4組目はAmazon Linux AMIのイメージを指したタグ(1
、1-with-sources
など)である - タグ名に
with-sources
とあるタグは、ピュアなAmazon LinuxイメージにディストリビューションのソースRPMが付随したイメージを指す - タグとイメージの対応関係はバージョンアップごとに変わっていき、
latest
タグは常に最新のイメージを指す
おわりに
記事中で触れたとおりAmazon Linux AMIはサポート期限終了が迫っており、今後の案件でAmazon Linux 2への更新対応も増えていくと思うので、今のうちにAmazon Linuxの公式Dockerリポジトリの仕様について理解を深められて良かったです。
以上