コンテナとは
コンテナは、アプリケーションとその依存関係(ライブラリ、バイナリ、追加の設定ファイル)を含むランタイム環境全体をカプセル化した、軽量な単体パッケージです。コンテナによって、アプリケーションの可搬性、拡張性、セキュリティ、および俊敏性が向上します。
コンテナは、ターゲットの環境に関係なくアプリケーションの展開と管理を容易に行うことができるため、開発者と運用担当者の両方に広く利用されています。開発チームと運用チームの連携が改善されることで、DevOps と DevSecOps の手法が促進されます。
コンテナでは、リソースを効率的に利用でき、高い密度とリソース使用率を実現できます。コンテナはほぼすべてのアプリケーションに対応していますが、多くの場合は、マイクロサービスと関連付けて使用されます。つまり、複数のコンテナがアプリケーションの個別のコンポーネントまたはサービスを実行します。アプリケーションを構成するコンテナは、通常、Kubernetes などのコンテナ オーケストレーション プラットフォームを使用して調整、管理されます。
コンテナは、1 つ以上のリポジトリの複数のイメージによるアプリケーションをライブラリやその他の依存関係と一緒にパッケージングして作成されるため、可搬性や互換性の問題を解消できます。

Kubernetes のための新しいコンテナ構築方法

コンテナと仮想マシンの相乗効果
コンテナと仮想マシンの比較
コンテナを使用するメリット
アプリケーションの構築にコンテナを使用することで、新しい機能を迅速に提供できるとともに、イノベーションを継続的に生み出す環境を確保できます。次のようなメリットが考えられます。
俊敏性。開発者の俊敏性を高め、生産性の向上とアプリケーション開発のスピードアップを実現します。CI/CD パイプラインが効率化されるため、DevOps チームやマイクロサービスを展開するのに最適です。
拡張性と高可用性。Kubernetes を使用して、コンテナのデプロイをワークロードの要件の変化に応じて自動的にスケールアップまたはスケールダウンできるため、アプリケーションの可用性が向上します。
可搬性。コンテナは、仮想マシンよりも消費するリソースが少なく、軽量です。コンテナ化されたアプリケーションは、インフラストラクチャに依存せず、どこにデプロイされても同じように動作します。
レジリエンス。コンテナ化されたアプリケーションは、OS やほかのコンテナから分離され、抽象化されているため、1 つのコンテナに障害が起きても、ほかの実行中のコンテナは影響を受けません。
コンテナの標準
コンテナ セキュリティ
コンテナでは、セキュリティ ポリシーの実装と管理の方法を変更する必要があります。セキュリティは、DevSecOps のアプローチを使って、コンテナのライフサイクルに可能な限り組み込む必要があります。セキュリティ チームが開発チームや運用チームと連携し、既存のガバナンスおよびコンプライアンスのポリシーを、新しいツールやアプリケーション ライフサイクルの変化に合わせて適応させる必要があります。
コンテナの自動化
手動の作業では開発チームのスピードが低下します。コンテナの自動化により、開発者はパッケージングではなく、コードに集中できるようになります。コンテナ イメージはレイヤー形式で構築されています。コンテナ ビルドの自動化されたアプローチでは、特定のコンポーネントを変更する場合、そのレイヤー以外更新する必要はありません。たとえば、システム ライブラリを更新する必要がある場合は、そのライブラリを含むレイヤーのみを再構築することになります。ほかのレイヤーは変更されないため、テストと検証の負担が軽減され、更新されたコンテナの本番環境への投入を、より速く、より頻繁に行うことができます。
Docker
2013 年の登場以来、Docker はコンテナの代名詞となり、現在もコンテナ イメージのビルドに使用されています。Docker 環境には、コンテナ ランタイムのほか、コンテナのビルドやイメージを管理する仕組みも含まれています。Docker では OCI 標準のコンテナ イメージがビルドされるため、Docker イメージは OCI に準拠したどのコンテナ ランタイムでも実行できます。
Kubernetes
コンテナのユースケース
開発者向け
- 異なるプラットフォームや構成でのアプリケーションの可搬性を高めます。特定バージョンの言語コンパイラーまたはインタープリターで開発されたコードが、その後のバージョンでも修正なしで実行できるようになります。
- 開発、テスト、デプロイを同じインフラストラクチャ上で行う必要がなくなります。開発者がラップトップでコードを作成した場合でも、アプリケーションはオンプレミスのサーバやクラウドベースの仮想マシンなど、あらゆるインフラストラクチャで思いどおりに動作します。
- CI/CD などのアジャイル開発プロセスを促進し、コードの受け入れと展開をスピードアップします。
IT 運用担当者向け
- ほかのアプリケーションから分離して軽量化することで、アプリケーションのセキュリティを高めます。
- 異なる OS バージョン、ネットワーク トポロジー、ストレージ構成、クラウドプラットフォーム間でコンテナ化されたアプリケーションをシームレスに移行できます。
- 1 つの OS インスタンス上で複数のアプリケーション コンテナを実行可能にすることで、IT 効率を向上させます。仮想マシンのサイズが通常 10 ギガバイト以上であるのに対し、コンテナのサイズは数十メガバイトであるため、1 つのサーバ インスタンス上で相当数のコンテナを実行できます。
立ち上げに数分かかる仮想マシンと比べて、コンテナ インスタンスはミリ秒単位で追加起動ができるため、極めて優れたオンデマンドの拡張性が実現します。
関連するソリューションおよび製品
Kubernetes によるアプリケーションのモダナイゼーション
開発者にとって使いやすい Kubernetes 環境をデータセンターやクラウドで提供
ソース コードから Kubernetes 向けにコンテナを構築
VMware Tanzu Build Service は、コンテナの作成、管理、ガバナンスを企業規模で自動化します。
マルチクラウドの Kubernetes の管理
VMware Tanzu Mission Control は、クラウドを仮想化するマルチクラウドの Kubernetes 管理プラットフォームです。Kubernetes ベースの一貫性のあるプラットフォームを提供し、アプリケーションの管理、運用、配布をあらゆるクラウド上で大規模に実行できます。