そもそもコンテナの必要性って?

コンテナのメリット

コンテナは、開発者のローカルラップトップからオンプレミスのデータセンターやクラウドに至るまで、複数の環境でアプリケーションの構築、テスト、導入、再導入を合理化する方法です。コンテナには次のようなメリットがあります

  • オーバーヘッドを削減
    コンテナにはオペレーティングシステムイメージが含まれていないため、従来の仮想マシン環境やハードウェア仮想マシン環境よりも少ないシステムリソースで稼働します。
  • 携帯性の向上
    コンテナで実行されるアプリケーションは、複数の異なるオペレーティングシステムやハードウェアプラットフォームに簡単に導入できます。
  • 一貫した運用を実現
    DevOps チームは、導入場所にかかわらず、コンテナ内のアプリケーションが同じように動作することを知っています。
  • 優れた効率
    コンテナを使用することで、アプリケーションの導入、パッチ適用、拡張がより迅速になります。
  • アプリケーション開発の向上
    コンテナは、開発、テスト、本番サイクルを短縮するための即応性に優れた DevOps の取り組みをサポートします。

コンテナのユースケース

コンテナの一般的な使用方法には、次のものがあり

  • 既存のアプリケーションを最新のクラウドアーキテクチャに移行して移行
    組織によっては、コンテナを使用して既存のアプリケーションをより最新の環境に移行する場合があります。この手法では、オペレーティングシステムの仮想化の基本的な利点の一部が提供されますが、モジュール型のコンテナベースのアプリケーションアーキテクチャの利点は十分ではありません。
  • コンテナ用の既存のアプリケーションをリファクタリングします
    リファクタリングは、移行と切り替えのマイグレーションよりもはるかに負荷がかかりますが、コンテナ環境のメリットを最大限に活用できます。
  • 新しいコンテナネイティブアプリケーションを開発します
    リファクタリングと同様に、このアプローチを使用することでコンテナのメリットを最大限に活用できます。
  • マイクロサービスアーキテクチャをより適切にサポートします
    分散アプリケーションやマイクロサービスは、個々のコンテナビルディングブロックを使用して、分離、導入、拡張が容易になります。
  • 継続的な統合と導入のための DevOps サポート( CI / CD )を提供
    コンテナテクノロジは、同じコンテナイメージを使用して構築、テスト、導入を合理化します。
  • 反復的なジョブやタスクを簡単に展開できます
    コンテナは、 ETL 機能やバッチジョブなど、バックグラウンドで実行されることが多い同様のプロセスをサポートするために導入されています。

Docker と Kubernetes はコンテナとどのように関連していますか。

コンテナ環境を使用するユーザには、コンテナの構築と管理に使用される一般的なツールとプラットフォームが 2 つあります。Docker と Kubernetes です。

Docker は、コンテナ内でソフトウェアを作成および構築するために使用される一般的なランタイム環境です。Docker イメージ( copy-on-write スナップショット)を使用して、コンテナ化されたアプリケーションやソフトウェアを開発からテスト、本番環境に導入します。Docker は、 Linux 、 Microsoft Windows 、その他のオンプレミスインフラやクラウドベースインフラなど、一般的なオペレーティング環境のほとんどで、オープンスタンダードに基づいて構築されています。

ただし、コンテナ化されたアプリケーションは複雑になりがちです。本番環境では、数百 ~ 数千の独立したコンテナが本番環境で必要になることがあります。Docker などのコンテナランタイム環境では、他のツールを使用して、運用中のすべてのコンテナをオーケストレーションまたは管理することでメリットが得られます。

この目的で最も広く使用されているツールの 1 つが Kubernetes です。 Kubernetes は、 Docker などの複数のコンテナランタイム環境を認識するコンテナオーケストレーションツールです。

Kubernetesは、複数のコンテナの処理をまとめてオーケストレーションします。コンピューティング、ネットワーク、ストレージのリソース量など、コンテナ化されたアプリケーションの基盤となるインフラリソースの使用などの領域を管理します。Kubernetesを使用すると、本番環境でコンテナベースのワークロードを簡単に自動化および拡張できます。

コンテナと仮想マシン( VM )

コンテナテクノロジと仮想マシン( VM )やサーバ仮想化テクノロジを混同することがあります。基本的な類似点はいくつかありますが、コンテナは VM と大きく異なります。

仮想マシンはハイパーバイザー環境で実行されます。各仮想マシンには、その仮想マシン内に独自のゲストオペレーティングシステムと、関連するバイナリ、ライブラリ、およびアプリケーションファイルが含まれている必要があります。これにより、大量のシステムリソースとオーバーヘッドが消費されます。特に、複数の VM を同じ物理サーバ上で実行し、それぞれに専用のゲスト OS が搭載されている場合は、オーバーヘッドが大きくなります。

一方、各コンテナは同じホスト OS またはシステムカーネルを共有し、サイズは大幅に小さく、多くの場合はメガバイトに過ぎません。これは、コンテナの起動にわずか数秒かかることがあることを意味します(一般的な VM ではギガバイトと分ではありません)。