ログイン / 登録 アカウント

コンテナ

Linux コンテナとは

Linux® コンテナとは、システムの他の部分とは分離された一連のプロセスです。これらのプロセスを実行するために必要なファイルはすべて個別のイメージから提供されます。つまり、Linux コンテナは、開発からテスト、最終的には本番環境へ移行するまで可搬性と一貫性を維持します。この特色によって、従来のテスト環境をレプリケートすることに依存する開発パイプラインよりも開発速度が向上します。広く普及して簡単に使用できることから、コンテナは IT セキュリティにとっても重要な部分です


なぜコンテナを使うのか

コンテナとは

アプリケーション開発を行っているところを想像してください。作業はノートパソコンで行っており、開発環境は特定の構成になっています。他の開発者とは、やや異なる構成かもしれません。開発中のアプリケーションはその構成を利用し、特定のライブラリ、依存関係、ファイルに依存しています。一方で、会社の開発環境および本番環境は、独自の構成と独自のサポートファイル群に基づき標準化されています。これらの環境をできるだけローカルでエミュレートしたいものの、サーバー環境を再現するためのオーバーヘッドは避けたいと考えています。では、開発したアプリケーションがこれらの環境でも動作し、品質保証テストにも合格し、多大な労力を要する書き換えや修正なしにデプロイできるようにするにはどうすればよいでしょうか?これを解決するのが、コンテナです。

アプリケーションを内包するコンテナには、必要なライブラリ、依存関係、ファイルが含まれているので、煩わしい副作用なしに、コンテナを本稼働へと進めることができます。実際、コンテナイメージの内容は Linux ディストリビューションのインストールと見なすことができます。RPM パッケージ、設定ファイルなどが完全に揃っているからです。ただし、コンテナイメージのディストリビューションは、オペレーティングシステムの新しいコピーをインストールするよりも簡単です。これで、危機的な問題をうまく回避できます。

これは一般的な例ですが、極めて高い可搬性、構成可能性、独立性が必要な場合、Linux コンテナをさまざまな方法で活用して問題に対処できます。Linux コンテナの特色となる点は、開発期間を短縮できることと、新しいビジネスニーズにすばやく対応できることです。Apache Kafka によるリアルタイム・データ・ストリーミングなどの場合は、コンテナは不可欠で、アプリケーションに必要なスケーラビリティを提供する唯一の手段となります。インフラストラクチャの形態がオンプレミス、クラウド、ハイブリッドのいずれであれ、コンテナはあらゆる要求に対応します。もちろん、適切なコンテナ・プラットフォームを選ぶことは、コンテナそのものと同様に重要です。


コンテナと仮想化の違い

この二者は同じものではありません。仮想化とコンテナについては、単に相互に補完するものとしてではなく、以下のように考えると簡単です。

  • 仮想化では、複数のオペレーティング・システム (Windows または Linux) を単一のシステム上で同時に実行できます。
  • コンテナは同じオペレーティングシステム・カーネルを共有し、アプリケーション・プロセスをシステムの他の部分から独立させます。たとえば、ARM Linux システムは ARM Linux コンテナを実行し、x86 Linux システムは x86 Linux コンテナを実行します。また x86 Windows システムは x86 Windows コンテナを実行します。Linux コンテナは極めて可搬性に優れていますが、基盤システムと互換性がなければなりません。

仮想化とコンテナ

これはつまり、どういうことでしょうか。第一に、仮想化はハイパーバイザーを使用してハードウェアをエミュレートします。それにより、複数のオペレーティングシステムを並列で実行できるようになります。しかし、この方法はコンテナを使用した場合ほど軽量ではありません。しかし、リソースや能力が限られている場合、高密度でデプロイできる、軽量なアプリケーションが必要になります。Linux コンテナは単一のオペレーティングシステムでネイティブに実行され、すべてのコンテナは同じシステムを共有します。アプリもサービスも軽量で済み、並列実行の負荷もかかりません。

Linux コンテナは、アプリケーションを開発、デプロイ、そして管理する革新的な方法の一つです。Linux コンテナのイメージは、移植性とバージョン管理を実現することにより、開発者のノートパソコンで動作するアプリケーションが本番環境でも確実に動作するものになるよう助けます。Linux コンテナの実行では、仮想マシンの場合ほどリソースを必要としません。また、標準インタフェース (開始、停止、環境変数など) が備わっていて、アプリケーションの分離を維持できます。さらには、大きなアプリケーション (複数コンテナ) の一部として簡単に管理でき、こうしたマルチコンテナ・アプリケーションをマルチクラウドでオーケストレーションできます。


