テクノロジー 開発 非公開: DevOps におけるコンテナ化: 知っておくべきことすべて

DevOps におけるコンテナ化: 知っておくべきことすべて

コンテナ化により、企業はオペレーティング システムを仮想化し、コンテナと呼ばれる分離された領域にアプリケーションをインストールできるようになります。

コンテナ化は、アプリケーションを作成する最新の方法です。

レガシー システムとそのアーキテクチャが、人々が「私のコードは機能しません。コードが機能しません」と言い始めるまでにどのようにして障害にぶつかったのかを詳しく見てみましょう。何故かはわからない!コードは機能しますが、理由がわかりません。」

アプリケーションが成長するにつれて、アプリケーションの定義は単なるコード片から、コード、バイナリ、構成、実行環境のセットへと変化しました。

私たちが初期の頃に頻繁に経験した状況を想像してみてください。開発者はラップトップ上で Java 8 コードを開発しました。同じコードは Web サーバー/VM では機能しませんでした。多くのトラブルシューティングを行った結果、サーバーの Java バージョンは JDK11 であることが判明しました。

混乱した?

コードは同じままですが、コードをサポートするソフトウェアの構成が異なりました。些細なことが原因で、開発者は大きなトラブルに見舞われました。コードを Linux から Windows OS に転送するときにも同じことが言えます。

レガシー システムの管理オーバーヘッド、スケーラビリティ、およびコスト効率の悪さにより、ワークロードがさまざまなクラウド プロバイダーが提供する VM 上でホストされるクラウド コンピューティングが採用されました。それは仮想化にほかなりません。

仮想化とは、簡単に言えば、クラウド プロバイダー/データ センターが提供する単一のサーバー/VM 上の複数のオペレーティング システム (OS) です。仮想化により、物理ハードウェアを必要とせず、また内部に何が入っているかを知る必要もなく、アプリケーションが分離されます。

しかし、このアーキテクチャも時の試練に耐えられず、コンテナ化が導入されました。

コンテナ化は、オペレーティング システムをチャンクに分割し、OS を使用することでより効率的に使用できるようにすることに重点を置いています。これは、VM で実行されているオペレーティング システムやハードウェアを気にすることなく、アプリケーション コードを実行する小さなミニ環境です。

ここで、コンテナ化について詳しく説明します。

DevOps におけるコンテナ化: 知っておくべきことすべて
DevOps におけるコンテナ化: 知っておくべきことすべて

コンテナ化とは何ですか?

コンテナ化-1
コンテナ化-1

コンテナ化は、オペレーティング システムの仮想化の一種で、環境 (アプリケーションが実行されるオペレーティング システム) を含むアプリケーションのすべてのコンポーネントが、コンテナと呼ばれる VM 上の分離されたスペースにパッケージ化されます。これらのコンテナの基盤となるオペレーティング システムは同じですが、構成の一部として独自のオペレーティング システムを持っています。

コンテナーは大規模で重いシステムではありません。その代わり、小型で持ち運びが容易で、実行やセットアップが簡単です。開発者がアプリをコンテナ化すると、コンテナはホスト オペレーティング システムから分離され、軽量の仮想マシンのようにシステムのリソースへのアクセスが制限されます。コンテナ化されたアプリケーションは、書き直すことなく、ベアメタル、クラウド、VM などのさまざまなインフラストラクチャ上で実行できます。

コンテナ化テクノロジーはどのように機能するのでしょうか?

コンテナ化は、アプリケーションに必要なすべての要素を単一の仮想ユニットに配置することで機能します。

コンテナ化により、開発者はアプリケーション コードを構成ファイル、依存関係、ライブラリとバンドルできるようになります。その単一のソフトウェア パッケージ (コンテナー) をホスト OS から分離します。パッケージ化により、コンテナーが独立して移植可能になるため、どのプラットフォームやクラウドでも問題なく実行できます。レゴボードから作られた小さなレゴ作品と考えてください。

