基礎から学ぶ

コンテナのメリットと課題とは?〜仮想マシンとの比較と、Kubernetesが注目される理由(1/3)

2022/03/13

今、急速に利用が進んでいる仮想化技術としてコンテナが注目を集めています。開発者に様々なメリットをもたらす一方、運用管理の観点からは様々な課題も存在しています。このページではコンテナ初心者に向けて、従来の仮想マシンと比較しながら、コンテナの仕組みやメリットについて解説します。またコンテナ特有の課題や、それらを解決するツールとして注目を集めるKubernetesとは何か、そして残された課題に対してVMwareがどのような取り組みを行っているのかについてもご紹介します。

コンテナの仕組みとメリット

コンテナとは、アプリケーションの実行環境をパッケージ化し、ホストOSからプロセスやネットワークなどのリソースを隔離した、一種の仮想環境です。アプリケーションの側からは、それぞれのコンテナは別のコンピューター上で稼働しているように見えます。簡単な例を挙げると、コンテナ技術を使うことで、同じホストOSの上で、バージョンの異なるPHPを同時に動かすこともできます。コンテナ技術の中核となるのが、ホストOS上で稼働するコンテナランタイムと呼ばれるソフトウェアです。NamespaceなどのOSの機能を使い、アプリケーションやリソースを分離し、コンテナを動かす役割を担っています。コンテナランタイムの上では、複数のコンテナを稼働させることができます。

コンテナの基本的な仕組み

コンテナ技術が注目を集めている背景には3つのメリットがあります。それぞれの特徴を、一般的な仮想マシン(ハイパーバイザー型仮想化)と比較しながらご説明します。

  1. 高速: アプリケーションを簡単、迅速に起動できること

    仮想マシンは起動に数分を要するのに対し、コンテナであれば数百msecでの起動が可能と言われています。また、コマンドライン一つで、迅速にコンテナ環境の作成や破棄を行えるのも特徴です。

  2. 軽量: リソースを節約し、効率的に利用できること

    ハイパーバイザーを使わず、ホストOSのカーネルを共有することで、CPU、、メモリといったリソースを節約することができます。

    可搬性: アプリケーションをパッケージ化してどこでも起動可能

    オンプレミス環境のベアメタルサーバーや仮想マシン、様々なパブリッククラウドなど、場所を選ばずアプリケーションを稼働させることができます。

これらの違いはどこから生じるのでしょうか。仮想マシンとコンテナの最大の違いは、分離するレイヤーにあります。

もう少し詳しく見ていきましょう。仮想マシンでは、ハイパーバイザーがハードウェアのリソースを分割して、OSレベルで仮想環境を分離しています。そのため、Linux、Windowsといった様々なOSを混在させることが可能です。さらにネットワークの構成も物理マシンと同様に扱えるので、今まで通りIP管理もできます。一方、コンテナでは、カーネルを共有し、アプリケーションレベルでのみ分離を行っています。カーネルを共有することで、オーバーヘッドが減り、高速起動やリソースの有効活用が可能になります。一方、ネットワークは、物理・仮想マシンと大きく異なり、IPアドレスがコンテナごとに自動設定されたり、外部との通信時にはNAT(Network Address Translation)を介さねばならないといった特徴があります。

これらの特徴に加えて、コンテナが開発者に支持されている理由には、豊富なAPIにあります。開発者はAPIを活用することで、コードによるインフラ管理の自動化、すなわちInfrastracture as a code(IaC)を実現することができます。物理インフラを意識せずに、軽量なコンテナを迅速に作成・廃棄・運搬することができる特徴が、開発者に大きなメリットをもたらしています。

仮想マシンとコンテナの違い

おすすめ資料ダウンロード

この記事を読んだ人がよく読む記事

最新の「基礎から学ぶ」

人気の記事

TOP