コンテナとは

コンテナは、アプリケーションとその依存関係(ライブラリ、バイナリ、追加の設定ファイル)を含むランタイム環境全体をカプセル化した、軽量な単体パッケージです。コンテナによって、アプリケーションの可搬性、拡張性、セキュリティ、および俊敏性が向上します。

コンテナは、ターゲットの環境に関係なくアプリケーションの展開と管理を容易に行うことができるため、開発者と運用担当者の両方に広く利用されています。開発チームと運用チームの連携が改善されることで、DevOpsDevSecOps の手法が促進されます。

コンテナでは、リソースを効率的に利用でき、高い密度とリソース使用率を実現できます。コンテナはほぼすべてのアプリケーションに対応していますが、多くの場合は、マイクロサービスと関連付けて使用されます。つまり、複数のコンテナがアプリケーションの個別のコンポーネントまたはサービスを実行します。アプリケーションを構成するコンテナは、通常、Kubernetes などのコンテナ オーケストレーション プラットフォームを使用して調整、管理されます。

コンテナは、1 つ以上のリポジトリの複数のイメージによるアプリケーションをライブラリやその他の依存関係と一緒にパッケージングして作成されるため、可搬性や互換性の問題を解消できます。

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

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

コンテナと仮想マシンの相乗効果

コンテナと仮想マシンの比較

仮想マシンでは、それぞれの仮想マシンがオペレーティング システムのインスタンス全体またはインスタンスの一部を実行しますが、コンテナでは、複数のコンテナが 1 つのオペレーティング システムのインスタンスを共有します。コンテナにはアプリケーションの実行に必要なものがすべて含まれており、コンテナ化された複数のアプリケーションを 1 つのホスト システム上で個別に実行できます。1 つの仮想マシンのなかで複数のコンテナを実行できるため、この 2 つの技術は併用することができます

コンテナを使用するメリット

アプリケーションの構築にコンテナを使用することで、新しい機能を迅速に提供できるとともに、イノベーションを継続的に生み出す環境を確保できます。次のようなメリットが考えられます。

俊敏性。開発者の俊敏性を高め、生産性の向上とアプリケーション開発のスピードアップを実現します。CI/CD パイプラインが効率化されるため、DevOps チームやマイクロサービスを展開するのに最適です。

拡張性と高可用性。Kubernetes を使用して、コンテナのデプロイをワークロードの要件の変化に応じて自動的にスケールアップまたはスケールダウンできるため、アプリケーションの可用性が向上します。

可搬性。コンテナは、仮想マシンよりも消費するリソースが少なく、軽量です。コンテナ化されたアプリケーションは、インフラストラクチャに依存せず、どこにデプロイされても同じように動作します。

レジリエンス。コンテナ化されたアプリケーションは、OS やほかのコンテナから分離され、抽象化されているため、1 つのコンテナに障害が起きても、ほかの実行中のコンテナは影響を受けません。

コンテナの標準

コンテナの形式やランタイム環境の標準は、オープンな業界標準を作るという明確な目的のために 2015 年に創設されたプロジェクト、Open Container Initiative(OCI)が管理しています。OCI は現在、Runtime Specification(runtime-spec)と Image Specification(image-spec)の 2 つの仕様を提供しています。

コンテナ セキュリティ

コンテナでは、セキュリティ ポリシーの実装と管理の方法を変更する必要があります。セキュリティは、DevSecOps のアプローチを使って、コンテナのライフサイクルに可能な限り組み込む必要があります。セキュリティ チームが開発チームや運用チームと連携し、既存のガバナンスおよびコンプライアンスのポリシーを、新しいツールやアプリケーション ライフサイクルの変化に合わせて適応させる必要があります。

コンテナの自動化

