Linux コンテナとは
Linux® コンテナは、システムの他の部分から切り離された 1 つまたは複数のプロセスの集合体です。実行するために必要なすべてのファイルは別個のイメージから提供されるため、Linux コンテナでは開発からテスト、実稼働へと移行する際にも可搬性と一貫性が保たれます。テスト環境のレプリケートに依存する従来の開発パイプラインよりもはるかに迅速に利用できます。セキュリティをコンテナパイプラインに組み込んでインフラストラクチャを保護するとコンテナの安定性とスケーラビリティが守られ、信頼性が高まります。また、コンテナ化したアプリケーションはパブリッククラウド、プライベートクラウド、オンプレミス、ハイブリッドクラウド環境やデータセンターの間で、一貫した動作と機能を維持しながら容易に移行することができます。
Linux コンテナのメリットと利点
あなたが今、アプリケーションを開発しているとしましょう。あなたはノートパソコンで作業しており、その環境には特定の構成が設定されています。他の開発者の構成はそれとは微妙に異なっているかもしれません。あなたが開発しているアプリケーションは、その構成とそれに対応する特定のライブラリ、依存関係、ファイルに依存しています。一方、社内には開発環境と実稼働環境があり、それぞれ独自の構成とサポートファイルで標準化されています。これらの環境を可能な限り忠実にローカルで再現したいのですが、サーバー環境を再作成するオーバーヘッドは避けたいところです。これらの環境でアプリケーションを動作させ、品質保証を満たし、多大な労力、書き換え、時間のかかる障害復旧なしにデプロイする方法の 1 つが、コンテナを使用することです。
コンテナを使用すると責任範囲を分離できるため、開発チームと運用チーム間の対立が少なくなります。その結果、開発者はアプリケーションに集中でき、運用チームはインフラストラクチャに注力できます。さらに、コンテナはオープンソース・テクノロジーに基づいているため、最新の技術が利用可能になった時点でそのメリットを享受することができます。コンテナ・テクノロジー (Podman、Skopeo、Buildah、CRI-O、Kubernetes、Docker など) は、アプリケーションの開発とデプロイメントの単純化、スピードアップ、迅速なスケーリング、オーケストレーションに役立ちます。
Red Hat のリソース
LXC とは
Linux Containers プロジェクト (LXC) はオープンソースのコンテナ・プラットフォームで、一連のツール、テンプレート、ライブラリ、言語バインディングを提供します。LXC は、コンテナ起動時のユーザーエクスペリエンスを向上させるシンプルなコマンドライン・インタフェースを備えています。
LXC が提供するオペレーティングシステム・レベルの仮想化環境は、多数の Linux ベースのシステムにインストールできます。お使いの Linux ディストリビューションでもパッケージリポジトリから利用できるかもしれません。
コンテナの標準規格、歴史、業界動向
現在コンテナ・テクノロジーと呼ばれている概念は、2000 年に FreeBSD jails として初めて登場しました。この技術は、1 つのFreeBSD システムを複数のサブシステム (jail) へとパーティション化するものでした。jails は、システム管理者が組織内外の複数のユーザーと共有できる安全な環境として開発されました。
2001 年には、Jacques Gélinas 氏の VServer プロジェクトを通じて、分離環境の実装が Linux に導入されました。これは、Linux における複数の制御されたユーザー空間の基盤となり、最終的には今日の Linux コンテナの基礎となりました。
その後、この分離のアプローチを実現するために、多くの技術が急速に融合しました。コントロールグループ (cgroups) は、プロセスまたはプロセスグループのリソース使用量を制御および制限するカーネル機能です。ユーザー空間をセットアップしてそのプロセスを管理する初期化システムの systemd を使用して、分離されたこれらのプロセスをより高度に制御します。これらの技術はいずれも、Linux の全体的な制御性を強化すると同時に、環境が分離した状態を保つためのフレームワークとなりました。
Docker の登場
2008 年、Docker が (dotCloud を介して) その名を冠したコンテナ・テクノロジーと共に登場しました。Docker の技術によって、新しいレイヤーイメージ、サーバーデーモン、構成済みコンテナイメージのライブラリの実行および構成のためのシンプルなコマンドライン・インタフェースや、レジストリサーバーの概念など、新たな概念やツールが加わりました。こうした技術を組み合わせることにより、ユーザーは新しいレイヤーコンテナを迅速に構築し、それらを他のユーザーと簡単に共有できるようになりました。
コンテナ・テクノロジーの相互運用性を確保するための 3 つの主要な標準規格として、OCI イメージ、ディストリビューション仕様、ランタイム仕様があります。これらの仕様を組み合わせることによって、コミュニティ・プロジェクト、商用製品、クラウドプロバイダーは、相互運用可能なコンテナ・テクノロジーを構築できます (カスタムビルドのイメージをクラウドプロバイダーのレジストリサーバーにプッシュすることを考えてみてください)。現在、Red Hat や Docker をはじめとする多くの企業が、コンテナフォーマット、イメージ仕様、ランタイムに関する業界標準を策定するオープンなガバナンス体制である Open Container Initiative (OCI) のメンバーとなっています。
コンテナのオーケストレーションと管理
コンテナは、同じオペレーティングシステムのカーネルを共有し、システムの残りをアプリケーションプロセスから分離するため、開発、テスト、および本番構成にわたってすべてを移行し、開き、使用することができます。コンテナは軽量で可搬性があるので、迅速に開発してビジネスニーズの発生と同時に対処できる可能性が生まれます。 コンテナ・オーケストレーションは、企業全体でこれらのデプロイメントを管理する方法です。
Kubernetes は、Linux コンテナの運用を自動化するオープンソース・プラットフォームです。コンテナ化されたアプリケーションのデプロイ、スケーリング、健全性の監視に伴う多くの手動プロセスをなくします。Kubernetes は需要に応じてリソースを動的に割り当てることで、パフォーマンスを向上させ、過剰なプロビジョニングを防止します。Kubernetes は、物理マシンまたは仮想マシンのクラスタ上でコンテナをスケジュールし実行するためのプラットフォームを提供します。 Kubernetes アーキテクチャは、クラスタを複数のコンポーネントに分割し、それらのコンポーネントが連携してクラスタを定義された状態に維持します。Red Hat® OpenShift® は、Cloud Native Computing Foundation (CNCF) の認定を受けた Kubernetes 製品であり、Kubernetes を基盤として使用して、ハイブリッドクラウド環境全体で一貫した方法でクラウドネイティブ・アプリケーションを提供するための完全なプラットフォームを実現します。
コンテナと仮想マシン
仮想化は、ソフトウェアで抽象化レイヤーを作成し、コンピュータのハードウェア要素をハイパーバイザーによって制御して複数の仮想コンピュータに分配できるようにする技術です。仮想マシン (VM) はコンテナが稼働できる環境を提供しますが、コンテナは仮想環境に結び付いているわけではありません。コンテナは仮想化を処理する手段ですが、ハイパーバイザーを必要としないため、リソースをより迅速にプロビジョニングし、新しいアプリケーションをより短時間で提供することが可能です。一部のソフトウェア (Red Hat® OpenShift® Virtualization など) はコンテナのオーケストレーションも仮想マシンの管理もできますが、コンテナと仮想マシンは補完的ながら異なるアプローチです。
- 仮想化を使用すると、単一の物理ハードウェアシステムから複数のシミュレートされた環境や専用リソースを作成することができます。
- コンテナは同じオペレーティングシステム・カーネルを共有し、アプリケーションプロセスをシステム全体から分離します。たとえば、ARM Linux システムは ARM Linux コンテナを実行し、x86 Linux システムは x86 Linux コンテナを実行し、x86 Windows システムは x86 Windows コンテナを実行します。Linux コンテナは可搬性に優れていますが、基盤となるシステムとの互換性が必要です。
VM の機能には制限があります。なぜなら、VM を作成するハイパーバイザーが物理マシンのリソースと結び付いているためです。それに対してコンテナは、同じオペレーティングシステム・カーネルとパッケージ・アプリケーションを共有します。コンテナはハードウェアではなくオペレーティングシステムを仮想化するため、リソースの分離と割り当ての機能は類似していますが、コンテナと VM は異なる動作をします。
IT インフラストラクチャ内でコンテナと仮想マシンを併用することも可能です。ハイブリッド環境では、コンテナ化されたアプリケーションと VM ベースのアプリケーションを同じインフラストラクチャ上で実行できるため、さまざまなニーズに適応する柔軟なアプローチが実現します。これはコンテナネイティブ仮想化と呼ばれています。既存の VM インフラストラクチャを使用してコンテナ化されたアプリケーションをホストしたり、IT 全体を完全に再構築することなくワークロードを徐々にコンテナに移行したりすることができます。
コンテナのセキュリティとガバナンス
最初から安全なものはありません。コンテナのセキュリティには多くの要素があります。コンテナのパイプラインとアプリケーションのほか、デプロイメント環境やインフラストラクチャを保護する必要があり、エンタープライズ向けのセキュリティツールやポリシーとの統合計画も必要です。静的なセキュリティポリシーやチェックリストはエンタープライズ環境内の無数のコンテナに適用できる拡張性を持たないため、コンテナのパイプラインに優れたセキュリティを組み込む方法を理解しておく必要があります。
DevSecOps アプローチとは、文化、自動化、プラットフォーム設計をセキュリティと統合し、セキュリティをチーム間の共有責任として扱うアプローチです。コンテナのセキュリティポリシーでは、通信経路とアクセス制御における分離と信頼性を確保し、マルウェアスキャンやイメージ署名などのツールを使用して、コンテナの動作中に発生する可能性のある脆弱性に対処する必要があります。DevSecOps アプローチは、IT ライフサイクル全体を通して一貫したセキュリティを維持するのに役立ちます。
サーバーレス・アーキテクチャとコンテナ
サーバーレスは、開発者がサーバーを管理する必要なくアプリケーションを構築および実行できるようにするクラウドネイティブ開発モデルです。「サーバーレス」とは、サーバーが存在しないという意味ではありません。アプリケーション開発からサーバーが抽象化されていることを意味します。サーバー・インフラストラクチャのプロビジョニング、保守、スケーリングといった日常的な作業はクラウドプロバイダーが処理します。
サーバーレスでは、開発者はコードをコンテナにパッケージ化してデプロイします。デプロイされたサーバーレス・アプリケーションは需要に対応し、必要に応じて自動的にスケールアップやスケールダウンを行います。パブリッククラウドプロバイダーのサーバーレスサービスは、通常、イベント駆動型実行モデルを使用してオンデマンドで課金されます。そのため、サーバーレス機能がアイドル状態である間は、費用がかかりません。
ユースケースとアプリケーション
コンテナは、多数のワークロードやユースケースにデプロイできます。コンテナはクラウドネイティブ開発スタイルに必要な基盤テクノロジーを提供するため、DevOps や CI/CD (継続的インテグレーションと継続的デプロイメント) を容易に開始でき、またサーバーレスにも移行できます。
コンテナベースのアプリケーションは、高度に分散されたクラウド・アーキテクチャ全体で動作します。 アプリケーション・ランタイムは、開発、提供、統合、および自動化のための統一された環境を支援するツールを提供します。
また、コンテナに統合テクノロジーをデプロイできるため、Apache Kafka を介したリアルタイムのデータストリーミングなど、アプリケーションとデータの接続方法を容易に拡張できます。マイクロサービス・アーキテクチャを構築する場合、コンテナは各マイクロサービスとそれらを接続するサービスメッシュ・ネットワークの理想的なデプロイメントユニットとなります。
Red Hat のコンテナを選ぶ理由
Red Hat は長年にわたってオープンソース・コミュニティに携わり、コンテナの安全性、安定性、信頼性、そしてサポートの向上を目指してきました。また、Red Hat は Docker および Kubernetes のコードベースに対する世界第 2 位のコントリビューターであり、OCI や Cloud Native Computing Foundation と連携してコンテナの機能、信頼性、セキュリティの向上に取り組んでいます。あらゆるオープンソース・プロジェクトと同様に、Red Hat はアップストリーム・コードベースにコード提供や機能改良の点で貢献し、技術の進歩に寄与してきました。
コンテナに重点を置いた Red Hat のソリューションとトレーニングでは、コンテナがもたらすあらゆるメリットを活用するためのインフラストラクチャ、プラットフォーム、制御性、知識が提供されます。Red Hat のソリューションは、コンテナを念頭に置いて構築されたプラットフォームに開発チームを移行したい、効率的かつ効果的なオペレーティングシステム上でコンテナ・インフラストラクチャを実行したい、コンテナが生成する膨大なデータに対応できるストレージ・ソリューションを提供したいといったあらゆるニーズに対応します。
Red Hat OpenShift は、コンテナおよび重要なアプリケーションのセキュリティと信頼性に対するスケーラブルなアプローチを実現します。Red Hat OpenShift は包括的なツールおよびサービス一式を備えており、構築、デプロイメントから実行、管理に至るまで、アプリケーション開発のライフサイクル全体を効率化します。マルチクラウド環境やハイブリッド環境全体で AI を活用してアプリケーションを構築したりモダナイズしたりするなど、アプリケーションのモダナイゼーションの複雑な取り組みを単純化することで、開発者や IT 運用チームの効率性および生産性を高めます。
Red Hat Enterprise Linux は、クラウドへの移行からエッジとコンテナの活用、AI ワークロードの実験まで IT の次のステップを支える、信頼できる基盤となります。開発者はコンテナツール、データベース、プログラミング言語、ランタイムへのアクセスを通じてアプリケーション開発を効率化でき、フットプリントを問わず一貫したエクスペリエンスを利用できます。コンテナツールを活用することで複雑さを軽減し、可搬性と標準化を向上させるとともに、構築する Red Hat Enterprise Linux オペレーティングシステム・イメージをカスタマイズし、強化することができます。
Red Hat Enterprise Linux 用イメージモードは、コンテナ・テクノロジーを活用して OS の構築、デプロイ、管理を行うシンプルで一貫したアプローチです。アプリケーションと同じコンテナツールとワークフローで OS を管理することで、チーム間で一貫したエクスペリエンスと共通言語を実現します。イメージモードはサーバーの構成を一定に保ち、システムの不安定性やセキュリティリスクにつながる逸脱を排除することで、ドリフトの課題に対処します。また、イミュータブルなシステムイメージによって攻撃対象領域が縮小され、各イメージに含まれる内容を正確に把握できるため、セキュリティの強化にも役立ちます。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。