技術解説
仮想化の新潮流「コンテナ」とは
クラウドを支える基盤技術の1つ「仮想化技術」は日々進歩し、新しい技術が導入されています。なかでも近年、注目を集めているのが「コンテナ」です。ITシステムの効率化を目指して導入する企業も増えてきましたが、実際にコンテナはどのような技術でどのようにシステムを効率化できるのでしょうか。
目次
本記事をご覧いただいた方向けに、おすすめの記事をまとめました。こちらもあわせてご確認ください。
コンテナが登場した背景
従来では1台の物理マシン上には1つのOSが起動し、そのOS上でさまざまなアプリケーションが利用されていました。これに対して、仮想化環境では、物理マシン上で「ハイパーバイザー」や「ホストOS」、「仮想化ソフト」を起動させることで、1つの物理マシン上で複数の「ゲストOS」を起動することができます。
仮想化は、ITシステムの開発面や運用面の変化へ対応する解決手段として広く普及しました。複数のOS環境とアプリケーションを1つのファイルとして取り扱え、「仮想マシン(VM)」を簡単に移動できる可搬性の高い基盤を提供してくれていました。
しかし、仮想化ソフトを使用した仮想化環境にもデメリットがあります。複数のOSを集約した場合、性能劣化や仮想化ソフトウェア介在による障害発生時の問題切り分けの複雑化などが指摘されていました。
そこで注目されているのが「コンテナ」です。
コンテナとは?
コンテナとは、ホストOS上にアプリケーションの起動に必要なアプリケーション本体・必要なライブラリ・設定ファイルなどをひとまとめにした「コンテナ」を作成し、「コンテナエンジン」上で動作させる技術のことです。
一見、仮想化技術に似ていますが、大きく異なる点があります。
ハイパーバイザーやホストOSは、従来の仮想化技術では、仮想マシン上でゲストOSを起動する必要がありました。これに対して、コンテナではゲストOSを起動することなく、アプリケーション実行環境を構築することが可能です。
つまり、仮想マシンに比べて少ないリソースでのアプリケーション実行が可能となるため、メモリやCPUリソースを余分に使うことがありません。
コンテナの特長
ここで、コンテナのメリットとデメリットを整理してみましょう。
コンテナのメリット
とにかく処理が軽量
- 必要最小限のCPUやメモリーしか使用せず、負荷が小さく高速な動作を実現
- アプリの起動が速くリソース効率が良いので、コスト低減&パフォーマンス向上が可能
環境構築に要する時間の大幅な削減
- コンテナ環境の構築は、比較的容易でコピーも簡単なので、作業時間の大幅な短縮が実現できる
リリースサイクルの高速化に関わる「DevOps」と相性が良い
開発チームと運用チームが協力しあって開発・運用を進めていく手法「DevOps」に適しており、以下のようなことが実現可能となる
- 環境構築作業の工数削減
- 作業負荷の軽減
- 本番環境と開発環境を同一の状態で構築できることによる本番運用における環境要因でのトラブル減少
- 障害時における代替環境への切り替え時間の短縮
コンテナのデメリット
- 複数のホストでのコンテナ運用が煩雑になる
- カーネルを他のコンテナと共有するため、個別に変更できない
- コンテナ環境でベースとなるOSと異なるOSのシステムを動かすことはできない
- 新しい技術であり学習コストが比較的高い
コンテナブームを牽引する「Docker」とは
「Docker(ドッカー)」とは、コンテナのデファクトスタンダードとして広く使われている技術の1つで、非常に軽量なコンテナのアプリケーション実行環境のことです。Dockerの特長は、下記になります。
- OSの内部に独立したアプリケーションの実行環境=コンテナを生成することができる
- リソース消費量が非常に少なく、1台の物理サーバーに多くのコンテナを稼働させられる
Dokerのようなコンテナの動作環境を提供するサービスを用いることで、利用者は仮想サーバーを意識せずにコンテナを動作させることができます。これらがITインフラとして普及していくことで、実際のサーバーやOSを意識しないアプリケーション開発が増えていくと予想されています。
複数のホストで構成されるコンテナ管理を容易にする「Kubernetes」
Dockerの実行環境は、通常1台のホストのみですが、実際の運用では異なるホスト間でコンテナをやり取りする必要も生じます。それを実現するのが「Kubernetes」です。Kubernetesを利用することで、複数のホストから構成される実行環境を同一のホスト環境として利用できるため、コンテナの数を増やすなどのスケールアウトにも容易に対応することが可能です。
コンテナと仮想マシンの使い分けがポイント
従来の仮想マシンでは、実行環境が変われば、ハードウェアやOSの設定確認が必須になるため、コンテナよりも手間がかかります。
しかし、仮想マシンは1つの独立したサーバーとして機能するため、仮想マシンごとに異なるOSを動かせるというメリットもあります。これに対して、コンテナは1つのOSから作られているため、同じホスト上では異なるOSを動かすことはできません。
システム資源の負担が大きく可搬性は低いが、自由度が高い仮想マシン。システム資源の負担は小さく可搬性は高いが、OSが限られるコンテナ。それぞれのメリットとデメリットを把握したうえで、用途に応じて使い分けることが重要です。