Container Registry のベストプラクティスクイズ
最終更新日: 2026 年 9 月 11 日
- コンテナレジストリでタグの不変性がベストプラクティスとされるのはなぜですか?
- A) ストレージコストを削減するため
- B) タグが常に同じイメージコンテンツを指すようにし、デプロイの再現性を高めるため
- C) イメージのプルを高速化するため
- D) Kubernetes で必須とされているため
解答を表示
解答: B) タグが常に同じイメージコンテンツを指すようにし、デプロイの再現性を高めるため
解説: タグの不変性を有効にすると、特定のタグを付けてイメージをプッシュした後、そのタグを別のイメージで上書きできなくなります。検証済みのダイジェストも固定すれば、正確なイメージを特定できます。ロールバックに備えて成果物を保持してください。タグの不変性だけでは、削除防止や来歴が常に保証されるわけではありません。これはサプライチェーンセキュリティの基本的な実践です。
- 本番の Kubernetes デプロイで
:latestタグを使う主なリスクは何ですか?- A) イメージがキャッシュされなくなる
- B) Kubernetes が latest タグ付きのイメージをプルできない
- C) 実際のイメージ内容が予測できず、デプロイごとに変わる可能性がある
- D) latest タグは非推奨である
解答を表示
解答: C) 実際のイメージ内容が予測できず、デプロイごとに変わる可能性がある
解説:latest は通常のタグであり、最後にプッシュされたイメージを自動的に選択するものではありません。不変性ポリシーで保護されていなければ、そのタグに誰かがプッシュしたときに参照先が変わります。本番で使うと、実行中のコードのバージョンを保証できず、ロールバックの信頼性も下がります。どのコードをデプロイしたか分からず、デバッグも困難になります。ベストプラクティスは、セマンティックバージョンまたは Git SHA に基づくタグを使うことです。
- レジストリミラーまたは pull-through cache を設定する主な利点は何ですか?
- A) イメージのビルド時間が短くなる
- B) 外部ネットワークトラフィックを減らし、プルのレイテンシーを改善し、レート制限を緩和する
- C) イメージが自動的に更新される
- D) 脆弱性スキャンが提供される
解答を表示
解答: B) 外部ネットワークトラフィックを減らし、プルのレイテンシーを改善し、レート制限を緩和する
解説: レジストリミラーと pull-through cache は、外部イメージのコピーをローカルに保存します。帯域幅コストと外部依存を減らす、ローカルネットワークからのプルを高速化する、Docker Hub などのレート制限を回避する、外部レジストリが利用できない場合の信頼性を高める、といった利点があります。キャッシュミスや更新には、引き続き上流へのアクセスが必要です。ネットワークが分離された環境では、完全に事前ロードしたミラーと、検証済みの更新手順が必要です。
- マルチリージョンの Kubernetes デプロイで、コンテナレジストリの推奨される災害復旧戦略はどれですか?
- A) グローバルレジストリを 1 つ使う
- B) 各リージョンのレジストリにイメージを複製し、デプロイ設定でリージョン内のレジストリを使う
- C) すべてのイメージを S3 に保存し、そこから直接プルする
- D) 各ノードでイメージキャッシュを使う
解答を表示
解答: B) 各リージョンのレジストリにイメージを複製し、デプロイ設定でリージョン内のレジストリを使う
解説: 災害復旧と高可用性のために、デプロイ先となる各リージョンのレジストリにイメージを複製してください。これにより、あるリージョンのレジストリ障害が別リージョンのデプロイを妨げることを防ぎ、リージョン間ネットワーク経由のプルによる遅延を減らし、外部レジストリからも独立できます。デプロイ設定では、リージョン内のレジストリエンドポイントを参照してください。
- コンテナレジストリのストレージコストを最適化する方法はどれですか?
- A) イメージスキャンを無効にする
- B) ライフサイクルポリシーを実装し、古く使われていないイメージを自動削除する
- C) より大きなベースイメージを使う
- D) イメージを圧縮せずに保存する
解答を表示
解答: B) ライフサイクルポリシーを実装し、古く使われていないイメージを自動削除する
解説: ライフサイクルポリシーは、経過時間、数、タグパターンに基づいてイメージのクリーンアップを自動化します。開発の繰り返し、古いリリース、放棄された実験によってストレージが際限なく増えるのを防げます。マルチステージビルドや最小限のベースイメージと組み合わせて、イメージごとのサイズも減らしてください。定期的なガベージコレクションにより、削除したイメージレイヤーの領域を回収します。
- CI/CD パイプラインのどの段階で、コンテナイメージの脆弱性スキャンを実施すべきですか?
- A) 本番環境だけ
- B) ビルド後できるだけ早く、本番への昇格/デプロイ前に行う
- C) 手動のセキュリティ監査時だけ
- D) Kubernetes へのデプロイ後
解答を表示
解答: B) ビルド後できるだけ早く、本番への昇格/デプロイ前に行う
解説: ビルド後にローカルでスキャンするか、隔離されたステージングレジストリにあるダイジェストを昇格前にスキャンしてください。ゲートを通過したものと同じ成果物をデプロイし、新たな CVE が見つかった場合には再スキャンします。レジストリのスキャンとアドミッション時の検証を組み合わせることで、CI ゲートを補完できます。
- Kubernetes のアドミッションコントローラーは、コンテナレジストリのセキュリティをどのように強化できますか?
- A) イメージのプルを高速化する
- B) Pod の作成前に、許可されたレジストリのイメージであることとセキュリティ要件を満たすことを検証する
- C) イメージを自動的に更新する
- D) イメージを圧縮する
解答を表示
解答: B) Pod の作成前に、許可されたレジストリのイメージであることとセキュリティ要件を満たすことを検証する
解説: Gatekeeper/OPA、Kyverno、クラウドプロバイダーのソリューションなどのアドミッションコントローラーは、デプロイ時にポリシーを適用できます。許可されたレジストリのイメージを必須にする、イメージ署名を検証する、脆弱性スキャンに合格したことを確認する、:latest のような特定のタグのイメージをブロックする、といった処理が可能です。これにより、ワークロード実行前の最終的なセキュリティゲートを設けられます。
- コンテナイメージタグに推奨される命名規則はどれですか?
- A) ランダムな UUID
- B) セマンティックバージョン(v1.2.3)または有効なタグ文字で表した Git コミット SHA
- C) タイムスタンプのみ
- D) 開発者のイニシャル
解答を表示
解答: B) セマンティックバージョン(v1.2.3)または有効なタグ文字で表した Git コミット SHA
解説: 適切なタグ名を使うと、デプロイ済みイメージからソースコードを追跡しやすくなります。セマンティックバージョン(v1.2.3)はリリースの意味を伝えます。Git SHA は特定のコミットを正確に追跡できます。両者を組み合わせたタグ(v1.2.3-abc1234)やビルド番号を追加したタグ(v1.2.3-build.456)を使うと、来歴を包括的に示せます。デバッグ、監査、ロールバックの判断にも役立ちます。
- pull-through cache と完全なレジストリミラーの違いは何ですか?
- A) pull-through cache はすべてのイメージを事前に保存し、ミラーはオンデマンドで取得する
- B) pull-through cache はイメージをオンデマンドで取得してキャッシュし、ミラーはイメージを事前に同期する
- C) 同じ概念である
- D) pull-through cache は Docker Hub でしか動作しない
解答を表示
解答: B) pull-through cache はイメージをオンデマンドで取得してキャッシュし、ミラーはイメージを事前に同期する
解説: pull-through cache は、イメージが最初に要求されたときに保存し、以降のプルに備えてキャッシュします。完全なミラーは、必要かどうかに関係なく、ソースレジストリからすべてまたは選択したイメージを事前に複製します。pull-through cache はストレージを抑えられますが、初回は遅延が発生します。ミラーならすべてのイメージをローカルですぐに利用できます。
- 複数レジストリ戦略では、組織はどのような場合に複数のコンテナレジストリを使うべきですか?
- A) 使うべきではない。レジストリ 1 つで常に十分である
- B) イメージのカテゴリごとに、異なるセキュリティ、コンプライアンス、地理、運用上の要件がある場合
- C) コストが高すぎる場合だけ
- D) バックアップ目的の場合だけ
解答を表示
解答: B) イメージのカテゴリごとに、異なるセキュリティ、コンプライアンス、地理、運用上の要件がある場合
解説: 公開イメージとプライベートイメージを分ける、コンプライアンス要件(規制対象データを特定のリージョンに置くなど)を満たす、グローバルデプロイのレイテンシーを最適化する、本番イメージと開発イメージを隔離する、用途ごとに専用レジストリ(AWS ワークロード用の ECR、オンプレミス用の Harbor など)を使うといった場合に、複数のレジストリが適しています。その代わり、運用の複雑さは増します。