説明
apk add py3-pip のようにバージョンを指定しないと、Alpine リポジトリの変更によって別のバージョンがインストールされる場合があります。同じ Dockerfile でもビルド時期によって異なるイメージになる可能性があります。
本番イメージの再現性は、原因調査やロールバックに役立ちます。apk add package=version の形式でバージョンを指定し、予期しない変更を減らしてください。
想定される影響
- リポジトリの変更で別のパッケージバージョンが選ばれる場合があります。
- 依存関係の変更によってアプリケーションの動作が変わる可能性があります。
- 再ビルドしたデプロイ用イメージがテスト済みイメージと異なる場合があります。
対処方法
apk add package=versionの形式でバージョンを指定してください。- 複数パッケージを一度にインストールする場合も、それぞれを固定してください。
- 更新前にテストと脆弱性の確認を行ってください。
例
同じサポート対象の Alpine 環境で使うインストール命令の抜粋です。PIP_APK_VERSION に、そのリポジトリで提供される確認済みのバージョンと -r リリースを指定してください。固定したパッケージがリポジトリから削除されるとインストールが失敗するため、必要なパッケージを確保する方法も計画してください。
変更前
dockerfile
RUN apk add --update py3-pip
変更後
dockerfile
ARG PIP_APK_VERSION
RUN test -n "$PIP_APK_VERSION" && apk add --update "py3-pip=${PIP_APK_VERSION}"
説明:
- 変更前: バージョンを指定していないため、ビルド結果が変わる可能性があります。
- 変更後: バージョンを明示し、イメージに入るパッケージを管理します。