6.3. RHEL コンテナーツールで再現性を実現する
RHEL コンテナーツールは、Buildah、Podman、Skopeo などのツールスイートを使用して、標準化されたデーモンレスのスクリプト可能なワークフローを提供し、再現性を実現します。このアプローチにより、一度構築されたコンテナーはどこでも一貫して実行できるようになり、依存関係、環境、バージョン管理に関する潜在的な問題に対処できます。
ビルダ:
RHEL Buildah は、ビルドプロセスをきめ細かく制御することで、再現可能なコンテナービルドを実現します。不安定なタグ、ファイルシステムのメタデータ、ホスト依存データなどの非決定性の原因を軽減するための特定のオプションを提供します。再現可能なビルドのための Buildah の機能は次のとおりです。
固定タイムスタンプ: タイムスタンプにより、再現性が大幅に低下します。デフォルトでは、ファイルの作成時間と変更時間は、誰かがコンテナーレイヤーにファイルを追加した時間を反映しますが、同じ時間が 2 回続くことはありません。Buildah を使用すると、これらのタイムスタンプをゼロにしたり、特定の固定値に設定したりできます。
-
--rewrite-timestamp: このオプションは、レイヤーの内容を--source-date-epochより遅くなるようにタイムスタンプします。また、主に決定論的なビルドを実現するために、イメージの作成タイムスタンプとそのレイヤー内のファイルのタイムスタンプを制御します。 -
--source-date-epoch: このオプションは、以前の--timestampオプションよりも柔軟性が高く、イメージレイヤー内のすべてのファイルに対して特定の再現可能なタイムスタンプを定義できます。これは、イメージメタデータの作成日付と履歴日付に影響します。CLI フラグ、環境変数、またはビルド引数を使用して設定できます。フラグが設定されると、宣言された ARG がRUN命令の環境で公開され、静的ホスト名が取得されます。また、コミットされたイメージ内のコンテナー ID フィールドはクリアされます。
-
Podman:
podman build コマンドは、ユーザー向けのインターフェイスでありながら、実際のイメージ作成を Buildah ライブラリーに委任します。つまり、Podman は、Buildah と同じコア機能を活用し、ビルドプロセス中の非決定性の原因を制御することに重点を置いて、再現可能なコンテナービルドを実現します。
Podman コマンドは、--rewrite-timestamp および --source-date-epoch オプションも受け入れます。さらに、--no-cache オプションは、Podman にローカルキャッシュを無視して新規ビルドを実行するように指示します。このオプションを使用すると、コンテナーイメージを最初から確実に実行できることを確認できます。
スコピオ:
Skopeo は、変更可能なタグの代わりに不変のイメージダイジェストを参照することで、再現可能なコンテナービルドを実現します。Skopeo は主にイメージの転送と管理を行い、Buildah などの他のツールが実際の再現可能なイメージの作成を処理します。
--source-date-epoch および --rewrite-timestamp オプションを使用すると、ビルドの再現性が向上します。ただし、完全な再現性は保証されません。COPY 命令の --from オプションを使用して他のイメージから追加されたコンテンツ、RUN 命令の --mount=from= オプションを介してアクセスされたコンテンツ、または ADD 命令を使用してダウンロードされたコンテンツは、後で移動するイメージタグを参照した場合、または指定された URL のコンテンツが変更された場合に変更される可能性があります。