コンテナとは?クラウドネイティブに欠かせない技術の仕組みやメリット、コンテナ運用のポイントを解説

昨今の目まぐるしく変わるビジネスや市場の環境、また、「DX(デジタルトランスフォーメーション)」に対応すべく、迅速かつ柔軟性をもったアプリケーション開発の手法である「クラウドネイティブ」が注目されています。「コンテナ」は、クラウドネイティブなアプリケーション開発と運用における中心的な役割を果たしています。本記事ではコンテナの基本的な仕組みやメリット、クラウドネイティブアプリケーションにおける役割、運用のポイントについて解説します。

コンテナとは

コンテナの基本的な仕組みについて

物理輸送の世界では、船舶や列車などの異なる輸送手段へ載せ替える際、「コンテナ」を使用することにより効率的に行えるようになりました。同様に、ソフトウェア開発における「コンテナ」技術が、開発環境から本番環境への移行などの載せ替え作業を、効率的に行えるようにしました。

コンテナは、アプリケーションのコードと、関連する構成ファイルおよびライブラリなど、アプリの実行に必要な依存関係をコンテナと呼ばれるソフトウェアのパッケージとしてまとめます。この技術により、開発者は、さまざまな環境に効率的にデプロイできるようになりました。

コンテナ技術は、コンテナを実行する「コンテナ管理ソフトウェア」、コンテナの元データとなる「コンテナイメージ」、コンテナイメージから作成され、実行されるアプリケーションである「コンテナ」の3要素から構成されます。

コンテナを動作させるのに必要な機能を提供するのがコンテナ管理ソフトウェアで、その代表的なものが「Docker」です。コンテナイメージは、コンテナに格納されるアプリケーションやアプリケーションの実行に必要な設定ファイル、実行環境、ミドルウェア、ライブラリなどをひとまとめにしたイメージファイルです。コンテナは、コンテナイメージから作成される、独立したアプリケーションの実行環境です。

コンテナランタイムについて

このコンテナ技術を用いた仮想環境を作成・配布・実行するためのプラットフォームとして、もっとも多く使用されているのが、Dockerです。2013年3月にオープンソースのプロジェクトとして公開された、コンテナのアプリケーション実行環境を管理するオープンソースソフトウェア(OSS)、それがDockerです。

Docker daemonはcontainerdという高レベルのコンテナランタイムを起動します。containerdはDocker imageを管理するほか、Docker containerを起動・実行するrunCという低レベルコンテナランタイムを実行します。

Dockerについてはこちらの記事もご参照ください。

コンテナと従来の仮想化(ハイパーバイザー型)の違い

コンテナは仮想化技術のひとつです。以下に、従来の仮想化(ハイパーバイザー型)との違いを解説します。

ハイパーバイザー型とコンテナ型の構成は以下の通りです。

構成図が示す通り、ハイパーバイザー型にはゲストOSが必要ですが、コンテナ型には必要ありません。ハイパーバイザー型の仮想化技術は、ゲストOSをインストールし、そのOS上にライブラリやミドルウェア、アプリケーションをインストールして環境を構築する必要があります。この構築手段は、構成要素を一つひとつ仮想環境上に構築していく必要があるため、大変な時間と労力を要します。この問題を解決したのが、コンテナ型の仮想化技術です。この技術によって、ゲストOSのインストールが不要となり、コンテナとして、開発、リリース、およびデプロイを行うために必要な構成要素が、すべてパッケージ化され、独立したアプリケーション環境(本体や設定ファイルなど)を構築することができるようになりました。コンテナの登場により、アプリケーション環境の構築に要する時間と労力が大幅に削減されるとともに、可搬性が飛躍的に向上しました。

コンテナのメリット

コンテナのメリットとしては、以下の点を挙げることができます。

・ポータビリティと一貫性

コンテナは、必要なコードセットをOSレベルで独立にまとめることができます。アプリケーションの環境を変えないために、アプリケーションに依存するミドルウェアやライブラリをコンテナとしてパッケージ化しています。そのため、一貫性が担保され、開発環境で開発したアプリケーションを本番環境に移行する際、このコンテナごと移すことが可能となり、高い可搬性を実現しています。

・リソースの効率的な利用

コンテナはひとつのOSに対して多数のコンテナを管理するため、多数のOSを管理するハイパーバイザー型の仮想技術と比較して軽量です。そのため、必要とするリソースが少なく済み効率的です。コンテナの起動は、秒単位で、非常に高速です。軽量で高速なため、少ないリソースで高い性能を発揮させることができます。

・スケーラビリティと柔軟性

