コンテナとは
コンテナとは、あらゆる環境で実行するために必要なすべての要素を含む、ソフトウェアのパッケージです。パッケージにすることで、コンテナはオペレーティング システムを仮想化し、プライベート データセンターからパブリック クラウド、開発者個人のノートパソコンまで、どこでも実行できます。Gmail、YouTube から検索まで、Google ではあらゆるものがコンテナで実行されています。コンテナ化により、Google の開発チームは開発をスピードアップし、ソフトウェアを効率的にデプロイして、運営規模をこれまでにないほど拡大できました。Google はコンテナ化ワークロードの運用について試行錯誤を重ねてきました。その知識は、Linux カーネルへの cgroups の貢献や、社内ツールから採用した設計を Kubernetes プロジェクトとしてオープンソース化するといった形で、コミュニティと共有されています。
コンテナの定義
コンテナとは、アプリケーション コードに、ソフトウェア サービスの実行に必要な特定バージョンのプログラミング言語ランタイムやライブラリなどの依存関係を加えた軽量のパッケージを指します。
コンテナは、CPU、メモリ、ストレージ、ネットワーク リソースのオペレーティング システム レベルでの共有を容易にし、アプリケーションを実際の実行環境から抽象化して格納するための論理パッケージング メカニズムとして活用できます。
コンテナのメリット
責任の分散
コンテナ化の導入で、責任の所在が明確に分散されます。つまり、開発者はアプリケーション ロジックと依存関係に集中して取り組める一方で、IT 運営チームは特定のソフトウェア バージョンや構成などのアプリケーション細部ではなく、デプロイと管理に注力できます。
ワークロードのポータビリティ
コンテナは、Linux、Windows、Mac オペレーティング システム、仮想マシン、物理サーバー、開発者のマシン、オンプレミスのデータセンター、そしてもちろんパブリック クラウドでも実行が可能で、開発とデプロイが非常に簡単になります。
アプリケーションの分離
コンテナは CPU、メモリ、ストレージ、ネットワークの各リソースをオペレーティング システム レベルで仮想化します。これで、開発者に他のアプリケーションとは論理的に分離された OS のビューが提供されます。
コンテナと VM の違い
すでにご存じかもしれませんが、VM は Linux や Windows などのゲスト オペレーティング システムをホスト オペレーティング システム上で実行し、基盤となるハードウェアへのアクセスを提供します。コンテナは仮想マシン(VM)と比較されることがよくあります。コンテナも仮想マシンと同様にライブラリや他の依存関係とアプリケーションをまとめてパッケージ化し、ソフトウェア サービスの実行用に独立した環境を提供します。ただし類似点はここまでで、コンテナでは、以下の図に示すように、開発者と IT 運用チームがうまく連携できるように、多くのメリットを備えたさらに軽量なユニットが提供されます。
- コンテナは VM よりはるかに軽量です
- VM がハードウェア レベルで仮想化するのに対し、コンテナは OS レベルで仮想化します
- コンテナは OS カーネルを共有し、VM に比べてごくわずかなメモリしか使用しません。
コンテナを使用する目的
アジャイル開発
開発者はコンテナを使用して依存関係と開発環境に関する懸念を避けることで、より迅速に対応できます。
効率的な運用
コンテナは軽量であり、必要とするコンピューティング リソースのみを使用できます。そのため、アプリケーションを効率的に実行できるようになります。
どこでも実行
コンテナは、実質的にどこでも実行できます。ソフトウェアを実行する場所がどこであっても、コンテナを使用できます。
関連プロダクトとサービス
Google Kubernetes Engine(GKE)は、コンテナ化アプリケーションを実行するための、本番環境に対応した最初のマネージド サービスです。Kubernetes を開発した専門知識に支えられており、クラウド ワークロードに対する Kubernetes 戦略の成功に役立ちます。
Anthos によって、オンプレミスと複数のクラウドにまたがったアプリケーションにおける一貫した Kubernetes の体験が実現します。Anthos を使用すると、Kubernetes クラスタをどこでも、効率的かつ安全な方法で確実に実行できます。