Last Update : August 21 2022 17:47:19
a. 仮想マシンとコンテナ
1. ハイパーバイザー型
仮想マシンはハイパーバイザによって作成された仮想的なハードウェア環境です。仮想マシンにOS、さらに実行するアプリケーションやライブラリをインストールし、独立した実行環境を構築します。
ホストOSの処理を必要とせずハードウェアを直接制御できるため処理速度が向上します。なおハイパーバイザー型は、直接ハードウェア上で動作することから「ベアメタル(bare metal)型」と呼ばれることがあります。
ハードウェア上にハイパーバイザーと呼ばれる仮想マシン管理ソフトウェアを用意し、その上でゲストOSを動かす方式。 ハイパーバイザーにどこまで機能をもたせるかによって、モノリシックカーネル型と、マイクロカーネル型に分けることができる。
- モノリシックカーネル型
仮想マシンを実行するためのすべての機能をハイパーバイザーが担う方式。
- マイクロカーネル型
仮想マシンの管理やデバイスドライバを、特別な権限をもった仮想マシン(親パーテーション)に任せ、ハイパーバイザーの機能を最小限にする方式である。
例 VMware vSphereやXen、KVM、Hyper-V
2. コンテナ型
コンテナはホストOS上の独立したアプリケーション実行環境です。独自のプロセステーブル、ユーザ、ファイルシステム、およびネットワークスタックを備えたフル機能のOS環境のように動作します。
コンテナはコンテナランタイムによって作成された、ホストOSのリソースを隔離・制限したプロセスです。実行するアプリケーションやライブラリを個別に用意し、アプリケーション実行時にプロセスの属性を変更してホストOSのリソースを隔離・制限することで、独立した実行環境を構築します。
仮想マシンではアプリケーションやライブラリの他にOS実行のためのリソースが必要です。起動時間も数分かかる場合があります。 しかし、コンテナの場合はアプリケーションやライブラリの実行に必要なリソースだけを準備すればよく、起動時間は通常のアプリケーション実行と遜色ないレベルです。単純なアプリケーションであれば1秒もかからず起動します。つまり、コンテナは仮想マシンに比べてオーバーヘッドが小さく、ひとつのホストで多くのコンテナを実行することが可能なのです。
続いて、隔離レベルの違いについてです。 仮想マシンは仮想的なハードウェアレベルで隔離され、仮想マシンで実行されるアプリケーションはホストOSや他の仮想マシンから確認できません。また仮想マシンからホストOSや他の仮想マシンへのアクセス方法も限定的なため、セキュリティ面で問題があっても他の仮想マシンが受ける影響を最小限に留めることができます。
コンテナはホストOSのプロセスのひとつとして動作するので、ホストOSのプロセスリストからコンテナプロセスを確認可能です。また、ホストOSのリソースを共有することから、リソースの隔離・制限が不十分なコンテナがデプロイされた場合、ホストOSや他のコンテナに影響を与える可能性があります。コンテナは仮想マシンに比べて隔離レベルは低いので、運用には注意が必要となります。
3. ホスト型
ホストとなるOS上で仮想化ソフトウェアを使い、別のゲストOSを運用する方法です。
アプリケーションを採用するような手軽さでサーバー仮想化を実現できるメリットがある一方で、ゲストOSを動かすためにはホストOS自体の処理も必要なるため、ハイパーバイザー型と比べて処理速度が出にくいのがデメリットです。
例 VMware Player・VMware Workstation・Oracle VirtualBox
b. VirshコマンドによるKVMゲストOSの管理
KVM(Kernel-based Virtual Machine)は、Linuxのカーネルに標準で組み込まれている仮想化の仕組みです。
KVMを使用するには、CPUが仮想化支援機構に対応している必要があります。AMDだとAMD-V、IntelだとVT-xのCPU。
CPUが対応しているかは、下のコマンドで確認できます。
# lscpu | grep Virtualization
Virtualization: VT-x
|
または、
# grep -E 'vmx|svm' /proc/cpuinfo
|
VT-xまたはsvmと表示されれば仮想化に対応しています。
● ゲストOSの登録
もし他のホストマシンなどからイメージと定義ファイルをコピーしてきた場合、virsh コマンドでそのイメージを管理するにはvirsh define コマンドを使用してlibvirt 管理下に登録することができます。
例えば/etc/libvirt/qemu ディレクトリ配下に定義ファイルがある場合、その定義ファイルを指定してvirsh define コマンドを実行することで、ゲストOS をvirsh コマンドで管理できるようになります。
※ package 'libvirt-clientが必要です。
# virsh define /etc/libvirt/qemu/kvm_centos7.xml
|
● ゲストOSの確認
# virsh list --all
Id Name State
----------------------------------------------------
- kvm_centos7 shut off
|
起動中であれば、Stateがrunningになる。
● ゲストOSの起動
 |
virsh start DOMAIN_NAME_OR_UUID [--console]
|
 |
# virsh start kvm_centos7
|
● ゲストOSの停止
 |
virsh shutdown DOMAIN_NAME
|
 |
# virsh shutdown kvm_centos7
|
上記コマンドで停止しない場合は、destroy オプションで強制終了します。
# virsh destroy kvm_centos7
|
ホストOSからゲストOSのコンソールに接続するには、
# virsh console kvm_centos7
Connected to domain kvm_centos7
Escape charactor is ^]
CentOS login::
|
ゲストOS から抜けるには、Ctrl + ] キーを押す。
b. dockerコマンド
z. 出題範囲概要
概要 :
- 仮想マシンとコンテナを実現する基本技術を理解している。
- ハイパーバイザー、コンテナのそれぞれの特徴と違いを理解する。
- 仮想マシン、コンテナの起動、停止ができる。
詳細 :
- カーネルとハイパーバイザーと仮想マシンの関係を理解している。
ハイパーバイザー、仮想化支援機能
仮想マシンとコンテナの特徴を理解している。
- ホストOSとコンテナの関係を理解している。
- 仮想マシンの起動と停止ができる。
virsh
- 仮想マシンにログインできる。
- コンテナの起動と停止ができる。
docker
www.it-shikaku.jp