コンテナとは、あらゆる環境で実行するために必要なすべての要素を含む、ソフトウェアのパッケージです。パッケージにすることで、コンテナはオペレーティング システムを仮想化し、プライベート データセンターからパブリック クラウド、開発者個人のノートパソコンまで、どこでも実行できます。Gmail、YouTube から検索まで、Google ではあらゆるものがコンテナで実行されています。 コンテナ化により、開発チームは開発をスピードアップし、ソフトウェアを効率的にデプロイして、運営規模をこれまでにないほど拡大できます。Google はコンテナ化ワークロードの運用について試行錯誤を重ねてきました。その知識は、Linux カーネルへの cgroups の貢献や、社内ツールから採用した設計を Kubernetes プロジェクトとしてオープンソース化するといった形で、コミュニティと共有されています。
コンテナとは、アプリケーション コードに、ソフトウェア サービスの実行に必要な特定バージョンのプログラミング言語ランタイムやライブラリなどの依存関係を加えた軽量のパッケージを指します。
コンテナは CPU、メモリ、ストレージ、ネットワークの各リソースのオペレーティング システム レベルでの共有を容易にし、アプリケーションを実際の実行環境から抽象化して格納するための論理パッケージング メカニズムを提供します。
責任の分散
コンテナ化の導入により、責任の所在が明確に分散されます。つまり、開発者はアプリケーション ロジックと依存関係に集中して取り組める一方で、IT 運用チームは特定のソフトウェア バージョンや構成といったアプリケーションの細部ではなく、デプロイと管理に注力できます。
ワークロードのポータビリティ
コンテナは、Linux、Windows、Mac の各オペレーティング システム、仮想マシン、物理サーバー、開発者のマシン、オンプレミスのデータセンター、そしてもちろんパブリック クラウドでも仮想的に実行できるため、開発とデプロイが非常に簡単になります。
アプリケーションの分離
コンテナは CPU、メモリ、ストレージ、ネットワークの各リソースをオペレーティング システム レベルで仮想化します。これにより、開発者に他のアプリケーションとは論理的に分離された OS のビューが提供されます。
バッチ処理
コンテナはバッチ処理ワークロードに適しており、タスクを並行実行し、必要に応じてリソースをスケールできます。
ハイブリッド クラウドのデプロイ
コンテナを使用すると、ハイブリッド クラウド環境全体にアプリケーションをデプロイできるため、柔軟性とポータビリティが向上します。
すでにご存じかもしれませんが、VM は Linux や Windows などのゲスト オペレーティング システムをホスト オペレーティング システム上で実行し、基盤となるハードウェアへのアクセスを提供します。コンテナは仮想マシン(VM)と比較されることがよくあります。コンテナも仮想マシンと同様にライブラリや他の依存関係とアプリケーションをまとめてパッケージ化し、ソフトウェア サービスの実行用に独立した環境を提供します。ただし類似点はここまでで、コンテナは、以下に示すように、開発者と IT 運用チームがうまく連携できるように、多くのメリットを備えたさらに軽量なユニットが提供します。
Containers offer a logical packaging mechanism in which applications can be abstracted from the environment in which they actually run. こうしてアプリケーションを切り離すことで、移行先の環境がプライベート データセンター、パブリック クラウド、開発者個人のパソコンのどれであっても同じ方法で、コンテナベースのアプリケーションを簡単にデプロイできるようになります。
アジャイル開発
デベロッパーはコンテナを使用して依存関係と開発環境に関する懸念を避けることで、より迅速に対応できます。
効率的な運用
コンテナは軽量であり、必要とするコンピューティング リソースのみを使用できます。そのため、アプリケーションを効率的に実行できるようになります。
場所を選ばず実行
コンテナは、実質的にどこでも実行できます。ソフトウェアを実行する場所がどこであっても、コンテナを使用できます。
マイクロサービスの実現
コンテナはマイクロサービス アーキテクチャに適しており、個々のサービスに分離性、ポータビリティ、スケーラビリティを提供します。各マイクロサービスは独自のコンテナにパッケージ化して、個別にデプロイできます。
アプリケーションのモダナイゼーション
コンテナは、既存のアプリケーションを移動可能かつスケーラブルな形式でカプセル化することで、そのモダナイズを支援します。これにより、組織はレガシー アプリケーションをクラウドに移行したり、よりアジャイルな開発手法を取り入れたりすることができるようになります。
CI / CD パイプライン
コンテナを使用して、一貫性と再現性のある CI / CD パイプラインを作成し、アプリケーションのビルド、テスト、デプロイを信頼性の高い方法で行うことができます。