LXC とは

Linux Containers プロジェクト (LXC) はオープンソースのコンテナ・プラットフォームで、一連のツール、テンプレート、ライブラリ、言語バインディングを提供します。LXC にはシンプルなコマンドライン・インタフェースがあり、コンテナを開始するユーザーエクスペリエンスが向上しています。

LXC が提供するオペレーティングシステム・レベルの仮想化環境は、多数の Linux ベースのシステムにインストールできます。お使いの Linux ディストリビューションでもパッケージリポジトリから利用できるかもしれません。


コンテナの歴史

コンテナの進化:ダウンロードボタン

現在でいうところのコンテナ技術は、2000 年に登場した FreeBSD jails から始まりました。このテクノロジーは FreeBSD システムを複数の「jail」と呼ばれるサブシステムへとパーティション化するものでした。jail は、システム管理者が組織内外の複数のユーザーと共有できる安全な環境として開発されました。

2001 年には、Jacques Gélinas 氏の VServer プロジェクトを通じて、Linux にも隔離環境の実装が登場しました。Linux で複数の制御されたユーザー空間を使用する、という基盤ができた後、現在の Linux コンテナへと発展していきました。

他のテクノロジーを組み合わせることで、この独立したアプローチはすぐに実現に近づきました。コントロールグループ (cgroups) とは、プロセスまたはプロセスのグループによるリソース使用を制御および制限するカーネル機能のことです。systemd は、ユーザー空間をセットアップしてプロセスを管理する初期化システムで、これらの隔離されたプロセスをより細かく制御するために cgroups によって使用されます。これらのテクノロジーは、Linux の全体的な制御性を向上させながら環境の分離性を維持する方法の枠組みとなりました。

Docker の登場

2008 年、Docker が (dotCloud を介して) その名前を冠したコンテナ・テクノロジーを開発しました。Docker テクノロジーによって多数の新しい概念やツールが加えられました。たとえば、新しいレイヤーイメージ、サーバーデーモン、構成済みコンテナイメージのライブラリを実行および構成するための簡単なコマンドライン・インタフェース、レジストリサーバーの概念などです。こうしたテクノロジーを組み合わせることにより、新しいレイヤーコンテナを迅速に構成し、他のユーザーと簡単に共有できます。

コンテナテクノロジーの相互運用性を確保するため、OCI イメージ、ディストリビューション、ランタイムの仕様という 3 つの主要な標準があります。これらの仕様を組み合わせることによって、コミュニティ・プロジェクト、商用製品、クラウドプロバイダーは相互運用可能なコンテナテクノロジーを構築できます (カスタムビルドのイメージをクラウドプロバイダーのレジストリサーバーにプッシュすることを考えてください。これが機能する必要があります)。Red Hat と Docker は、コンテナテクノロジーのオープンな業界標準化を可能にしている Open Container Initiative (OCI) のメンバーでもあります。


コンテナのセキュリティについて

コンテナは人気がありますが、安全性についてはどうでしょうか?コンテナのセキュリティにはさまざまな不確定要素があります。コンテナのパイプラインとアプリケーション、開発環境、インフラストラクチャを保護しなければなりません。また、組織のセキュリティツールとポリシーと統合させるための計画も必要になります。その計画の立案を、Red Hat がお手伝いします。


Red Hat がお手伝いします。

Red Hat は長年にわたりオープンソース・コミュニティに参加して、コンテナなどのテクノロジーの安全性、安定性、信頼性の向上に貢献してきました。それが Red Hat の役目です。多くのテクノロジーをサポートする Red Hat にあなたのサポートもお任せください。

Red Hat のテクノロジーを活用すれば、試行錯誤することなくコンテナを使用できるようになります。開発者チームをコンテナ向けプラットフォームに移行させる。最高クラスのオペレーティング・システム上でコンテナ・インフラストラクチャを稼動させる。コンテナが生成する大規模データのストレージ・ソリューションを提供する。あらゆるコンテナ・ソリューションに、Red Hat をご活用ください。

コンテナについてさらに詳しく知る