ただし、コンテナーは、仮想化されたハードウェアまたはカーネル リソースを直接使用しません。コンテナーは、VM 上で実行されているオペレーティング システムを気にしたり心配したりしません。

代わりに、コンテナーは、コンテナーを処理し、基礎となるリソースを隠すように特別に設計されたプラットフォームの「上で」実行されます。コンテナーは、アプリケーションの最も重要なコンポーネントと依存関係のみで構成されているため、速度とサイズの点で仮想マシンやベアメタル サーバーなどの代替手段よりも優れています。また、関連する問題に対処することなく、さまざまなコンテキストで同じアプリケーションを実行できるようになります。

コンテナ化と仮想化

アプリケーションのライフサイクルに詳しくない人は、Docker などのソフトウェアが行うコンテナ化と従来のサーバー仮想化 (HyperV や VMware ESXi などのハイパーバイザーが可能にするもの) の違いを必ずしも理解しているわけではありません。ただし、違いは次のとおりです。

コンテナ化と仮想化 1
コンテナ化と仮想化 1

サーバー仮想化では、ハードウェアは隠蔽され、その上でオペレーティング システムが実行されます。コンテナ化は、オペレーティング システム上でアプリを実行する方法です。仮想化は基盤となるホスト オペレーティング システムに依存しますが、十分なリソースがない限りハードウェアについては心配ありません。相違点の完全なリストは次のとおりです。

財産 コンテナ化 仮想化
環境 コンテナーには、複数の環境で実行される OS がパッケージ化されています。 仮想化はホスト上に構築され、OS によって分離され、マシンとして表示されます。
起動する
コンテナーの起動時間は非常に短いか、ほとんどかかりません。 仮想マシンの起動には数分かかります。
リソース これらは、リソースをまったく必要としない非常に小規模な環境です。 VM はリソースを大量に消費し、スケーリング機能がありません。
実装 基盤となるハードウェアはハイパーバイザーによって仮想化されます (同じハードウェアの使用)。 コンテナはオペレーティング システムを仮想化します (同じ OS を使用します)。
料金 導入がより簡単かつ安価になります。 これらは高価であり、マシンのサイズに応じてクラウド プロバイダーに多額の料金を支払う必要があります。
コンテナ化と仮想化

コンテナ化の層

コンテナ化の層
コンテナ化の層

ハードウェア インフラストラクチャ: 各アプリケーションの基盤は、生産的に使用できる具体的なリソースの集合です。コンテナが正しく機能するには、これらのリソースが存在する必要があります。これらはラップトップ上で実行されているか、クラウドに接続されている多くのデータ センターの 1 つで実行されている可能性があります。

ホスト オペレーティング システム: ハードウェア層の次は、ホスト オペレーティング システムです。ハードウェア層と同様に、これは Windows または *nix をパーソナル コンピューターにインストールするのと同じくらい簡単な場合もあれば、クラウド サービス プロバイダーによって完全に処理される場合もあります。

コンテナ エンジン: ここで、物事がエキサイティングな展開を始めます。コンテナ エンジンです。コンテナ エンジンは、ホスト オペレーティング システム上にインストールされるソフトウェアであり、コンテナ化されたアプリケーションに必要なリソースを仮想化する役割を果たします。

この層は、コンピューター上で Docker を実行するときに最も理解しやすい層です。この層は、コンテナーが稼働していることを保証し、そのライフサイクル全体を管理します。

コンテナ: コンテナ化されたアプリは、アプリが実行する必要があるすべてのライブラリ、バイナリ、構成設定を含むコードの一部です。コンテナは Docker コンテナとも呼ばれます。コンテナ化されたアプリケーションは、オペレーティング システムのカーネルとは異なる「ユーザー空間」でプロセスとして動作します。

コンテナ化のメリット

コンテナ化のメリット
コンテナ化のメリット

