コンテナとは、あらゆる環境で実行するために必要なすべての要素を含む、ソフトウェアのパッケージです。パッケージにすることで、コンテナはオペレーティング システムを仮想化し、プライベート データセンターからパブリック クラウド、開発者個人のノートパソコンまで、どこでも実行できます。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. こうしてアプリケーションを切り離すことで、移行先の環境がプライベート データセンター、パブリック クラウド、開発者個人のパソコンのどれであっても同じ方法で、コンテナベースのアプリケーションを簡単にデプロイできるようになります。
アジャイル開発
デベロッパーはコンテナを使用して依存関係と開発環境に関する懸念を避けることで、より迅速に対応できます。
効率的な運用
コンテナは軽量であり、必要とするコンピューティング リソースのみを使用できます。そのため、アプリケーションを効率的に実行できるようになります。
場所を選ばず実行
コンテナは、実質的にどこでも実行できます。ソフトウェアを実行する場所がどこであっても、コンテナを使用できます。