![Linuxでローカルファイルとリモートファイルを比較する方法](/f/131460d2a64c815ddea84e53fd1ec64e.png?width=100&height=100)
時間の経過とともに、アプリケーションの迅速なテストと展開に対する需要が高まり、ビジネスのスピードも向上しました。 サイクル、組織はペースの速いビジネスに追いつくために革新することを余儀なくされました 環境。
アプリケーションを最新化し、新しいアプリケーションを構築してアジャイルワークフローを作成するという探求は、コンテナーを使用するという概念につながりました。 コンテナ化テクノロジーは、仮想化とほぼ同じくらい古いものです。 しかし、コンテナはそれまであまり興奮しませんでした Docker 2013年にシーンに爆発し、開発者や他のITプロフェッショナルの間で熱狂的な関心を呼び起こしました。
現在、次のようなすべての巨大な技術エンティティ グーグル, アマゾン, マイクロソフト、 と Red Hat いくつか言及すると、時流に乗った。
開発者が直面した課題の1つは、ソフトウェア開発のすべての段階におけるコンピューティング環境の違いです。 ソフトウェア環境がステージごとに異なる場合、問題が発生します。
たとえば、アプリケーションは、実行を使用してテスト環境でシームレスに実行できます Python 3.6. ただし、実行中の本番環境に移植すると、アプリケーションの動作がおかしくなったり、エラーが返されたり、クラッシュしたりします。 Python 3.9.
この課題に対処し、1つのコンピューティングから移動したときにアプリケーションが確実に実行されるようにするために、コンテナーが登場しました。 ソフトウェア開発のすべての段階で、開発者のPCから本番環境に至るまでの環境 環境。 そして、そのような矛盾を引き起こす可能性があるのはソフトウェア環境だけではなく、 ネットワークトポロジー と セキュリティポリシー.
NS 容器 は、すべてのバイナリコード、ライブラリ、実行可能ファイル、依存関係、および構成ファイルをパックする分離されたソフトウェアユニットです。 1つのコンピューティング環境からに移植されたときにアプリケーションがスムーズに実行されるように単一のパッケージに 別。 軽量で持ち運びが簡単なオペレーティングシステムイメージは付属していません。
コンテナイメージは、アプリケーションの実行に必要なすべてのものをバンドルした、スタンドアロンの軽量で実行可能なパッケージです。 実行時に、コンテナイメージはコンテナに変換されます。 の場合
Dockerたとえば、Dockerイメージはで実行されるとDockerコンテナになります Dockerエンジン. Docker コンテナ化されたアプリケーションを構築するために使用されるランタイム環境です。コンテナーは、基盤となるオペレーティングシステムから完全に分離して実行され、コンテナー化されたアプリケーションは、コンピューティング環境やインフラストラクチャに関係なく、常に一貫して実行されます。 このため、開発者はこのラップトップの快適さからアプリケーションを開発し、サーバーに簡単にデプロイできます。
実行中のコンテナーの一貫性と信頼性により、開発者は、アプリケーションがどこにデプロイされていても、アプリケーションが期待どおりに実行されることを確信できます。
コンテナと仮想マシンが共有する共通点は、仮想化環境で動作することです。 コンテナ化は、ある意味で、仮想化テクノロジーの一形態です。 ただし、コンテナは仮想マシンとは1つ以上の点で異なります。
仮想インスタンスとも呼ばれる仮想マシンまたは VM つまり、物理サーバーまたはPCのエミュレーションです。 仮想化は、仮想マシンの作成を可能にするテクノロジーです。 仮想化の概念は1970年代初頭にさかのぼり、第1世代のクラウドテクノロジーの基盤を築きました。
仮想化では、ベアメタルサーバーまたはコンピューターハードウェアの上に抽象化レイヤーが作成されます。 これにより、単一サーバーのハードウェアリソースを複数の仮想マシン間で共有できるようになります。
抽象化レイヤーの作成に使用されるソフトウェアは、ハイパーバイザーと呼ばれます。 ハイパーバイザーは、実際のベアメタルまたはコンピューターハードウェアから仮想マシンとゲストOSを抽象化します。 したがって、仮想マシンはハイパーバイザーの上に配置され、抽象化レイヤーのおかげでハードウェアリソースを利用できるようになります。
仮想マシンは、ハイパーバイザーがインストールされている基盤となるオペレーティングシステム(ホストOS)から独立した完全なオペレーティングシステム(ゲストOS)を実行します。 次に、ゲストOSは、ライブラリやバイナリとともにアプリケーションを構築、テスト、および展開するためのプラットフォームを提供します。
[ あなたはおそらくそれも好きでしょう: CentOS / RHEL8にKVMをインストールする方法 ]
ハイパーバイザーには次の2つのタイプがあります。
これ ハイパーバイザー 物理サーバーまたは基盤となるハードウェアに直接インストールされます。 ハイパーバイザーとコンピューターハードウェアの間にあるオペレーティングシステムはないため、タグ名は ベアメタル ハイパーバイザー。 リソースがホストオペレーティングシステムと共有されないため、優れたサポートを提供します。
タイプ1ハイパーバイザーは効率が高いため、主にエンタープライズ環境で使用されます。 タイプ1ハイパーバイザーベンダーには次のものが含まれます VMware Esxi と KVM.
これは、ホスト型ハイパーバイザーとも見なされます。 ホストオペレーティングシステムの上にインストールされ、基盤となるハードウェアリソースをホストOSと共有します。
タイプ2ハイパーバイザーは、小規模なコンピューティング環境に最適であり、主にオペレーティングシステムのテストと研究に使用されます。 タイプ2ハイパーバイザーベンダーには次のものが含まれます Oracle VirtualBox と VMware Workstation Pro.
仮想マシンはサイズが大きく(数GBを占める可能性があります)、起動と停止が遅く、多くのシステムリソースを大量に消費する傾向があり、リソースが限られているためにハングアップとパフォーマンスの低下につながります。 そのため、仮想マシンはかさばると見なされ、高いオーバーヘッドコストが発生します。
仮想マシンとは異なり、コンテナーはハイパーバイザーを必要としません。 コンテナは、物理サーバーとそのオペレーティングシステムの上に配置され、ライブラリやバイナリなど、OSと同じカーネルを共有します。 複数のコンテナーを同じシステムで実行でき、それぞれが残りのコンテナーから独自のアプリケーションとプロセスのセットを実行します。 人気のあるコンテナプラットフォームには次のものがあります Docker と ポッドマン.
仮想マシンとは異なり、コンテナは基盤となるオペレーティングシステムから完全に分離して実行されます。 コンテナは非常に軽量で(わずか数メガバイト)、占有するスペースが少なく、リソースに優しいです。 起動と停止が簡単で、仮想マシンよりも多くのアプリケーションを処理できます。
コンテナーは、PCから実稼働環境(構内またはクラウド)にアプリケーションを設計、テスト、およびデプロイするための便利な方法を提供します。 コンテナ化されたアプリケーションを使用する利点のいくつかを次に示します。
コンテナの前は、フロントエンドコンポーネントとバックエンドコンポーネントの両方で構成されるアプリケーション全体が単一のパッケージにバンドルされる、昔ながらのモノリシックモデルがありました。 コンテナを使用すると、アプリケーションを、相互に通信できる複数の個別のコンポーネントに分割できます。
このように、開発チームは、アプリケーションの相互作用に関して大きな変更を加えなければ、アプリケーションのさまざまな部分で共同作業を行うことができます。
これがマイクロサービスの概念の基礎となっています。
開発者はアプリケーションの個々のコンポーネントで作業し、以前よりもはるかに高速にエラーをデバッグできるため、モジュール性が向上すると生産性が向上します。
仮想マシンやその他の従来のコンピューティング環境と比較して、コンテナにはオペレーティングシステムが含まれていないため、使用するシステムリソースが少なくなります。 これにより、アプリケーションを構築およびテストするために高価なサーバーを調達するための不必要な出費を回避できます。
フットプリントが小さいため、コンテナ化されたアプリケーションは複数のコンピューティング環境/オペレーティングシステムに簡単に展開できます。
コンテナを使用すると、アプリケーションの迅速な展開とスケーリングが可能になります。 また、複数のソフトウェア環境にアプリケーションを展開するために必要とされている柔軟性も提供します。
コンテナはで重要な役割を果たします DevOps コンテナ化されたアプリケーションがなければ、状況がどうなるか想像することは不可能です。 では、コンテナは何をテーブルにもたらしますか?
まず、コンテナはマイクロサービスアーキテクチャを支え、アプリケーション全体のビルディングブロックを個別に開発、デプロイ、スケーリングできるようにします。 前述のように、これにより、アプリケーションのコラボレーションと迅速な展開が促進されます。
コンテナ化は、アプリケーションを構築するための制御された一貫性のある環境を提供することにより、CI / CDパイプラインを促進する上でも主要な役割を果たします。 すべてのライブラリと依存関係は、コードとともに1つのユニットにパッケージ化されているため、展開がより迅速かつ簡単になります。 テストされるアプリケーションは、本番環境にデプロイされる正確なソフトウェアになります。
さらに、コンテナーは、アプリケーションが複数のマイクロサービスに分割され、それぞれが別々のコンテナーにある場合に、パッチと更新のロールアウトを強化します。 個々のコンテナは、アプリケーションの残りの部分を中断することなく、検査、パッチ適用、および再起動できます。
成熟を目指している組織 DevOps アジャイルでシームレスな展開のためにコンテナの力を活用することを検討する必要があります。 課題は、それらを構成し、保護し、複数の環境にシームレスに展開する方法を知ることにあります。