移植性 : アプリケーションがある環境 (ステージングなど) ではうまく機能するのに、別の環境ではうまく機能しないという不満を抱く人がいます。これは DevOps のジレンマです。通常、問題は環境の違いです。おそらく依存関係が更新された可能性があります。コンテナ化により、依存関係を含む同じコンテナー イメージをどこでも実行できます。

高速 : コンテナーは、仮想マシンやベアメタル サーバーよりも速く起動します。リソースとアプリのサイズに応じて、コンテナーは数秒で起動しますが、仮想マシンは数分かかります。

リソース効率 : コンテナーにはアプリ固有のファイルのみが含まれるため、仮想マシンよりも効率的です。仮想マシンはギガバイトですが、コンテナーはメガバイトです。コンテナーを使用すると、チームはサーバー リソースを効率的に使用できます。

導入と開発のシンプルさ : ポータブル コンテナはどこでも使用できます。コンテナ化されたアプリは高速かつ小型で、導入が簡単です。

コンテナ化により、チームはローカルと運用環境で同じイメージを構築できるようになります。コンテナー アプリを使用すると、ある場所では機能するが別の場所では機能しないという状況を減らすことができます。 CI/CD パイプラインはコンテナーの構築をサポートします。これらの利点により、チームの生産性が向上します。

トラブルシューティング : コンテナ化では、アプリケーションを分離して分離します。 1 つのコンテナーに障害が発生しても、他のコンテナーの機能には影響しません。開発チームは、他のコンテナに影響を与えることなく、欠陥のあるコンテナを特定して修復できます。コンテナ エンジンは、SELinux アクセス制御を使用して、コンテナの問題を見つけて隔離できます。

セキュリティ : プログラムをコンテナ化することで、マルウェアが他のアプリやホスト システムに損害を与えるのを防ぎます。指定されたセキュリティ権限は、望ましくないコンポーネントが他のコンテナに侵入するのを阻止したり、通信を制限したりするために設定されます。

管理性 : コンテナ オーケストレーション プラットフォームを使用して、コンテナ化されたワークロードとサービスを自動化します。コンテナ オーケストレーションにより、新しいアプリ バージョンのリリース、コンテナ化されたプログラムのスケーリング、監視、ロギング、デバッグなどの管理作業が簡素化されます。

継続性 : 1 つのコンテナで障害が発生しても、他のコンテナには影響しません。開発者は、他のコンテナに影響を与えることなく 1 つのコンテナを修正できます。コンテナ化により運用の継続性が保証されます。

結論

コンテナ化は最近のソフトウェア開発コンセプトであり、時間の経過とともにより効率的になります。その支援者は、開発者がソフトウェアやアプリをより迅速かつ安全に作成および展開できるようになると信じています。

コンテナ化エコシステムが成熟し成長するにつれて、業界関係者は価格が下がると予想しています。ただし、運用上の問題は解決されましたが、非常に多くの小規模な環境によるメンテナンスのオーバーヘッドが後回しになってしまいます。コンテナ化で次に重要なのはオーケストレーションです。

最新のアプリはここで止まりません。 Kubernetes は、コンテナ化とマイクロサービスにおける次の目玉です。 Kubernetes を使用すると、コンテナーのインストールのスケールアップと管理が容易になります。 K8s は、Docker や LXC よりも大規模なコンテナーのデプロイメントを管理します。 K8s は、コンテナーを管理するための人気のツールです。

今やそのコンテナは過去のものとなり、一般的には K8 に飛びつくことをお勧めします。

「 DevOps におけるコンテナ化: 知っておくべきことすべて」についてわかりやすく解説!絶対に観るべきベスト2動画

第9回 とことんDevOps勉強会「Dockerに疲れた人のためのLXDではじめるシステムコンテナ入門」
1回で分かる:DevOpsとアジャイル開発の関係 | 米シリコンバレーCloud DevOpsアーキテクト(CKA)が解説 #devops #cicd #agile

