説明
gem install で Ruby パッケージのバージョンを指定しないと、リポジトリの状態によって別のバージョンが選ばれる場合があります。同じ Dockerfile を再ビルドしても結果が変わる可能性があります。
デプロイ用イメージの依存関係が変わると、アプリケーションの動作や互換性に影響します。gem のバージョンを明示すると、この変更を管理しやすくなります。
想定される影響
- リポジトリの更新によってイメージの内容が変わる場合があります。
- 予期しないアップグレードで実行時エラーが発生する可能性があります。
- テスト環境と本番環境でパッケージ構成が異なる場合があります。
対処方法
gem install bundler:2.0.2のように gem のバージョンを指定してください。- 複数の gem をインストールするときも、それぞれのバージョンを指定してください。
- 固定値を更新する前にテストしてください。
例
Ruby と RubyGems が利用できるイメージでのインストール命令の抜粋です。以下のバージョンは過去の構文例であり、本番向けの推奨値ではありません。確認済みでサポートされるバージョンを選び、間接的な依存関係もロックファイルで管理してください。
変更前
dockerfile
RUN gem install bundler
RUN ["gem", "install", "blunder"]
変更後
dockerfile
RUN gem install bundler:2.0.2
ENV GRPC_VERSION 1.0.0
RUN gem install grpc:${GRPC_VERSION} grpc-tools:${GRPC_VERSION}
説明:
- 変更前: パッケージ名だけを指定しているため、ビルドのたびに選択されるバージョンが変わる可能性があります。
- 変更後: 対象のバージョンを明示し、依存関係の変更を管理します。