概要
コンテナ化とは、ソフトウェアのコードをライブラリやフレームワークなどの依存関係にあるすべてのコンポーネントとともにパッケージ化し、それぞれの入れ物、「コンテナ」に隔離することです。
これは、コンテナ内のソフトウェアやアプリケーションを、環境やインフラストラクチャのオペレーティングシステムに依存することなく、どのような環境やインフラストラクチャでも一貫して移動したり実行したりできるようにするためです。コンテナは、アプリケーションをコンピューティング環境でシャボン玉のように包み込み、アプリケーションを周囲から独立させています。要するにコンテナとは、完全に機能するポータブルなコンピューティング環境と言えます。
単一のプラットフォームやオペレーティングシステム上でのコーディングでは、コードが新しい環境に対応していない場合アプリケーションの移行が難しくなりますが、コンテナはその代替として使用することが可能です。新しい環境に対応していない場合、バグやエラー、不具合の修正が必要になることもあるため、時間がかかり生産性が低下するという状況になり、多くのストレスを抱えることになります。
プラットフォームやインフラストラクチャを超えて自由に移動できるコンテナにアプリケーションをパッケージ化すると、その中には正常に動作するために必要なものがすべて含まれているため、アプリケーションはどこに移動しても問題なく使用することができます。
プロセスの分離という考え方は以前からありましたが、2013 年に Docker 社が Docker Engine を発表したことで、開発者が使いやすいツールやパッケージへの普遍的なアプローチなど、コンテナ利用のスタンダードが確立され、その後コンテナテクノロジーの導入が加速しました。今日、開発者は Docker が開拓した Open Container Initiative 規格をサポートする、さまざまなコンテナ化プラットフォームやツール (Podman、Buildah、Skopeo など) の中から選択することができます。
メリット
コンテナの持つ「軽量性」つまり「可搬性」という特徴は、ホストマシンのオペレーティングシステム・カーネルを共有できることから来ています。これにより、コンテナごとに個別のオペレーティングシステムを用意する必要がなく、ベアメタルやクラウド、さらには仮想マシンなどどのようなインフラストラクチャでも同じようにアプリケーションを実行できます。これについては次のセクションで詳しく説明します。
同様に、開発者はあるホスト環境でコンテナを操作する際に、別のホスト環境で使用するのと同じツールを使用することができるため、オペレーティングシステム間でのコンテナ化アプリケーションの開発とデプロイメントがよりシンプルになります。
コンテナと仮想マシン
仮想マシン (VM) とは、 (オフプレミスまたはオンプレミスの) 物理ハードウェアシステム上に作成され、固有の CPU、メモリー、ネットワーク・インタフェース、ストレージを持ち、仮想コンピュータシステムとして機能する仮想環境です。
コンテナ化と仮想化は、アプリケーションを完全に分離して、複数の環境で運用できるようにするという点で共通しています。大きな違いは、サイズと可搬性です。
VM はサイズが大きく、通常はギガバイト単位で測定されます。独自のオペレーティングシステムを搭載しているため、大量のリソースを必要とする複数の機能を同時に実行することができます。多くのリソースを利用できるので、サーバー、オペレーティングシステム、デスクトップ、データベース、およびネットワーク全体の抽象化、分割、複製、エミュレートが可能です。
コンテナははるかに小さく通常はメガバイト単位で計測され、アプリケーションとその実行環境よりも大きなものはパッケージされません。
VM は従来のモノリシックな IT アーキテクチャに適していますが、コンテナはクラウド、CI/CD、DevOps などの新しい技術との互換性を考慮して作られています。
コンテナとマイクロサービス
コンテナは、特定のタスクを実行する単一の機能をパッケージ化するために使用されることが多く、これはマイクロサービスとして知られています。マイクロサービスとは、アプリケーションの各部分をより小さく、より専門的なサービスへと分割したものです。これにより、開発者はアプリケーションの全体的なパフォーマンスに影響を与えることなく、アプリケーションの特定の領域の作業に集中することができます。
これにより、アップデートや問題の修正が行われている間もアプリケーションは稼働しており、より迅速な改善、テスト、デプロイメントが可能となります。
コンテナ内のマイクロサービスには、コンテナの持つ可搬性、互換性、拡張性がすべて備わっているため、マイクロサービスとコンテナの相性は良好です。
コンテナ・オーケストレーション
それでは、このコンテナをどのようにして管理したらよいのでしょうか?そこでコンテナ・オーケストレーションの登場です。コンテナ・オーケストレーションは、コンテナのデプロイメント、管理、スケーリング、ネットワーキングを自動化します。
Kubernetes はオープンソースのコンテナ・オーケストレーション・プラットフォームで、大規模なスケールでコンテナ化された分散アプリケーションの管理をサポートします。ソフトウェアを実行したい場所を Kubernetes に指示すると、コンテナのデプロイと管理に必要なほぼすべての作業を Kubernetes が行ってくれます。
Kubernetes は、Linux コンテナテクノロジーへの初期のコントリビューターの 1 社である Google のエンジニアによって開発および設計され、2015 年に Cloud Native Computing Foundation (CNCF) に寄付されました。つまり、CNCF が Kubernetes コミュニティの維持を担い、ボランティアのコントリビューターと管理者が Kubernetes の開発、維持、リリースに関与しています。
Red Hat は Kubernetes に関して Google と最初に連携した会社の 1 つです。Kubernetes 発表前から関わってきた Red Hat は、Kubernetes プロジェクトにおける第 2 位のコントリビューターになっています。
コンテナ化に Red Hat を選ぶ理由
Red Hat OpenShift は、企業向けの Kubernetes です。つまり、Kubernetes コンテナ管理プロジェクトのコンポーネントを含むソフトウェア製品ですが、大規模企業にとって重要な生産性およびセキュリティ機能が付加されています。
「OpenShift」とは、OKD オープンソース・プロジェクト (以前の OpenShift Origin) から生まれたダウンストリームのコンテナ・オーケストレーション・テクノロジーを指します。「Red Hat OpenShift」は、Red Hat によるコンテナ・オーケストレーション向けの製品スイートを指します。Red Hat はさまざまな製品で OpenShift に事前設定済みのコンポーネントを加えてパッケージ化しています。それには次のようなものがあります。