コンテナ化により、企業はオペレーティング システムを仮想化し、コンテナと呼ばれる分離された領域にアプリケーションをインストールできるようになります。

コンテナ化は、アプリケーションを作成する最新の方法です。

レガシー システムとそのアーキテクチャが、人々が「私のコードは機能しません。コードが機能しません」と言い始めるまでにどのようにして障害にぶつかったのかを詳しく見てみましょう。何故かはわからない!コードは機能しますが、理由がわかりません。」

アプリケーションが成長するにつれて、アプリケーションの定義は単なるコード片から、コード、バイナリ、構成、実行環境のセットへと変化しました。

私たちが初期の頃に頻繁に経験した状況を想像してみてください。開発者はラップトップ上で Java 8 コードを開発しました。同じコードは Web サーバー/VM では機能しませんでした。多くのトラブルシューティングを行った結果、サーバーの Java バージョンは JDK11 であることが判明しました。

混乱した?

コードは同じままですが、コードをサポートするソフトウェアの構成が異なりました。些細なことが原因で、開発者は大きなトラブルに見舞われました。コードを Linux から Windows OS に転送するときにも同じことが言えます。

レガシー システムの管理オーバーヘッド、スケーラビリティ、およびコスト効率の悪さにより、ワークロードがさまざまなクラウド プロバイダーが提供する VM 上でホストされるクラウド コンピューティングが採用されました。それは仮想化にほかなりません。

仮想化とは、簡単に言えば、クラウド プロバイダー/データ センターが提供する単一のサーバー/VM 上の複数のオペレーティング システム (OS) です。仮想化により、物理ハードウェアを必要とせず、また内部に何が入っているかを知る必要もなく、アプリケーションが分離されます。

しかし、このアーキテクチャも時の試練に耐えられず、コンテナ化が導入されました。

コンテナ化は、オペレーティング システムをチャンクに分割し、OS を使用することでより効率的に使用できるようにすることに重点を置いています。これは、VM で実行されているオペレーティング システムやハードウェアを気にすることなく、アプリケーション コードを実行する小さなミニ環境です。

ここで、コンテナ化について詳しく説明します。

DevOps におけるコンテナ化: 知っておくべきことすべて
DevOps におけるコンテナ化: 知っておくべきことすべて

コンテナ化とは何ですか?

コンテナ化-1
コンテナ化-1

コンテナ化は、オペレーティング システムの仮想化の一種で、環境 (アプリケーションが実行されるオペレーティング システム) を含むアプリケーションのすべてのコンポーネントが、コンテナと呼ばれる VM 上の分離されたスペースにパッケージ化されます。これらのコンテナの基盤となるオペレーティング システムは同じですが、構成の一部として独自のオペレーティング システムを持っています。

コンテナーは大規模で重いシステムではありません。その代わり、小型で持ち運びが容易で、実行やセットアップが簡単です。開発者がアプリをコンテナ化すると、コンテナはホスト オペレーティング システムから分離され、軽量の仮想マシンのようにシステムのリソースへのアクセスが制限されます。コンテナ化されたアプリケーションは、書き直すことなく、ベアメタル、クラウド、VM などのさまざまなインフラストラクチャ上で実行できます。

コンテナ化テクノロジーはどのように機能するのでしょうか?

コンテナ化は、アプリケーションに必要なすべての要素を単一の仮想ユニットに配置することで機能します。

コンテナ化により、開発者はアプリケーション コードを構成ファイル、依存関係、ライブラリとバンドルできるようになります。その単一のソフトウェア パッケージ (コンテナー) をホスト OS から分離します。パッケージ化により、コンテナーが独立して移植可能になるため、どのプラットフォームやクラウドでも問題なく実行できます。レゴボードから作られた小さなレゴ作品と考えてください。