コンテナは、仮想サーバーや物理サーバー上に複数構築することができます。コンテナを追加することで拡張できます。また、アプリケーション全体ではなく、アプリケーションの一部だけをアップデートしたり修復したりすることも可能です。軽量で可搬性が高いため、開発、デプロイ、メンテナンスを効率的に行うことができます。

・環境の分離とセキュリティ

コンテナは個々に分離されているため、アプリケーションはそれぞれの独立した環境内で実行されます。1 つのコンテナのセキュリティが侵害されても、同じホスト上にあるほかのコンテナのセキュリティは保たれます。

また、コンテナは個々に分離されているだけでなく、ホストオペレーティングシステムからも分離されているため、コンピューティングリソースとのやり取りも最小限です。後述する「コンテナセキュリティの対策」を施すことにより、システムとしてのセキュリティを確保することができます。

クラウドネイティブアプリケーションにおけるコンテナの役割

クラウドネイティブとは、アプリケーションをクラウド環境で最大限に活用する設計原則と手法のことです。Cloud Native Computing Foundation(CNCF)は、次のように定義しています。

クラウド ネイティブ テクノロジーにより、組織はパブリック クラウド、プライベート クラウド、ハイブリッド クラウドなどの最新の動的な環境でスケーラブルなアプリケーションを構築して実行できるようになります。コンテナー、サービス メッシュ、マイクロサービス、不変のインフラストラクチャ、宣言型 API は、このアプローチの例です。

これらの技術により、回復力があり、管理しやすく、監視可能な疎結合システムが可能になります。堅牢な自動化と組み合わせることで、エンジニアは最小限の労力で、影響の大きい変更を頻繁かつ予測どおりに行うことができます。

中でもコンテナは、クラウドネイティブアプリケーションの基盤として重要な役割を果たしています。具体的には、次のような事がらを実現できます。

アプリケーションのパッケージ化と迅速なデプロイメント

コンテナ技術が普及する以前は、OSごとにアプリケーションを動作させるために必要な環境を構築する必要があり、大変な手間がかかっていました。それをコンテナが解消しました。コンテナを起動させることにより、どのような環境でもアプリケーションを同じように動作させることができます。

スケーラビリティと柔軟性

ハイパーバイザー型の仮想化技術では、拡張する際には、仮想サーバー上にゲストOSをインストールする必要があります。OS上に、ライブラリやミドルウェア、アプリケーション環境を構築したり、アプリケーションを変更したりする際に、ライブラリやミドルウェアが不安定で、不整合を起こすなどのリスクにより、作業に大変手間取ることがあります。コンテナは、この不整合が起きないように、整合性が保たれた状態で凍結し安定させる役割を果たすことにより、スケーラビリティと柔軟性のある運用を可能にしています。

マイクロサービスアーキテクチャのサポート

マイクロサービス(マイクロサービスアーキテクチャ)とは、小さなサービスを組み合わせて統合することで大規模アプリケーションを構成するという、システム開発における手法、考え方です。各サービスが独立して動作するため、テクノロジーの多様性への対応や拡張性も高く、システム全体に大きな影響を与えることなく柔軟にアプリケーションの開発が可能になります。コンテナは、マイクロサービスとの親和性が非常に高く、そのアーキテクチャをサポートします。

詳しくは、https://jp.tdsynnex.com/blog/cloud/what-is-microservices/ をご覧ください。

継続的デリバリー(CI/CD)プロセスとの親和性の高さ

CI/CDとは、「Continuous Integration/Continuous Delivery」の略であり、継続的インティグレーション/継続的デリバリーと呼ばれています。CI/CD は、アプリケーション開発の各ステージに自動化を導入し、顧客にアプリケーションを頻繁に提供できるようにする手法です。CI/CD の具体的なメリットとして、CI/CD によって、統合およびテストのフェーズからデリバリー、デプロイメントに至る、アプリケーションのライフサイクル全体を通じて、継続的な自動化と継続的な監視が導入されます。コンテナは、これら自動化や監視をサポートします。

コンテナ運用のポイント

スケーラブルなクラウドインフラストラクチャとの統合

各パブリッククラウドが、コンテナ マネージドサービスを提供しています。それらを活用することにより、効率的にコンテナを運用することができます。

コンテナオーケストレーションツールの選択

コンテナはオーケストレーションツールと組み合わせることで、スケーラビリティ、柔軟性、管理の効率化などを実現します。
Kubernetesは、コンテナ化したアプリケーションを管理し、デプロイやスケーリングを自動化する、オープンソースのコンテナ・オーケストレーション・プラットフォームです。

