1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート1)
  4. 仮想マシンとコンテナについて

中級

LinuC Level1 v10.0 対策コース(パート1)

LinuC Level1 v10.0 対策コース(パート1)5/39

仮想マシンとコンテナについて

こちらでは、Linuxに組み込まれている仮想化基盤KVMとコンテナについて解説します。

1. 仮想化技術とは?

仮想化技術とは物理的なマシン・ネットワーク・ストレージなど、ハードウェアの機能をソフトウェアで実現する技術のことです。

2. 仮想マシンとは?

代表的な仮想化技術の中に仮想マシンがあります。一台のハードウェアの中に、仮想的なもう一台のマシンを用意して動かすことができる技術のことです。その仮想的なマシンの中ではOSやアプリケーションも動かすことが可能となっています。

3. Linuxにおける仮想化技術

KVMとは?

KVM は「Kernel-based Virtual Machine」の略で、「カーネルベースの仮想マシン」という意味です。Linuxに標準で搭載されている、オープンソースの仮想化技術ということになります。基本的にLinux上で動作するので、Windowsなどでは使用ができません。

KVMを使用するとLinuxカーネルをハイパーバイザーとして動作させ、その上で仮想環境を稼働させることができます。稼働した仮想環境の中ではホストマシンのOSとは違うOSを動かすことが可能となります。

ホストOSとゲストOS

ハイパーバイザーを稼働させている土台のOSを「ホストOS」と呼び、仮想環境内で動くOSは「ゲストOS」と呼ばれ区別されています。ゲストOSから見ればハイパーバイザがハードウェアに見えているということになります。

仮想マシンはなぜ必要になったのか?

そもそもなぜ仮想マシンを使うのでしょうか、というお話になります。

1. CPUやメモリ等のリソースを有効活用できない

ハードウェアの性能向上によりCPUやメモリ・ストレージ等のリソースを1つのOSで使い切ることができなくなってきました。サーバーなどを管理する場合、無駄になってしまったリソースはトータルの運用コストをあげてしまいます。

2. 物理的なハードウェアは可搬性が低い

当たり前のことですが、物理的なマシンは物理的なストレージを使っています。バックアップをとったりデータを移動させるのにとても手間がかかります。

仮想マシンのメリット・デメリット

メリット

複数のOSを搭載することによりリソースを有効活用できるようになりました。ハイパーバイザーはCPU・メモリ・ストレージ等のリソースを簡単に再配置できるプールの役割を担っています。

また、仮想マシンの実体はディスクファイルなので単なるファイルとして扱うことができます。ホストマシンをメンテナンスしたい時には別のホストマシンに移動させることが容易ですし、ホストマシンが障害で止まってしまっても別のマシンで再起動することが可能になります。複数の仮想化ホストを準備することで冗長性の向上が見込めます。

デメリット

まず挙げられるのが性能の問題です。本来であれば直接ハードウェアで処理するものをハイパーバイザーを介して行っているため、物理マシンよりも性能が劣ります。

また、運用の際に仮想マシンに関する知識が必要になる場合があります。新しく人員を追加したり、既存のメンバーがスキルを習得する必要があることもデメリットとして挙げられるでしょう。

KVMの操作

LinuxでKVMを操作するには条件があり、CPUが仮想化支援機能に対応している必要があります。CPUが対応しているかどうかは下記コマンドで確認できます。

lscpuコマンドはCPUの情報を表示するコマンドになります。

Iscpu | grep Virtualization

Virtualization:     VT-x

KVMを使用するにはIntel社のVT-xやAMD社のAMD-Vに対応している必要があります。

KVMの主な用語

用語説明
Virtio入出力の待ち時間を短縮しパフォーマンスを向上させる技術
ブリッジネットワーク仮想マシンのネットワークインターフェースをホストOSのネットワークインターフェースと同じネットワーク上に配置する仕組み。ネットワークからはホストマシンとは全く別のマシンが接続しているように見える
ネスヘッドページング2段階のページングを行いアクセスを高速化する仮想化支援機能

KVM関連プログラム

プログラム説明
kvmkvmカーネルモジュール
kvm_intelkvmカーネルモジュール(intel)
kvm_amdkvmカーネルモジュール(AMD)
virsh仮想マシンとハイパーバイザーを操作のするためのコマンドラインインターフェース
virt-managerGUIを備えた仮想マシンマネージャ
virt-installCUIによる仮想マシン作成コマンド
libvirt各種仮想化機構と連携するライブラリ

※KVMの主なコマンドはVirtualBoxなどの仮想マシン上では実行することができません。実行するには仮想マシンを動かすのに必要なリソースを搭載したコンピューターが必要になります。

コンテナ

コンテナとは?

仮想マシンと並んで使用されている技術に「コンテナ」があります。コンテナも仮想化技術なので、サーバー上に隔離した環境を作ることができます。この隔離した環境でアプリケーションを動かしたいといった場合に、素早く環境構築が可能な技術となっています。

コンテナ技術の中で最も普及しているのがDockerです。Dockerは一つのOS上に隔離環境を作って管理するソフトウェアで、追加のOSのインストールなどは必要ありません。

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

大きな違いは、ゲストOSの有無になります。仮想マシンでは内部のアプリケーションがゲストOS上で動いていますが、コンテナではミドルウェアを経由してホストOS上で動作します。これはホストOSから見たコンテナは1つのプロセスに過ぎないためです。

このためコンテナではホストOSと互換性のあるコンテナイメージを選ぶことが必要です。

まとめ

仮想マシンとコンテナについて解説しました。どちらの技術もLinuxを扱う上で重要な仮想化技術です。LinuxにおけるKVMを扱うには、実際にLinux OSが搭載されたコンピュータを準備する必要がありますので注意が必要です。WindowsやMac上でLinuxを動かしたいといった場合には、VirtualBoxやVMwareなどの仮想マシンを使用しましょう。

記事の内容は理解できましたか?