ただし、コンテナーは、仮想化されたハードウェアまたはカーネル リソースを直接使用しません。コンテナーは、VM 上で実行されているオペレーティング システムを気にしたり心配したりしません。

代わりに、コンテナーは、コンテナーを処理し、基礎となるリソースを隠すように特別に設計されたプラットフォームの「上で」実行されます。コンテナーは、アプリケーションの最も重要なコンポーネントと依存関係のみで構成されているため、速度とサイズの点で仮想マシンやベアメタル サーバーなどの代替手段よりも優れています。また、関連する問題に対処することなく、さまざまなコンテキストで同じアプリケーションを実行できるようになります。

コンテナ化と仮想化

アプリケーションのライフサイクルに詳しくない人は、Docker などのソフトウェアが行うコンテナ化と従来のサーバー仮想化 (HyperV や VMware ESXi などのハイパーバイザーが可能にするもの) の違いを必ずしも理解しているわけではありません。ただし、違いは次のとおりです。

コンテナ化と仮想化 1
コンテナ化と仮想化 1

サーバー仮想化では、ハードウェアは隠蔽され、その上でオペレーティング システムが実行されます。コンテナ化は、オペレーティング システム上でアプリを実行する方法です。仮想化は基盤となるホスト オペレーティング システムに依存しますが、十分なリソースがない限りハードウェアについては心配ありません。相違点の完全なリストは次のとおりです。

財産 コンテナ化 仮想化
環境 コンテナーには、複数の環境で実行される OS がパッケージ化されています。 仮想化はホスト上に構築され、OS によって分離され、マシンとして表示されます。
起動する
コンテナーの起動時間は非常に短いか、ほとんどかかりません。 仮想マシンの起動には数分かかります。
リソース これらは、リソースをまったく必要としない非常に小規模な環境です。 VM はリソースを大量に消費し、スケーリング機能がありません。
実装 基盤となるハードウェアはハイパーバイザーによって仮想化されます (同じハードウェアの使用)。 コンテナはオペレーティング システムを仮想化します (同じ OS を使用します)。
料金 導入がより簡単かつ安価になります。 これらは高価であり、マシンのサイズに応じてクラウド プロバイダーに多額の料金を支払う必要があります。
コンテナ化と仮想化

コンテナ化の層

コンテナ化の層
コンテナ化の層

ハードウェア インフラストラクチャ: 各アプリケーションの基盤は、生産的に使用できる具体的なリソースの集合です。コンテナが正しく機能するには、これらのリソースが存在する必要があります。これらはラップトップ上で実行されているか、クラウドに接続されている多くのデータ センターの 1 つで実行されている可能性があります。

ホスト オペレーティング システム: ハードウェア層の次は、ホスト オペレーティング システムです。ハードウェア層と同様に、これは Windows または *nix をパーソナル コンピューターにインストールするのと同じくらい簡単な場合もあれば、クラウド サービス プロバイダーによって完全に処理される場合もあります。

コンテナ エンジン: ここで、物事がエキサイティングな展開を始めます。コンテナ エンジンです。コンテナ エンジンは、ホスト オペレーティング システム上にインストールされるソフトウェアであり、コンテナ化されたアプリケーションに必要なリソースを仮想化する役割を果たします。

この層は、コンピューター上で Docker を実行するときに最も理解しやすい層です。この層は、コンテナーが稼働していることを保証し、そのライフサイクル全体を管理します。

コンテナ: コンテナ化されたアプリは、アプリが実行する必要があるすべてのライブラリ、バイナリ、構成設定を含むコードの一部です。コンテナは Docker コンテナとも呼ばれます。コンテナ化されたアプリケーションは、オペレーティング システムのカーネルとは異なる「ユーザー空間」でプロセスとして動作します。

コンテナ化のメリット

コンテナ化のメリット
コンテナ化のメリット

