DockerコンテナのベースイメージをAmazon Linux AMIからAmazon Linux 2に変更する

2020.04.06

こんにちは、CX事業本部の若槻です。

開発用のDockerコンテナでベースイメージとして利用しているAmazon Linux AMIAmazon Linux 2に変更する機会があったので、その際行った対応をご紹介します。

なぜAmazon Linux 2に変更するのか

下記の既報の通り、Amazon Linux AMI(2018.03) の最新バージョンは2020年12月31日にセキュリティアップデートが終了します。

よくある質問 でも申し上げたとおり、Amazon Linux AMI (2018.03) の最新バージョンは 2020 年 6 月 30 日にセキュリティアップデートの提供が終了します。お客様のご要望もあって、終了期日を延長し、メンテナンスサポート期間を設けます。

終了期日の延長 Amazon Linux AMI は 2020 年 12 月 31 日まで延長され、引き続きセキュリティアップデートおよびパッケージの更新版を必要に応じて提供することになりました。

よってAmazon Linux AMIを利用している環境がある場合は、サポート期間が終了する前にAmazon Linux 2にアップデートするなどの対応を行うべきですが、これはDockerコンテナのイメージでAmazon Linux AMIを利用している場合も同様となります。

そして私が対応している案件でも、開発用のDockerコンテナを起動するDockerfileで以下のようにベースイメージとしてAmazon Linux AMI(2018.03.0.20191219.0)を指定していたため、この指定をAmazon Linux 2に変更する対応を行うことになりました。

  • Dockerfile
FROM amazonlinux:2018.03.0.20191219.0

(中略)

Amazon Linux 2のどのイメージを使えばいいのか

単にAmazon Linux 2にイメージを変更するといっても、後述する"Amazon Linux公式リポジトリ"にはバージョンや対応アーキテクチャなどの異なるイメージが公開されています。よってまずは公開されているうちのどのAmazon Linux 2イメージを使えばいいのかを検討してみます。

AWS Lambdaで実際に使われているイメージを確認してみる

今回ベースイメージを変更する開発用のDockerコンテナですが、具体的な用途としては「AWS Lambdaにデプロイするpipパッケージを事前にローカル上でインストールしてパッケージ化するため」というのがありました。なので変更するイメージは可能であればLambdaの環境として使われているのと同じか近しいイメージが望ましいです。

この部分については以下のページが参考になりました。

このページのうち、Amazon Linux 2が利用されているランタイムの仕様の記載(赤枠部分)を見てみると、

  • 「イメージ」はカスタムとだけあり、具体的にどのDockerイメージが使われているかの情報はなし
  • 「Linuxカーネル」は4.14.138-99.102.amzn2.x86_64とあり、つまりx64のアーキテクチャー上で動いている

でした。よって今回は、

  • 新し過ぎもせず古過ぎもしないバージョンである(枯れている)
  • x64アーキテクチャに対応している

という条件に見合うAmazon Linux 2イメージに変更する方針としました。

Docker HubのAmazon Linux公式リポジトリからタグを選んでみる

以下がAmazon Linuxのイメージが公開されているDocker HubのAmazon Linux公式リポジトリのTOPページとなります。

まず[Description]タブの[Supported tags and respective Dockerfile links]欄(上記赤枠部分)を見ると、Amazon Linux公式リポジトリでサポートされている最新のイメージのタグが示されています。この部分の記載から、2020年4月時点ではlatestタグがエイリアスとなっている2.0.20200304.0タグがAmazon Linux 2の最新バージョンのイメージであることが分かります。

次に[Tags]タブを開きます。ここではAmazon Linuxリポジトリで公開されているタグの一覧を確認できます。

このうちAmazon Linux 2イメージのタグはリリース時期が新しいものだと以下のバージョンが利用可能でした。

  • 2.0.20200304.0
  • 2.0.20200207.1
  • 2.0.20191217.0
  • 2.0.20191016.0

これらの中で適度に枯れており、x64アーキテクチャ(amd64)に対応もしている2.0.20191217.0タグを今回は利用することとしました。 image.png

よって、Dockerfileの記述を以下のように変更する対応を行いました。

FROM amazonlinux:2.0.20191217.0

(中略)

おわりに

DockerコンテナのベースイメージをAmazon Linux AMIからAmazon Linux 2に変更した際の対応についてご紹介しました。

記事中ではさらっと流していますが、どのイメージ(タグ)に変更するかを検討する上で、Dockerの"タグとイメージの関係"や"マルチアーキテクチャイメージ"についてもかなり調べるはめになったのですが、今回の記事には収まりきらなかったため、以下の記事に別トピックとして切り出しています。参考までにどうぞ。

以上