GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

クラウドコンテナの仕組みとその利点

テクノロジーのトレンドは行き来していますが、クラウドコンテナは、ここにとどまるテクノロジーの1つです。それらの起源は1982年のUnixにまでさかのぼることができますが、仮想化からの次の論理的なステップとして、コンテナは過去10年まで広く受け入れられませんでした。今日、これらはアプリケーションのモダナイゼーションと展開の一般的な手段です。

コンテナ化の目標、つまり、レガシーアプリをコンテナに移行するプロセスは、さまざまな環境で複雑なソフトウェアアプリケーションを作成、パッケージ化、および展開するためのより良い方法を提供することです。コンテナ化は、アプリケーションのデプロイ、更新/変更/変更、拡張を簡単にする方法を提供します。

コンテナは、仮想マシン(VM)に比べて軽量であるため、クラウド環境でますます人気が高まっています。多くの組織は、コンテナをVMの大規模なワークロードの代替と見なしています。

クラウドコンテナとは何ですか?

コンピューティングコンテナには、アプリケーションコードとそのライブラリおよび関数の依存関係が含まれているため、どこでも実行できます。デスクトップPC、従来のITサーバーインフラストラクチャ、またはクラウドのいずれでも。

仮想マシンとは異なり、コンテナにはすべてのインスタンスに本格的なOSを含める必要がないため、小型、高速、ポータブルです。必要なのは、アプリを実行し、ホストOSの他の機能と必要なリソースを活用するために必要なライブラリと依存関係だけです。

コンテナは、コンテナのシステム、アプリケーション、および環境を含むテンプレートであるコンテナイメージから作成されます。コンテナイメージを使用すると、コンテナを作成する作業の多くがすでに完了しています。あなたがしなければならないのは、計算ロジックを追加することです。コードを開発するためのライブラリやテンプレートがあるのと同じように、用途固有のコンテナを作成するためのさまざまなテンプレートがあります。

複数のコンテナーテンプレートサイトがありますが、マーケットリーダーはDockerであり、2013年にコンテナーのトレンドを開始しました。Dockerは、ユーザーがコンテナーイメージを作成し、外部レジストリからイメージをプッシュまたはプルし、コンテナーを実行および管理できるようにするツールのセットです。多くの異なる環境。また、コンテナテンプレートの最大の配布ハブを実行します。 LinuxシステムにDockerをインストールする方法については、Dockerのインストールと使用ガイドを参照してください。

コンテナはサイズと複雑さが大幅に削減され、多くの場合、単一の機能のみを実行します。小さいからといって、管理する必要がないわけではありません。コンテナは、オーケストレーションと呼ばれるプロセスを通じて維持されます。オーケストレーションは、コンテナ化されたワークロードとサービスを実行するために必要な運用タスクの多くを自動化します。

オーケストレーションには、コンテナのライフサイクルの管理、プロビジョニング、導入、スケールアップまたはスケールダウン、ネットワーキング、負荷分散などが含まれます。オーケストレーションアプリはいくつかありますが、最も人気のあるisKubernetesは、元々Googleによって設計され、現在はCloud NativeComputingFoundationによって保守されています。

コンテナと仮想マシン

コンテナは、ここや他の場所で、正当な理由でVMと定期的に比較されます。これらは同じ概念で動作します。つまり、同じ物理ハードウェア上で複数のアプリケーション環境を動作させます。

VMは、第1世代のクラウドコンピューティングの基盤と見なされています。 64ビットコンピューティングの出現により、サーバーは32ビットプロセッサの4GBのメモリ制限を超えて進化しました。マルチコアの登場により、複数の仮想環境向けの処理能力が生み出されました。十分なメモリとコアがあれば、1つの物理システムで100以上のVMを実行できます。

VMには、Windows ServerまたはLinuxのバージョンに関係なく、1〜2ギガバイトのメモリを消費する完全なオペレーティング環境が必要です。コンテナは大幅に削減された動作環境であり、わずか6MBのメモリを使用します。

利点は、すべてを処理するためのメモリと処理能力があれば、1台の堅牢なサーバーに数百のコンテナを配置できることです。

VMハイパーバイザーは物理ハードウェアを仮想化し、コンテナーはオペレーティングシステムを仮想化します。ハイパーバイザーは、すべてのI / Oとマシンのアクティビティを管理および調整し、負荷のバランスを取り、処理やデータ移動などのすべての物理タスクを処理します。

Kubernetesのようなコンテナマネージャーは、コンテナが設定されていないソフトウェアタスクを処理します。コンテナ内のアプリには、ライブラリと依存関係に必要なものがあります。 OSから何か他のものが必要な場合は、コンテナマネージャーがそれを処理します。

VMとコンテナに関しては、どちらかまたは両方の決定ではありません。それらは簡単に共存でき、VM内のコンテナは機能しません。

クラウドコンテナはどのように機能しますか?

コンテナテクノロジーは、Unixでパーティションとchrootプロセスを最初に分離したことで生まれました。これは、後にLinuxに追加されました。コンテナは、基盤となるOSに依存するのではなく、依存関係ファイルとライブラリをコンテナにバンドルします。コンテナで実行されるアプリは、標準の仮想環境または非仮想環境で実行される本格的で複雑なアプリではありません。各コンテナは仮想的に分離されて動作し、各アプリケーションはVMを必要とせずに共有OSカーネルにアクセスします。