手動の作業では開発チームのスピードが低下します。コンテナの自動化により、開発者はパッケージングではなく、コードに集中できるようになります。コンテナ イメージはレイヤー形式で構築されています。コンテナ ビルドの自動化されたアプローチでは、特定のコンポーネントを変更する場合、そのレイヤー以外更新する必要はありません。たとえば、システム ライブラリを更新する必要がある場合は、そのライブラリを含むレイヤーのみを再構築することになります。ほかのレイヤーは変更されないため、テストと検証の負担が軽減され、更新されたコンテナの本番環境への投入を、より速く、より頻繁に行うことができます。

Docker

2013 年の登場以来、Docker はコンテナの代名詞となり、現在もコンテナ イメージのビルドに使用されています。Docker 環境には、コンテナ ランタイムのほか、コンテナのビルドやイメージを管理する仕組みも含まれています。Docker では OCI 標準のコンテナ イメージがビルドされるため、Docker イメージは OCI に準拠したどのコンテナ ランタイムでも実行できます。

Kubernetes

Kubernetes は、事実上の標準となっている、オープンソースのコンテナ オーケストレーション ツールで、宣言型の構成と自動化を通じて、コンテナのデプロイ、ロードバランシング、リソース割り当て、およびセキュリティの適用を自動化します。コンテナ化されたアプリケーションを望ましい状態で稼働させ、拡張性と耐障害性を実現します。コンテナ オーケストレーションは、コンテナ ライフサイクルの複雑さを管理するのに役立ちますが、これは、多数のコンテナを使用する分散型アプリケーションでは特に重要になります。
Kubernetes は、異なるランタイム間の相互運用がスムーズで、より幅広いコンテナ ランタイムをサポートする CRI(Container Runtime Interface)へと移行しています。2020 年 12 月より、Kubernetes での Docker ランタイムの使用は非推奨となっています。

コンテナのユースケース

開発者向け

  • 異なるプラットフォームや構成でのアプリケーションの可搬性を高めます。特定バージョンの言語コンパイラーまたはインタープリターで開発されたコードが、その後のバージョンでも修正なしで実行できるようになります。
  • 開発、テスト、デプロイを同じインフラストラクチャ上で行う必要がなくなります。開発者がラップトップでコードを作成した場合でも、アプリケーションはオンプレミスのサーバやクラウドベースの仮想マシンなど、あらゆるインフラストラクチャで思いどおりに動作します。
  • CI/CD などのアジャイル開発プロセスを促進し、コードの受け入れと展開をスピードアップします。

IT 運用担当者向け

  • ほかのアプリケーションから分離して軽量化することで、アプリケーションのセキュリティを高めます。
  • 異なる OS バージョン、ネットワーク トポロジー、ストレージ構成、クラウドプラットフォーム間でコンテナ化されたアプリケーションをシームレスに移行できます。
  • 1 つの OS インスタンス上で複数のアプリケーション コンテナを実行可能にすることで、IT 効率を向上させます。仮想マシンのサイズが通常 10 ギガバイト以上であるのに対し、コンテナのサイズは数十メガバイトであるため、1 つのサーバ インスタンス上で相当数のコンテナを実行できます。

立ち上げに数分かかる仮想マシンと比べて、コンテナ インスタンスはミリ秒単位で追加起動ができるため、極めて優れたオンデマンドの拡張性が実現します。

関連するソリューションおよび製品

Kubernetes によるアプリケーションのモダナイゼーション

開発者にとって使いやすい Kubernetes 環境をデータセンターやクラウドで提供

ソース コードから Kubernetes 向けにコンテナを構築

VMware Tanzu Build Service は、コンテナの作成、管理、ガバナンスを企業規模で自動化します。

マルチクラウドの Kubernetes の管理

VMware Tanzu Mission Control は、クラウドを仮想化するマルチクラウドの Kubernetes 管理プラットフォームです。Kubernetes ベースの一貫性のあるプラットフォームを提供し、アプリケーションの管理、運用、配布をあらゆるクラウド上で大規模に実行できます。