3 Containers in the clouds illustration
Jump to section

Linux コンテナとは

URL をコピー

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

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

What is a container

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

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

Red Hat® OpenShift® は、ハイブリッドクラウド、エンタープライズ・コンテナ、および Kubernetes 環境における開発とデプロイに必要なものすべてを提供します。

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

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

virtualization vs containers

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

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

コンテナのオーケストレーションと仮想マシンの管理を組み合わせたツールもあります。詳細は、Red Hat Summit 2020 トラックをご覧ください。そのようなツールに関するブレイクアウトセッションが収録されています。

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 をご活用ください。

Keep reading

Article

What's a Linux container?

A Linux container is a set of processes isolated from the system, running from a distinct image that provides all the files necessary to support the processes.

Article

Containers vs VMs

Linux containers and virtual machines (VMs) are packaged computing environments that combine various IT components and isolate them from the rest of the system.

Article

What is container orchestration?

Container orchestration automates the deployment, management, scaling, and networking of containers.

コンテナの詳細はこちら

製品

エンタープライズ対応の Kubernetes コンテナ・プラットフォームで、ハイブリッドクラウド、マルチクラウド、エッジのデプロイメントを管理するフルスタックの自動運用機能を備えています。

リソース

チェックリスト

コンテナ型アプリケーションの開発:チームと話し合うべき 5 つのトピック

e ブック

Forrester が Red Hat を マルチクラウドコンテナ開発 プラットフォームのリーダーに選出

トレーニング

無料のトレーニングコース

Running Containers with Red Hat Technical Overview

無料のトレーニングコース

Containers, Kubernetes and Red Hat OpenShift Technical Overview

無料のトレーニングコース

Developing Cloud-Native Applications with Microservices Architectures

Illustration - mail

その他の関連コンテンツ

無料のニュースレター「Red Hat Shares」(英語) では、注目の IT トピックスに関するコンテンツをお届けしています。