クラウドコンテナは、単純な単一目的のアプリであろうとMySQLデータベースであろうと、単一のアプリケーションを仮想化するように設計されています。コンテナーにはサーバーレベルではなくアプリケーションレベルでの分離境界があるため、問題が発生した場合にコンテナーは分離されます。アプリがクラッシュしたり、プロセスによる原因不明のリソースの過度の消費があった場合、それはその個々のコンテナにのみ影響し、VM全体またはサーバー全体には影響しません。オーケストレーターは、問題のあるコンテナーを置き換えるために別のコンテナーをスピンアップすることができます。また、問題のあるコンテナをシャットダウンして再起動します。

クラウドコンピューティングにおけるコンテナの利点

コンテナを使用する利点はたくさんあります。まず、テンプレートの使用は、クラスとライブラリがオブジェクト指向プログラミング(OOP)でどのように機能するかに似ています。 OOPでは、クラスまたはオブジェクトを作成し、それを複数のアプリで再利用します。同じことがコンテナにも当てはまります。単一のコンテナイメージを使用して、複数のコンテナを作成します。コンテナイメージは他のよりカスタマイズされたコンテナイメージの親として機能するため、継承のOOP概念はコンテナにも適用されます。

コンテナは、デスクトップ、ローカルサーバー、またはクラウドで一貫して実行されます。これにより、展開前のテストが簡単になります。一部のシナリオでは、展開設定と同様の規模のテストベッドが必要です。これは、テスト環境にかなりのリソースを割り当てることを意味します。パフォーマンスが一定であるという知識があれば、クラウド展開の前にコンテナをローカルでテストできます。

コンテナの主な利点は、特にVMと比較した場合、コンテナが軽量でポータブルであることです。コンテナはマシンのOSカーネルを共有するため、多くのオーバーヘッドが排除されます。 VMと比較してサイズが小さいということは、迅速に起動でき、水平方向に拡張できるクラウドネイティブアプリケーションをより適切にサポートできることを意味します。

  1. これらはプラットフォームに依存しません。コンテナはすべての依存関係を持ち、カーネル呼び出しを行わない限り、さまざまなLinuxフレーバーで使用できます。

  2. 最新の開発アーキテクチャをサポート:プラットフォーム間での展開の移植性/一貫性とサイズの小ささの組み合わせにより、コンテナーは、アジャイル、DevOps、サーバーレス、マイクロサービスなどの最新の開発およびアプリケーション手法に最適です。

  3. パフォーマンスの向上:コンテナ化されたアプリは通常、管理しやすい部分に分割された大きなアプリです。これには複数の利点がありますが、特にパフォーマンスの向上があります。コンポーネントにリソースを増やす必要がある場合、コンテナは自動的にスケーリングしてより多くのCPUコア/メモリ/ネットワーキングを提供し、負荷が低下するとスケールダウンするためです。

  4. 効率的なデバッグ:モノリシックアプリに対するコンテナ化のもう1つの利点は、パフォーマンスのボトルネックをすばやく見つけることができることです。モノリシックアプリでは、開発者はパフォーマンスのボトルネックを見つけるために多くの試行錯誤/排除のプロセスを実行する必要があります。コンポーネントに分解すると、問題のあるコードがより見やすくなり、開発者は問題のある場所をすばやく拡大できます。

  5. ハイブリッド/マルチクラウドのサポート:移植性があるため、コンテナーはオンプレミスとクラウドの間を行き来できます。また、あるクラウドプロバイダーから別のクラウドプロバイダーに移動することもできます。

  6. アプリケーションのモダナイゼーション:従来のオンプレミスアプリケーションをモダナイゼーションする一般的な方法は、コンテナー化して「そのまま」クラウドに移動することです。このモデルは「リフトアンドシフト」と呼ばれるため、お勧めしません。オンプレミスアプリはクラウドネイティブアプリとは動作が異なり、オンプレミスアプリを変更せずにクラウドに移動するだけでは、自動スケールアップや自動スケールダウンなどのクラウドのメリットを活用できません。

  7. 使用率の向上:モノリシックアプリでは、アプリ全体とそのすべてのメモリ使用量によってパフォーマンスを向上させる必要があります。これにより、サーバーの速度が低下します。コンテナ化されたアプリでは、パフォーマンスを重視するコンポーネントを拡張する必要があります。それは自動的に行われ、オーケストレーターは必要に応じてリソースをスケールアップし、タスクが完了するとスケールダウンします。

結論

コンテナは、企業がオンプレミスアプリをクラウドに移行し、クラウドがもたらすすべてのメリット(スケール、弾力性、DevOps開発、オンプレミスリソースのクラウドプロバイダーへのオフロード)を享受するためのますます人気のある方法です。

このテクノロジーは成熟しており、Microsoft Azureを含むDockerの競合他社や、RedHatOpenShiftなどのKubernetesの競合他社が多数存在します。ほとんどのクラウドプロバイダーは、マネージドKubernetesサービスを備えた、ここLinodeの私たちを含め、いくつかの既製のコンテナーおよびオーケストレーションサービスを提供しています。


Docker
  1. Dockerコンテナをエクスポートおよびインポートする方法

  2. Dockerコンテナ間でデータを共有する方法

  3. Dockerコンテナを一覧表示する方法

  1. Dockerコンテナ内でアプリケーションをインストール、実行、削除する方法–パート2

  2. UbuntuでDockerをインストールしてDockerコンテナを実行する方法

  3. LXC コマンドを使用して LXC Linux コンテナを作成および起動する方法

  1. Dockerコンテナの監視:利点、ベストプラクティス、必須ツール

  2. Docker コンテナーをバックアップおよび復元する方法

  3. Docker コンテナを一時停止および再開する方法