移植性 : アプリケーションがある環境 (ステージングなど) ではうまく機能するのに、別の環境ではうまく機能しないという不満を抱く人がいます。これは DevOps のジレンマです。通常、問題は環境の違いです。おそらく依存関係が更新された可能性があります。コンテナ化により、依存関係を含む同じコンテナー イメージをどこでも実行できます。

高速 : コンテナーは、仮想マシンやベアメタル サーバーよりも速く起動します。リソースとアプリのサイズに応じて、コンテナーは数秒で起動しますが、仮想マシンは数分かかります。

リソース効率 : コンテナーにはアプリ固有のファイルのみが含まれるため、仮想マシンよりも効率的です。仮想マシンはギガバイトですが、コンテナーはメガバイトです。コンテナーを使用すると、チームはサーバー リソースを効率的に使用できます。

導入と開発のシンプルさ : ポータブル コンテナはどこでも使用できます。コンテナ化されたアプリは高速かつ小型で、導入が簡単です。

コンテナ化により、チームはローカルと運用環境で同じイメージを構築できるようになります。コンテナー アプリを使用すると、ある場所では機能するが別の場所では機能しないという状況を減らすことができます。 CI/CD パイプラインはコンテナーの構築をサポートします。これらの利点により、チームの生産性が向上します。

トラブルシューティング : コンテナ化では、アプリケーションを分離して分離します。 1 つのコンテナーに障害が発生しても、他のコンテナーの機能には影響しません。開発チームは、他のコンテナに影響を与えることなく、欠陥のあるコンテナを特定して修復できます。コンテナ エンジンは、SELinux アクセス制御を使用して、コンテナの問題を見つけて隔離できます。

セキュリティ : プログラムをコンテナ化することで、マルウェアが他のアプリやホスト システムに損害を与えるのを防ぎます。指定されたセキュリティ権限は、望ましくないコンポーネントが他のコンテナに侵入するのを阻止したり、通信を制限したりするために設定されます。

管理性 : コンテナ オーケストレーション プラットフォームを使用して、コンテナ化されたワークロードとサービスを自動化します。コンテナ オーケストレーションにより、新しいアプリ バージョンのリリース、コンテナ化されたプログラムのスケーリング、監視、ロギング、デバッグなどの管理作業が簡素化されます。

継続性 : 1 つのコンテナで障害が発生しても、他のコンテナには影響しません。開発者は、他のコンテナに影響を与えることなく 1 つのコンテナを修正できます。コンテナ化により運用の継続性が保証されます。

結論

コンテナ化は最近のソフトウェア開発コンセプトであり、時間の経過とともにより効率的になります。その支援者は、開発者がソフトウェアやアプリをより迅速かつ安全に作成および展開できるようになると信じています。

コンテナ化エコシステムが成熟し成長するにつれて、業界関係者は価格が下がると予想しています。ただし、運用上の問題は解決されましたが、非常に多くの小規模な環境によるメンテナンスのオーバーヘッドが後回しになってしまいます。コンテナ化で次に重要なのはオーケストレーションです。

最新のアプリはここで止まりません。 Kubernetes は、コンテナ化とマイクロサービスにおける次の目玉です。 Kubernetes を使用すると、コンテナーのインストールのスケールアップと管理が容易になります。 K8s は、Docker や LXC よりも大規模なコンテナーのデプロイメントを管理します。 K8s は、コンテナーを管理するための人気のツールです。

今やそのコンテナは過去のものとなり、一般的には K8 に飛びつくことをお勧めします。

「 DevOps におけるコンテナ化: 知っておくべきことすべて」についてわかりやすく解説!絶対に観るべきベスト2動画

第9回 とことんDevOps勉強会「Dockerに疲れた人のためのLXDではじめるシステムコンテナ入門」
1回で分かる:DevOpsとアジャイル開発の関係 | 米シリコンバレーCloud DevOpsアーキテクト(CKA)が解説 #devops #cicd #agile