apt-get のパッケージバージョンが指定されていない

apt-get install のパッケージバージョンを指定してビルド結果の予期しない変化を減らし、セキュリティ更新も継続して管理します。

説明

apt-get install でバージョンを指定せずにパッケージをインストールすると、リポジトリの更新に伴って別のバージョンが選ばれることがあります。そのため、同じ Dockerfile でもビルドする時点によって結果が変わる可能性があります。

バージョン固定は予期しない変更を減らしますが、固定したバージョンの安全性やイメージ全体の再現性を保証するものではありません。利用できるパッケージ、ベースイメージ、リポジトリの状態も管理する必要があります。

想定される影響

  • 再ビルドしたイメージに、以前と異なるパッケージバージョンが含まれる可能性があります。
  • 未検証の更新により、アプリケーションの互換性や動作が変わるおそれがあります。
  • 一方で、固定したバージョンを放置すると、必要なセキュリティ修正が適用されなくなる可能性があります。

対処方法

  • apt-get install package=version の形式でバージョンを指定し、複数のパッケージを入れる場合も個別に確認してください。
  • 同じ RUN ステップで apt-get update を実行してからインストールし、対象ディストリビューションのリポジトリに指定したバージョンがあることを確認してください。
  • セキュリティ更新を定期的に確認し、テスト後に固定バージョンを更新してください。

バージョン指定の例

以下はバージョン指定の書き方を比較する例であり、そのまま実行できるビルド手順ではありません。標準の busybox イメージには apt-get がなく、python=2.7 も現在の利用に推奨するバージョンではありません。実際のビルドでは、apt が使えるベースイメージと、そのリポジトリで提供されるサポート対象バージョンを選んでください。

バージョン指定なし

dockerfile
FROM busybox
RUN apt-get install python
RUN ["apt-get", "install", "python"]

バージョン指定あり

dockerfile
FROM busybox
RUN apt-get install python=2.7

説明:

  • バージョン指定なし: パッケージ名だけを指定し、インストールするバージョンを限定していません。
  • バージョン指定あり: =2.7 でそのバージョンのインストールを要求しています。実際のビルドでは、選んだディストリビューションで提供されるサポート対象バージョンを確認して指定してください。

参考資料