この記事はLinuC Level1 主題1.01.2「仮想マシン・コンテナの概念と利用」に対応した要点解説です。試験で問われる範囲に絞り、仮想マシンとコンテナの本質的な違い、virshとdockerの必要サブコマンドを整理しました。
📚 LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る
目次
- この記事でできるようになること
- ハイパーバイザーとタイプ1/タイプ2
- KVMとlibvirt、CPU仮想化支援
- 仮想マシンとコンテナの違い
- virshで仮想マシンを操作する
- dockerでコンテナを操作する
- よくある質問(FAQ)
- まとめ
- 模擬問題にチャレンジ(ランダム出題)
1. この記事でできるようになること
- ✅ 仮想マシンとコンテナの定義・違い(カーネル共有の有無)
- ✅ ハイパーバイザーのタイプ1(ベアメタル型)とタイプ2(ホスト型)
- ✅ Linux標準の仮想化=KVM、管理ライブラリ=libvirt
- ✅ CPUの仮想化支援機能 Intel VT-x / AMD-V
- ✅
virshの主要サブコマンド(list/start/shutdown/destroy/reboot/suspend/resume/console/define/create/dumpxml) - ✅
dockerの主要サブコマンド(ps/run/create/start/stop/kill/rm/rmi/exec/attach/images/pull/push) - ✅
docker run=create+start、-itで対話起動、execとattachの違い
2. ハイパーバイザーとタイプ1/タイプ2
ハイパーバイザー(Virtual Machine Monitor, VMM)は、1台の物理ハードウェア上に複数の仮想マシン(VM)を作り出すソフトウェアです。各仮想マシンはCPU・メモリ・ディスクが仮想化され、独立したゲストOS(とそのカーネル)を動かします。
ハイパーバイザーは動作場所によって2種類に分類されます。
| タイプ1(ベアメタル型) | タイプ2(ホスト型) | |
|---|---|---|
| 動作場所 | 物理ハードウェアの直上(ホストOSなし) | ホストOS上のアプリケーションとして動作 |
| 代表例 | VMware ESXi、Microsoft Hyper-V、Xen、KVM | VirtualBox、VMware Workstation、QEMU |
| 主用途 | データセンター、本番サーバ | 開発者のローカルPC |
タイプ1は物理ハードウェアで直接動き、その上で複数のゲストOSを動かします。タイプ2はホストOS上のアプリとしてインストールされる形です。
3. KVMとlibvirt、CPU仮想化支援
3-1. KVM(Kernel-based Virtual Machine)
KVMはLinuxカーネル自身に組み込まれて標準搭載されている仮想化機能です。「Linux標準のハイパーバイザー」と問われたらKVMが答えになります。
3-2. libvirt(仮想化管理ライブラリ)
libvirtはKVM/Xen/LXCなどを統一的に扱うオープンソースの管理ライブラリ・デーモンです。CLIのvirshやGUIのvirt-managerは、いずれもlibvirtを経由して仮想マシンを制御します。
3-3. CPUの仮想化支援機能:VT-x / AMD-V
ハイパーバイザー(KVM等)を効率的に動かすため、CPU側にも仮想化用の命令セットが備わっています。試験頻出ポイント。
| メーカー | CPUの仮想化支援機能 |
|---|---|
| Intel | Intel VT-x(VMX) |
| AMD | AMD-V(SVM) |
AES-NI(暗号化)、Hyper-Threading(論理CPU)、TPM(セキュリティチップ)などはCPU機能ではありますが、仮想化支援機能ではありません。
4. 仮想マシンとコンテナの違い
試験で最頻出の比較。両者の本質的な違いはカーネルを共有するかどうかの1点に集約されます。
4-1. アーキテクチャの違い
仮想マシン(VM)
コンテナ
4-2. 特性の比較
| 仮想マシン(VM) | コンテナ | |
|---|---|---|
| カーネル | VMごとに独立したカーネル | ホストOSのカーネルを共有 |
| 起動時間 | 分単位(OS起動が必要) | 秒以下〜数秒(プロセス起動) |
| イメージサイズ | GB単位(ゲストOS全体を含む) | MB単位(ゲストOSを含まない) |
| オーバーヘッド | 大きい(ゲストOS分) | 小さい |
| 異種OS混在 | 可能(Linuxゲスト+Windowsゲスト) | 不可(ホストと同じカーネル種別のみ) |
コンテナが仮想マシンに比べて優れているのは、(1) 起動が速い、(2) リソースオーバーヘッドが小さい、(3) イメージが小さいの3点。いずれもカーネル共有によるメリットです。一方で、ホストと異なる種類のOSを動かす用途ではハイパーバイザー型VMが必要になります。
5. virshで仮想マシンを操作する
virshはlibvirt経由で仮想マシンを操作するCLIツール。KVM/Xen/LXC等を統一インターフェースで扱えます。
| サブコマンド | 動作 |
|---|---|
virsh list |
起動中の仮想マシン一覧 |
virsh list --all |
停止中も含む全ての仮想マシン一覧 |
virsh start <VM> |
既存定義の停止中VMを起動 |
virsh shutdown <VM> |
ACPIで正常シャットダウン要求を送信 |
virsh destroy <VM> |
強制停止(電源プラグを抜く相当) |
virsh reboot <VM> |
再起動 |
virsh suspend <VM> |
一時停止(メモリ内容を保持してpaused状態に) |
virsh resume <VM> |
一時停止中のVMを再開 |
virsh console <VM> |
シリアルコンソールに接続(抜けるにはCtrl+]) |
virsh define <XML> |
XMLから永続的に定義(起動はしない) |
virsh create <XML> |
XMLから作成+起動(一時ドメイン) |
virsh dumpxml <VM> |
VM定義をXML形式で出力(バックアップ・移行用) |
・停止:正常=
shutdown/強制=destroy・起動:既存停止中=
start/XMLから新規作成して起動=create/XMLから定義のみ=define・一時停止と再開:
suspend/resume(startではない)・再起動:
reboot(restartは存在しない)
6. dockerでコンテナを操作する
Dockerはコンテナ型仮想化の事実上の標準プラットフォーム。ホストOSのカーネルを共有しつつ、アプリとその依存関係をイメージとしてパッケージ化し、コンテナとして実行します。
6-1. コンテナ操作サブコマンド
| サブコマンド | 動作 |
|---|---|
docker ps |
起動中のコンテナ一覧 |
docker ps -a |
停止中も含む全てのコンテナ一覧 |
docker run <image> |
イメージからコンテナを作成+起動(create+start相当) |
docker create <image> |
コンテナを作成のみ(起動はしない) |
docker start <container> |
作成済み/停止中コンテナを再起動 |
docker stop <container> |
SIGTERMで正常停止を試みる(タイムアウト後にSIGKILL) |
docker kill <container> |
SIGKILLで即座に強制停止 |
docker rm <container> |
コンテナを削除 |
docker exec <container> <cmd> |
起動中コンテナ内で別プロセスとしてコマンドを実行 |
docker attach <container> |
起動中コンテナのPID 1プロセスの標準入出力に接続(抜けるにはCtrl+P Ctrl+Q) |
6-2. イメージ操作サブコマンド
| サブコマンド | 動作 |
|---|---|
docker images |
ローカルに保存されたイメージ一覧(docker image lsも可) |
docker pull <image> |
レジストリ(Docker Hub等)からイメージをダウンロード |
docker push <image> |
ローカルイメージをレジストリにアップロード |
docker rmi <image> |
イメージを削除(rm=コンテナ、rmi=イメージ) |
6-3. -itオプションで対話的に起動
コンテナを起動しつつ対話的にシェル操作したい場合は-i(標準入力を開く)と-t(擬似TTYを割り当てる)をセットで使います。
# 新規にubuntuコンテナを作成+起動して対話シェルに入る
$ docker run -it ubuntu /bin/bash
# 起動中コンテナ「web01」内でシェルを別プロセスとして起動
$ docker exec -it web01 /bin/bash
6-4. run/create/start/exec/attachの弁別
| コマンド | 作成 | 起動 | 用途 |
|---|---|---|---|
docker run |
✅ | ✅ | イメージから一発で新規コンテナを立ち上げる(最も一般的) |
docker create |
✅ | ❌ | 作成のみ、起動は後で |
docker start |
❌ | ✅ | 停止中/作成済みコンテナを再起動 |
docker exec |
❌ | – | 起動中コンテナで別コマンドを実行(新プロセス) |
docker attach |
❌ | – | 起動中コンテナのPID 1に接続 |
execとattachの違い「起動中コンテナに入ってシェルを開きたい」→
exec -it ... bash(別プロセスとして起動)「起動中コンテナのPID 1の出力をそのまま見たい」→
attach(Ctrl+Cを押すとPID 1=コンテナごと止まってしまうので注意)
7. よくある質問(FAQ)
仮想マシンとコンテナの本質的な違いは何?
ゲストのカーネルを独立に持つか、ホストOSのカーネルを共有するか。VMは独立したゲストOS+カーネルを持つため異種OSを混在できますが、コンテナはホストと同じカーネル上のプロセスとして動くため起動が速く軽量な代わりに、ホストと異なる種類のOSは動かせません。
docker runとdocker execはどう違う?
runは「新しいコンテナを作って動かす」(create+start相当)。execは「すでに起動中のコンテナに追加でコマンドを投入する」(別プロセス起動)。起動中コンテナでシェルを開きたい場合はexec -it ... /bin/bashが正解。
docker stopとdocker killは?
stopはSIGTERMで正常停止を試み、タイムアウト(既定10秒)後にSIGKILLで強制停止します。killはデフォルトでいきなりSIGKILLを送って即座に止めます。通常はstop、ハングしたコンテナを落としたい時だけkill。
docker rmとdocker rmiは?
rmはコンテナの削除、rmiはイメージの削除(rm imageの略)。一文字の違いなので試験でも選択肢に両方並んでくることがあります。
8. まとめ
- 仮想マシン:ハイパーバイザーを介して独立したゲストOS+カーネルを動かす
- コンテナ:ホストOSのカーネルを共有し、プロセスとして動作。軽量・高速・小イメージ
- ハイパーバイザーのタイプ:タイプ1(ベアメタル)/タイプ2(ホストOS上のアプリ)
- KVM:Linuxカーネル標準搭載のハイパーバイザー
- libvirt:仮想化管理ライブラリ。
virsh/virt-managerが経由 - CPU仮想化支援:Intel VT-x/AMD AMD-V
- virsh:list(–all)/start/shutdown/destroy/reboot/suspend/resume/console(Ctrl+])/define/create/dumpxml
- docker:ps(-a)/run(create+start)/start/stop(SIGTERM)/kill(SIGKILL)/rm/rmi/exec(別プロセス)/attach(PID 1)
- 対話起動:
-it(-i:標準入力、-t:擬似TTY)
📚 次の主題:ブートプロセスとsystemd(LinuC 1.01.3)
9. 模擬問題にチャレンジ(ランダム出題)
ここまでの内容を本試験に近い形で確認できます。問題数を選んで「出題スタート」を押すと、主題1.01.2の問題プールからランダムに出題されます。選択肢をクリック/タップすると、正誤と解説がその場で表示されます。
合格ライン目安:75%以上。もっと幅広く解きたい場合はLinuC 模擬問題ポータルから他の分野にも挑戦できます。
おすすめの教材
関連記事
📚 LinuC Level1 完全攻略マップへ戻る
全39サブ項目のシラバス準拠マップから他の記事を探せます




コメント