DockerコンテナのベースイメージをAmazon Linux AMIからAmazon Linux 2に変更する
こんにちは、CX事業本部の若槻です。
開発用のDockerコンテナでベースイメージとして利用しているAmazon Linux AMIをAmazon 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
タグを今回は利用することとしました。
よって、Dockerfileの記述を以下のように変更する対応を行いました。
FROM amazonlinux:2.0.20191217.0 (中略)
おわりに
DockerコンテナのベースイメージをAmazon Linux AMIからAmazon Linux 2に変更した際の対応についてご紹介しました。
記事中ではさらっと流していますが、どのイメージ(タグ)に変更するかを検討する上で、Dockerの"タグとイメージの関係"や"マルチアーキテクチャイメージ"についてもかなり調べるはめになったのですが、今回の記事には収まりきらなかったため、以下の記事に別トピックとして切り出しています。参考までにどうぞ。
以上