説明
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でそのバージョンのインストールを要求しています。実際のビルドでは、選んだディストリビューションで提供されるサポート対象バージョンを確認して指定してください。