Kubernetes は、Google のエンジニアによって開発されたソフトウェアです。Googleで実際に運用されていた技術を基にオープンソース化したもので、2017年には、Docker社がKubernetesのサポートを発表し、kubernetesがコンテナ・オーケストレーション・プラットフォームの事実上の標準となっています。

Red Hat OpenShift は、エンタープライズ対応の Kubernetes コンテナ・プラットフォームです。信頼できるサービスがまとめられており、アプリケーションの開発、モダナイズ、デプロイ、実行、管理の手間を軽減します。パブリッククラウド、オンプレミス、ハイブリッドクラウド、またはエッジといったさまざまなアーキテクチャで一貫したエクスペリエンスを提供します。セルフマネージド型またはフルマネージド型のソリューションを選択できます。

Kubernetesとは?基本概念をわかりやすく解説!使い方やメリットもご紹介 – TD SYNNEX Blog

ロギングとモニタリングの実践

コンテナの運用には、ロギングの採取とそのモニタリングが不可欠です。システムの規模が大きくなると、その実践が煩雑になりますが、オーケストレーションツールと組み合わせることで、効率的に管理することができます。クラウドネイティブにおいて、今後ますます可観測性の高い運用管理が求められます。

コンテナのセキュリティ対策

コンテナがアプリケーションのデプロイ環境として一般的になるにつれて、コンテナのセキュリティニーズも拡大しています。コンテナ自体に、脅威やアクセス制御の不備や問題につながる危険のあるコードがあると、大きなセキュリティリスクになります。

コンテナセキュリティの影響は、コンテナの実行環境だけでなく、開発、ビルド、オーケストレーション環境や関連するセキュリティポリシーにも及びます。コンテナのセキュリティを確保するには、悪質なコードの侵入を阻止するだけでなく、より幅広い観点から攻撃に対処する必要があります。

TD SYNNEXのおすすめサービス

TD SYNNEXではMicrosoft Azure、Google Cloud、IBM Cloudを提供しており、各パブリッククラウドサービスでコンテナやKubernetesのマネージドサービス(Google Kubernetes Engine(GKE)、Azure Kubernetes Service (AKS)、IBM Cloud Kubernetes Service、Red Hat OpenShiftなど)を利用可能です。

Google Kubernetes Engine(GKE)

GKE は、Google のインフラストラクチャを使用してコンテナ化されたアプリケーションを大規模にデプロイして運用するために使用できる、Kubernetesのマネージドサービスです。

Azure Kubernetes Service (AKS)

AKSは、Azure 上で Kubernetes クラスタの構築・管理を行うサービスです。定義した要件に基づいてコンテナをクラスタに配置し、Kubernetes の機能によりオーケストレーションをすることができます。

IBM Cloud Kubernetes Service

可用性の高いコンテナ化アプリを Kubernetes クラスタにデプロイし、IBM Cloud Kubernetes Service の強力なツールを使用して、ゾーンやリージョンをまたいでワークロードを自動化、分離、保護、管理、監視することができます。

Red Hat OpenShift

Red Hat OpenShift が提供するフル装備のソリューションには、堅牢なセキュリティを備える安定した Kubernetes エンジンと、アプリケーション・プラットフォームの運用に必要な多くの統合機能が含まれています。自分でサーバーにインストールして使うセルフマネージド型のサービスに加えて、Azureなどのパブリッククラウドにおいてマネージド型サービスも提供されています。

Kubernetesのマネージドサービスを、それぞれのサービス事業者が、自社プロダクトやプラットフォーム、サービスとの親和性を高めたサービスとして提供しています。

まとめ

コンテナ型の仮想化技術は、従来のハイパーバイザー型と比べて、ポータビリティと一貫性、スケーラビリティと柔軟性の面で、飛躍的に作業効率を向上させました。

今や、コンテナは、クラウドネイティブなアプリケーション開発と運用における中心的な役割を果たしています。

さらに、Kubernetesに代表されるコンテナオーケストレーションツールにより、大規模なシステムにおいても、可観測性の高いシステム運用が可能になりました。

TD SYNNEXでは、コンテナやKubernetesのマネージドサービスを利用できる主要なサービスを取り扱っており、クラウドネイティブなアプリケーション開発と運用をサポートしています。

[筆者プロフィール]

峯 英一郎

ITコンサルタント。
大手SIer(約18年勤務)を経て、ソフトウェア会社の経営に従事。お客さまの価値最大化につながる新しい受託開発のあるべき姿を追求し続けている。

製品・サービスについてのお問合せ

情報収集中の方へ

導入事例やソリューションをまとめた資料をご提供しております。

資料ダウンロード
導入をご検討中の方へ

折り返し詳細のご案内を差し上げます。お問い合わせお待ちしております。

お問い合わせ