RHELのスペシャリストソリューションアーキテクトの田中司恩(@tnk4on)です。
この記事はRed Hat Blogの Introducing the Red Hat Universal Base Image を、許可を受けて翻訳したものです。
コンテナーベースイメージの選択肢は数多くありますが、なぜRed Hat Universal Base Image (UBI) を選ぶべきなのでしょうか?まず第一に、Red Hat Universal Base ImageのコードはRed Hat Enterprise Linux (RHEL) から派生しており、RHELの使命は、安全で信頼性の高いLinuxを通じてワークロードの成功を支えることです。すべてのコンテナーはLinuxであり、UBIはRHELから派生しているため、同じ価値がUBIにも当てはまります:
- イノベーション: 組織は常に、摩擦なく迅速にイノベーションを起こし、運用を合理化し開発と管理を一元化することで、データセンターからエッジまでの一貫性を提供することを目指しています。
- 最適化: インフラストラクチャーの複雑さは、コストの増加と効率の低下を容易に引き起こします。
- 保護: ハイブリッドクラウド全体でリスクを継続的に軽減することは、ワークロードの構築、スケーリング、管理を含め、ほとんどの組織にとって課題です。
- 信頼: アプリケーションライフサイクルの複雑さ、ワークロードの互換性、セキュリティパッチ適用、コンプライアンスレポートを管理することは、組織にとって終わりのない課題です。
Red HatはRHEL 7以来ベースイメージを提供してきました(RHEL 6イメージも含まれていました)。RHELのコンテナーホスト上でRHELのコンテナーイメージを実行することで、環境間の互換性とポータビリティが得られます(馴染みやすさは言うまでもありません)。
- お客様はUBI上で構築したコンテナーイメージを、組織の内外を問わず誰とでも共有できます
- お客様以外の方も、Red Hat Universal Base Imageでリリースされたすべてのコンテンツを活用できます
誰もが公式のRed Hatコンテナーイメージの優れた信頼性、セキュリティ、パフォーマンスを活用できるようになりました。つまり、UBI上でコンテナー化されたアプリケーションを構築し、任意のコンテナーレジストリサーバーにプッシュして、世界中と共有できます。UBIを使えば、どこでも好きな方法で、コンテナー化されたアプリケーションを構築、共有、コラボレーションできます。
図1: Red Hatプラットフォーム vs. 任意のOCI準拠コンテナープラットフォーム
UBI上でアプリケーションを構築すれば、どこでも自由に共有し、どこでも自由に実行できますが、RHELまたはRed Hat OpenShift上で実行すると追加の価値が得られます。その仕組みは次のとおりです:
- Run anywhere: 同じ品質のソフトウェアが得られますが、コミュニティサポートとセルフサポートのみです
- Run on RHEL or OpenShift: 同じ品質のソフトウェアが得られ、Red Hatによるフルサポートが受けられます。助けが必要な場合はサポートチケットを提出するだけです
UBIを使用する理由
UBIは次のような場合にコンテナーに最適な選択です:
- 開発者が公開配布できる高品質なコンテナーイメージを求めている場合
- 運用チームがエンタープライズライフサイクルを持つサポート可能なベースイメージを求めている場合
- プロダクトチームがRed Hatと共同サポートされるRed Hat認定コンテナーを提供したい場合
- お客様がRed Hat環境でエンタープライズサポートを求めている場合
- コミュニティがコンテナー化されたアプリケーションをより自由に共有したいが、高品質なコンテナーイメージも求めている場合
これらのいずれか、またはすべてがあなたの組織に当てはまるなら、ぜひ読み進めてください!
UBIは単なるベースイメージではない
コンテナーは、Linuxオペレーティングシステムのユーザーランド(オペレーティングシステムに付属するすべてのプログラム、ライブラリ、依存関係)の軽量バージョンを提供します。アプリケーションをコンテナーに入れることで依存関係を必要最小限に削減できますが、コンテナーの中身は依然としてOSのユーザーランドであるため、コンテナーベースイメージの品質はホストオペレーティングシステムと同じくらい重要です。組織にとって適切なコンテナーベースイメージを選択することは、標準運用環境 (SOE) を構築するのと同様に、セキュリティとライフサイクルに影響を与える重要な選択です。
つまり、完全なOSを必要とせずに、UBIは3つのものを提供します:
- 4つのベースイメージのセット(ubi-micro、ubi-minimal、ubi standard、ubi-init)
- 言語ランタイムイメージのセット(Node.js、Ruby、Python、PHP、Perlなど)
- 一般的なアプリケーション依存関係を満たすソフトウェアリポジトリ内のパッケージセット
図2: ベースイメージ、ビルド済み言語イメージ、パッケージサブセット
すべてのUBIコンテンツはRHELのサブセットです。UBIのすべてのパッケージはRHELチャネルから提供され、RHELまたはOpenShift上で実行される場合はRHELと同様にサポートされます:
図3: RHEL 7およびRHEL 8 vs 他のコンテナープラットフォーム
コンテナーイメージの品質サポートを提供するには、多くのエンジニアリング、セキュリティ分析、リソースが必要です。ベースイメージだけでなく、特定のコンテナーホスト上での動作もテストする必要があります。アップグレードの課題を軽減するため、Red Hatはエンジニアリングとサポートに重点を置いており、古いバージョンのUBIを新しいRHELホスト上で実行でき、新しいUBIを古いRHELホスト上で実行できます。これにより、コンテナーイメージ内のアプリケーションや基盤となるコンテナーホストのプラットフォームアップグレード時に、ユーザーはより大きな柔軟性と安心感を得られます。サポート対象の完全なリストについては、Red Hatポータルのコンテナー互換性マトリックスを参照してください。
4つのUBIベースイメージの比較
図4: 4つのベースイメージの比較
Micro: 独自の依存関係を含むアプリケーション向け(Python、Node.js、.NETなど)
- 構築可能な最小のイメージ
- パッケージマネージャーがないため、より小さい
- Dockerfileの代わりにBuildahの使用を推奨
Minimal: 独自の依存関係を含むアプリケーション向け(Python、Node.js、.NET)
- 最小限のプリインストールコンテンツセット
- SUIDバイナリなし
- 最小限のパッケージマネージャー(インストール、更新、削除)
Standard: RHEL上で動作するあらゆるアプリケーション向け
- 統一されたOpenSSL暗号スタック
- フルの
dnfスタック - 便利な基本OSツール(tar、gzip、viなど)を含む
Multi-service: 単一コンテナーで複数のサービスの実行を簡素化
- 起動時にsystemdを実行するよう構成
- ビルド時にサービスを有効化可能
開発者向けのビルド済み言語ランタイムコンテナーイメージ
言語をインストールできるベースイメージに加えて、UBIは開発者向けに、さまざまな言語ランタイムのビルド済みイメージを提供しています。多くの場合、開発者はイメージを取得して、構築しているアプリケーションの作業をすぐに開始できます。ビルド済みランタイムコンテナーイメージの完全なリストについては、Red Hat Ecosystem Catalogを確認してください。
Red Hatは、新しいバージョンのRHELがリリースされたときや、重大なCommon Vulnerabilities and Exposures (CVE) にパッチが適用されたときに新しいイメージをリリースし、RHELの更新ポリシーを反映しています。イメージを取得してすぐにアプリケーションの構築を開始できるように設計されています。
図5: UBIで利用可能なdnfリポジトリと関連パッケージ
アプリケーションを構築する際に、追加のパッケージが必要になったり、アプリケーションを動作させるためにパッケージの更新が必要になることがあります。そのため、UBIにはdnfを通じて利用可能なRPMのセットが付属しており、高可用性のコンテンツデリバリーネットワーク上で配布されています。CI/CDパイプラインで本番リリース前にdnfを更新する際も、お客様が使用しているのと同じインフラストラクチャーを利用できます。
すべての土台はRHEL
2014年にコンテナー化されたアプリケーションが登場したとき、それはエンタープライズITにおけるイノベーションの波を表していました。開発とメンテナンスを改善する点で今でも変革をもたらしていますが、コンテナーは万能薬ではありません。エンタープライズの世界では、オペレーティングシステムには安定性、信頼性、セキュリティツール、ガイダンス、タイムリーな修正が必要です。これらはRHELが満たすよう設計されたニーズです。ベースイメージに取り組んでいるRed Hatチームのほんの一部を紹介します:
- パフォーマンスエンジニアリングチーム:glibcやOpenSSLなどの基本的なライブラリ、PythonやRubyなどの言語ランタイムの更新と保守を担当し、堅牢なパフォーマンスを提供し、コンテナー化するワークロードで確実に動作するよう設計されています
- プロダクトセキュリティチーム:同じライブラリと言語がタイムリーなセキュリティ修正を受けることを確実にし、Container Health Indexグレードで測定されます
- プロダクトマネジメントおよびエンジニアリングチーム:新機能の追加と長いライフサイクルの推進に専念し、その上に構築する投資に信頼を持てるよう設計されています
RHELはサブスクリプションベースであるため、リリースごとのライセンス料やそれに加えたサポート料を別途支払う必要はありません。RHELをサブスクライブすると、現在のすべてのバージョンのRHELを実行する権利が得られます。これには、Red Hatサポートへのアクセスと、より安全で堅牢で信頼できるLinuxオペレーティングシステムの利点が含まれます。RHELはコンテナーの優れたホストおよびイメージとして機能しますが、多くの開発者はサポートされるシナリオの外にある可能性のある、より幅広いユースケースをサポートする必要があります。そこでUBIの出番です。
単純なコンテナー化アプリケーションの構築を始めるためのベースイメージを探しているだけかもしれません。あるいは、コンテナーエンジン上で実行されるスタンドアロンのコンテナーから、OpenShift上で動作するよう設計されたOperatorを構築・認定するクラウドネイティブの世界に移行しているかもしれません。いずれにしても、UBIは優れた基盤を提供します。
図6: RHEL認定アプリケーション > 認定コンテナー > 認定Operator
コンテナーは軽量なオペレーティングシステムのユーザー空間を新しいパッケージング形式でカプセル化するものであり、Red HatはエンタープライズグレードのLinuxオペレーティングシステムのリーダーです。UBIは、独立系ソフトウェアベンダー(ISV)、お客様、オープンソースコミュニティにエンタープライズグレードのコンテナーを提供することで、コンテナー開発の新しい業界標準を設定するよう設計されています。
特に、ISVはKubernetes Operatorを含むコンテナー化されたアプリケーションの単一の信頼できる基盤に標準化できます。UBIを使用するISVは、OpenShiftのようなRed Hatプラットフォームにデプロイされたソフトウェアの継続的な検証のために、Red Hatコンテナー認定を活用できます。
| サードパーティOCI準拠プラットフォーム上のUBI | +Red Hatプラットフォーム | +認定 | |
|---|---|---|---|
| 信頼性のあるロードマップ | ✓ | ✓ | ✓ |
| 実証された基盤 | ✓ | ✓ | ✓ |
| 最小イメージ | ✓ | ✓ | ✓ |
| パッケージ更新 | UBIコンテンツのみ | すべてのRHELコンテンツ | すべてのRHELコンテンツ |
| クラウドネイティブ言語ランタイム | ✓ | ✓ | ✓ |
| 配布/再配布 | ✓ | ✓ | ✓ |
| Red Hatプラットフォームテスト | - | ✓ | ✓ |
| Red Hatカスタマーサポート | - | Red Hatコンポーネント | 全コンポーネントの共同サポート |
| セキュリティスキャン | - | - | ✓ |
| Red Hatとの共同プロモーション | - | - | ✓ |
| コンテナービルドサービス | - | - | ✓ |
UBIを使い始める
使い始めるのは簡単です。お好きなコンテナーエンジンでこれらのイメージをプルしてください(Red HatはPodman Desktopを推奨しています。コマンドラインがお好みならPodmanをどうぞ)。
例えば、UBI 9をプルするには:
podman pull registry.access.redhat.com/ubi9/ubi podman pull registry.access.redhat.com/ubi9/ubi-minimal podman pull registry.access.redhat.com/ubi9/ubi-init
さらに詳しい情報については、Red Hat Universal Base Image eBookまたはRed Hat Universal Base Image FAQをご覧ください。





