4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【コマンド集】LPIC-3 305 Virtualization and Containerization 試験対策まとめ! 全トピック解説

4
Posted at

はじめに

スクリーンショット 2026-04-03 23.36.31.png

こんばんは、mirukyです。
本記事はLPIC-3 305: Virtualization and Containerization(305-300)の 全トピック・全サブトピック を公式試験要項(Objectives V3.0)に基づいて網羅した試験対策記事です。

LPIC-3 305は仮想化(KVM/QEMU/Xen/libvirt)とコンテナ技術(Docker/LXC/Kubernetes)に特化した専門資格です。
近年のクラウド・DevOps需要に直結する内容で、LPIC-3の中でも人気の高い試験です。

LPIC-3 305 試験概要

項目 内容
試験コード 305-300
試験バージョン V3.0
前提条件 有効なLPIC-2資格を保有していること
問題数 60問
試験時間 90分
合格ライン 500点 / 800点満点(約65%)
出題形式 選択式・複数選択式・穴埋め式
有効期間 5年
受験料 19,800円(税込)(出典:Pearson VUE公式マーケットプレイス)

LPIC-3 の位置付け

① LPIC-1(基礎) → LPIC-2(サーバー構築) → LPIC-3(エンタープライズ・専門領域)
- 300: Mixed Environments
- 305: Virtualization & Containerization ← 本記事
- 306: High Availability & Storage Clusters

試験の中心テーマ

  • 完全仮想化:KVM/QEMU、Xen、libvirt(virsh)
  • コンテナ仮想化:Docker、LXC/LXD、Kubernetes
  • VMデプロイ・プロビジョニング:cloud-init、Vagrant、Packer

Topic 351:完全仮想化

351.1 仮想化の概念と理論(Weight: 6)

ハイパーバイザの種類

種類 説明
Type 1(ベアメタル) ハードウェア上で直接動作 KVM、Xen、VMware ESXi、Hyper-V
Type 2(ホスト型) ホストOS上で動作 VirtualBox、VMware Workstation、QEMU(非KVM時)

仮想化方式

方式 説明
完全仮想化(HVM) ゲストOSを修正なしで動作。CPUのハードウェア支援(VT-x/AMD-V)を利用
準仮想化(PV) ゲストOSにハイパーバイザ用の修正が必要。オーバーヘッドが少ない
PV on HVM(PVHVM) 完全仮想化ベースで準仮想化ドライバを使用。両方の利点を活用
コンテナ仮想化 カーネルを共有。名前空間とcgroupsで分離

マイグレーション

種類 説明
P2V(Physical to Virtual) 物理マシンを仮想マシンに変換
V2V(Virtual to Virtual) 異なる仮想化基盤間で仮想マシンを変換
ライブマイグレーション VMを停止させずに別ホストに移動
コールドマイグレーション VMを停止してから移動

CPU仮想化支援の確認

# CPU仮想化支援の確認
grep -E '(vmx|svm)' /proc/cpuinfo
# vmx = Intel VT-x
# svm = AMD-V

# KVMモジュールの確認
lsmod | grep kvm
# kvm_intel または kvm_amd が表示されればOK

# 仮想化機能の詳細確認
lscpu | grep Virtualization

主要な仮想化プラットフォーム(認識レベル)

プラットフォーム 説明
oVirt KVMベースのエンタープライズ仮想化管理(Red Hat Virtualizationのアップストリーム)
Proxmox VE KVM + LXCベースの仮想化管理プラットフォーム
VirtualBox Oracle製のType 2ハイパーバイザ
Open vSwitch(OVS) ソフトウェア定義ネットワーク用の仮想スイッチ

351.2 Xen(Weight: 3)

Xenアーキテクチャ

① ハードウェア

  • Xenハイパーバイザ
    • Dom0(管理ドメイン):特権を持つLinux。ハードウェアドライバを提供
    • DomU(PV):準仮想化ゲスト
    • DomU(HVM):完全仮想化ゲスト

コマンド集

# xl コマンド(Xenの主要管理ツール)
xl list                                       # ドメイン(VM)一覧
xl create [設定ファイルパス]                   # ドメインの起動
xl shutdown [ドメイン名]                       # ドメインの正常シャットダウン
xl destroy [ドメイン名]                        # ドメインの強制停止
xl pause [ドメイン名]                          # ドメインの一時停止
xl unpause [ドメイン名]                        # ドメインの再開
xl save [ドメイン名] [保存先ファイルパス]       # ドメインの状態保存
xl restore [保存ファイルパス]                  # ドメインの状態復元
xl migrate [ドメイン名] [移行先ホスト名]       # ライブマイグレーション
xl info                                       # Xenホスト情報
xl dmesg                                      # Xenハイパーバイザのメッセージ
xl top                                        # リソース使用状況(xentop相当)
xl console [ドメイン名]                        # ドメインのコンソール接続

# xentop(リアルタイムモニタリング)
xentop                                        # 全ドメインのリソース使用状況

# xm コマンド(レガシー、xl推奨)
xm list
xm create [設定ファイルパス]

Xen ドメイン設定ファイルの例

# /etc/xen/guest01.cfg
name = "guest01"
memory = 2048
vcpus = 2
disk = ['file:/var/lib/xen/images/guest01.img,xvda,w']
vif = ['bridge=xenbr0']
kernel = "/boot/vmlinuz"
ramdisk = "/boot/initrd.img"
root = "/dev/xvda1"

重要ファイル

  • /etc/xen/ :Xen設定ディレクトリ
  • /etc/xen/xl.conf :xlのグローバル設定
  • /var/lib/xen/ :ドメインイメージの格納先
  • /var/log/xen/ :Xenログ

351.3 QEMU(Weight: 4)

重要ポイント

  • QEMU:ハードウェアエミュレータ兼仮想化ツール
  • KVM:Linuxカーネルのハイパーバイザモジュール。QEMUと組み合わせて高速な仮想化を実現
  • QEMU単体 = エミュレーション(遅い)、QEMU + KVM = ハードウェア仮想化(速い)

コマンド集

# KVMモジュールの確認・ロード
lsmod | grep kvm
modprobe kvm
modprobe kvm_intel                            # Intel CPU
modprobe kvm_amd                              # AMD CPU

# --- QEMU/KVM でVMを起動 ---
# 基本的な起動
qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 \
  -smp 2 \
  -hda [ディスクイメージパス] \
  -cdrom [ISOファイルパス] \
  -boot d \
  -vnc :1

# オプション解説
# -enable-kvm     : KVMアクセラレーションを有効化
# -m 2048         : メモリ2048MB
# -smp 2          : vCPU 2個
# -hda            : ハードディスクイメージ
# -cdrom          : CD-ROMイメージ(ISOファイル)
# -boot d         : CD-ROMから起動(c=HDD, d=CDROM, n=ネットワーク)
# -vnc :1         : VNCディスプレイ(ポート5901)

# ネットワーク設定付き
qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 \
  -hda [ディスクイメージパス] \
  -net nic,model=virtio \
  -net bridge,br=br0

# VirtIOデバイスの使用(高速I/O)
qemu-system-x86_64 \
  -enable-kvm \
  -m 4096 \
  -drive file=[ディスクイメージパス],format=qcow2,if=virtio \
  -netdev bridge,id=net0,br=br0 \
  -device virtio-net-pci,netdev=net0

# --- QEMUモニタ ---
# VM実行中に Ctrl+Alt+2 でモニタに切り替え
# 主要コマンド:
# info status          : VM状態
# info network         : ネットワーク情報
# info block           : ブロックデバイス情報
# savevm [名前]        : スナップショット作成
# loadvm [名前]        : スナップショット復元
# quit                 : VM終了

# QEMU Guest Agent
# ゲスト内で qemu-guest-agent サービスを起動
systemctl start qemu-guest-agent

重要ファイル

  • /dev/kvm :KVMデバイスファイル
  • /usr/bin/qemu-system-x86_64 :QEMUバイナリ
  • /etc/modprobe.d/ :KVMモジュール設定

351.4 libvirt仮想マシン管理(Weight: 9)

Weight 9 は 本試験で最も出題比率が高い サブトピックです。virshコマンドを徹底的に覚えてください。

libvirtアーキテクチャ

① 管理ツール(virsh / virt-manager / virt-install)
② libvirtd(デーモン)

  • KVM/QEMU
  • Xen
  • LXC
  • VirtualBox

virsh コマンド集

VM(ドメイン)のライフサイクル管理

# 一覧表示
virsh list                                    # 実行中のVM一覧
virsh list --all                              # 全VM一覧(停止中含む)
virsh list --inactive                         # 停止中のVM一覧

# 起動・停止
virsh start [VM名]                            # VM起動
virsh shutdown [VM名]                         # VMの正常シャットダウン
virsh destroy [VM名]                          # VMの強制停止
virsh reboot [VM名]                           # VM再起動
virsh suspend [VM名]                          # VM一時停止(メモリ保持)
virsh resume [VM名]                           # VM再開

# 自動起動
virsh autostart [VM名]                        # 自動起動有効化
virsh autostart --disable [VM名]              # 自動起動無効化

# VM情報
virsh dominfo [VM名]                          # VM情報の表示
virsh domblklist [VM名]                       # VMのブロックデバイス一覧
virsh domiflist [VM名]                        # VMのネットワークインターフェース一覧
virsh vcpuinfo [VM名]                         # vCPU情報
virsh dommemstat [VM名]                       # メモリ統計

# コンソール
virsh console [VM名]                          # シリアルコンソール接続(Ctrl+] で切断)

# 削除
virsh undefine [VM名]                         # VMの定義削除
virsh undefine [VM名] --remove-all-storage    # ディスクイメージごと削除

VMの作成(virt-install)

# 新規VMの作成
virt-install \
  --name [VM名] \
  --ram 2048 \
  --vcpus 2 \
  --disk path=[ディスクイメージパス],size=20,format=qcow2 \
  --os-variant [OS種別] \
  --network bridge=br0 \
  --cdrom [ISOファイルパス] \
  --graphics vnc,listen=0.0.0.0

# ネットワークインストール
virt-install \
  --name [VM名] \
  --ram 2048 \
  --vcpus 2 \
  --disk path=[ディスクイメージパス],size=20 \
  --os-variant [OS種別] \
  --location [インストールURL] \
  --network network=default \
  --graphics none \
  --console pty,target_type=serial \
  --extra-args 'console=ttyS0'

# OS種別の一覧
osinfo-query os | grep -i [OS名]
virt-install --os-variant list                # レガシー

VMの複製

# VMのクローン
virt-clone \
  --original [元VM名] \
  --name [新VM名] \
  --file [新ディスクイメージパス]

# VMイメージのクリーンアップ(固有情報の除去)
virt-sysprep -d [VM名]
virt-sysprep -a [ディスクイメージパス]

スナップショット管理

virsh snapshot-create-as [VM名] [スナップショット名] "[説明]"
virsh snapshot-list [VM名]                    # スナップショット一覧
virsh snapshot-info [VM名] [スナップショット名]   # スナップショット情報
virsh snapshot-revert [VM名] [スナップショット名]  # スナップショットに戻す
virsh snapshot-delete [VM名] [スナップショット名]  # スナップショット削除

ライブマイグレーション

# ライブマイグレーション
virsh migrate --live [VM名] qemu+ssh://[移行先ホスト名]/system

# オフラインマイグレーション
virsh migrate --offline [VM名] qemu+ssh://[移行先ホスト名]/system

ネットワーク管理

# ネットワーク一覧
virsh net-list                                # アクティブなネットワーク
virsh net-list --all                          # 全ネットワーク

# ネットワーク操作
virsh net-start [ネットワーク名]              # ネットワーク起動
virsh net-destroy [ネットワーク名]            # ネットワーク停止
virsh net-autostart [ネットワーク名]          # 自動起動有効化
virsh net-define [XMLファイルパス]            # ネットワーク定義
virsh net-undefine [ネットワーク名]           # ネットワーク定義削除
virsh net-dumpxml [ネットワーク名]            # XML設定の表示
virsh net-edit [ネットワーク名]               # XML設定の編集

ストレージプール管理

# ストレージプール一覧
virsh pool-list                               # アクティブなプール
virsh pool-list --all                         # 全プール

# プール操作
virsh pool-define-as [プール名] dir --target [ディレクトリパス]
virsh pool-build [プール名]                   # プールの構築
virsh pool-start [プール名]                   # プール起動
virsh pool-autostart [プール名]               # 自動起動有効化
virsh pool-destroy [プール名]                 # プール停止
virsh pool-delete [プール名]                  # プール削除
virsh pool-undefine [プール名]                # プール定義削除

# ボリューム操作
virsh vol-list [プール名]                     # ボリューム一覧
virsh vol-create-as [プール名] [ボリューム名] [サイズ] --format qcow2
virsh vol-delete [ボリューム名] --pool [プール名]
virsh vol-info [ボリュームパス]               # ボリューム情報

VM設定のXML管理

virsh dumpxml [VM名]                          # VMのXML設定を出力
virsh edit [VM名]                             # VMのXML設定を編集
virsh define [XMLファイルパス]                 # XMLからVMを定義

重要ファイル

  • /etc/libvirt/ :libvirtの設定ディレクトリ
  • /etc/libvirt/qemu/ :KVM/QEMUのVM定義XML
  • /etc/libvirt/qemu/networks/ :ネットワーク定義XML
  • /etc/libvirt/storage/ :ストレージプール定義
  • /var/lib/libvirt/images/ :デフォルトのディスクイメージ格納先
  • /var/log/libvirt/qemu/ :VMログ

351.5 仮想マシンディスクイメージ管理(Weight: 3)

ディスクイメージフォーマット

フォーマット 特徴
raw 非圧縮。最高のI/O性能。サイズが固定
qcow2 QEMU標準。スナップショット・圧縮・暗号化対応。シンプロビジョニング
vmdk VMware形式
vdi VirtualBox形式
vhd / vhdx Hyper-V形式

qemu-img コマンド集

# イメージの作成
qemu-img create -f qcow2 [イメージファイルパス] 20G        # qcow2形式で20GB
qemu-img create -f raw [イメージファイルパス] 10G           # raw形式で10GB
qemu-img create -f qcow2 -o preallocation=metadata [イメージファイルパス] 50G  # メタデータ事前割り当て

# イメージ情報の表示
qemu-img info [イメージファイルパス]

# イメージのリサイズ
qemu-img resize [イメージファイルパス] +10G                 # 10GB拡張
qemu-img resize [イメージファイルパス] 30G                  # 30GBに変更
qemu-img resize --shrink [イメージファイルパス] 15G         # 15GBに縮小(データ損失注意)

# イメージのフォーマット変換
qemu-img convert -f raw -O qcow2 [入力ファイルパス] [出力ファイルパス]   # raw→qcow2
qemu-img convert -f qcow2 -O raw [入力ファイルパス] [出力ファイルパス]   # qcow2→raw
qemu-img convert -f vmdk -O qcow2 [入力ファイルパス] [出力ファイルパス]  # vmdk→qcow2
qemu-img convert -O qcow2 -c [入力ファイルパス] [出力ファイルパス]      # 圧縮変換

# スナップショット管理
qemu-img snapshot -c [スナップショット名] [イメージファイルパス]    # スナップショット作成
qemu-img snapshot -l [イメージファイルパス]                        # スナップショット一覧
qemu-img snapshot -a [スナップショット名] [イメージファイルパス]    # スナップショット適用
qemu-img snapshot -d [スナップショット名] [イメージファイルパス]    # スナップショット削除

# バッキングファイル(差分ディスク)
qemu-img create -f qcow2 -b [ベースイメージパス] -F qcow2 [差分イメージパス]
qemu-img info [差分イメージパス]              # バッキングファイル情報の確認
qemu-img rebase -b [新ベースイメージパス] [差分イメージパス]   # ベース変更
qemu-img commit [差分イメージパス]            # 差分をベースにマージ

# イメージの整合性チェック
qemu-img check [イメージファイルパス]

Topic 352:コンテナ仮想化

352.1 コンテナ仮想化の概念(Weight: 7)

仮想マシン vs コンテナ

仮想マシン コンテナ
カーネル 独自のカーネル ホストのカーネルを共有
起動時間 数十秒〜数分 数秒以下
リソース消費 大きい 小さい
分離レベル 高い(ハードウェアレベル) 中程度(カーネルレベル)
用途 異なるOSの実行、高い分離 マイクロサービス、CI/CD

Linux名前空間(Namespaces)

名前空間 分離対象
PID プロセスID
NET ネットワーク(インターフェース、ルーティング等)
MNT マウントポイント
UTS ホスト名・ドメイン名
IPC プロセス間通信
USER UID/GIDマッピング
CGROUP cgroupのルートディレクトリ

cgroups(Control Groups)

cgroup 制御対象
cpu CPU使用時間の制限
cpuset 使用するCPUコアの割り当て
memory メモリ使用量の制限
blkio ブロックI/Oの制限
devices デバイスアクセスの制御
pids プロセス数の制限

コマンド集

# 名前空間の確認
lsns                                          # 全名前空間の一覧
ls -la /proc/self/ns/                         # 現在のプロセスの名前空間

# cgroupsの確認
cat /proc/[PID]/cgroup                        # プロセスのcgroup情報
ls /sys/fs/cgroup/                            # cgroupファイルシステム

# unshare(名前空間の手動作成)
unshare --pid --mount-proc --fork /bin/bash   # PID名前空間を分離
unshare --net /bin/bash                       # ネットワーク名前空間を分離

# nsenter(既存の名前空間に入る)
nsenter --target [PID] --pid --mount          # 指定プロセスの名前空間に入る

# 低レベルコンテナランタイム
runc list                                     # runcコンテナ一覧
ctr containers list                           # containerdコンテナ一覧

352.2 LXC(Linux Containers)(Weight: 6)

重要ポイント

  • LXC:OSレベルの仮想化(システムコンテナ)
  • LXD:LXCのフロントエンド管理ツール(REST API経由)
  • システムコンテナ = 完全なLinux環境を実行(VM的な使い方)

LXC コマンド集

# コンテナの作成・管理
lxc-create -n [コンテナ名] -t [テンプレート名]             # コンテナ作成
lxc-create -n [コンテナ名] -t download -- -d ubuntu -r focal -a amd64   # ダウンロード作成
lxc-start -n [コンテナ名]                                  # コンテナ起動
lxc-start -n [コンテナ名] -d                               # バックグラウンドで起動
lxc-stop -n [コンテナ名]                                   # コンテナ停止
lxc-destroy -n [コンテナ名]                                # コンテナ削除
lxc-ls --fancy                                             # コンテナ一覧(詳細)
lxc-info -n [コンテナ名]                                   # コンテナ情報
lxc-attach -n [コンテナ名]                                 # コンテナ内にシェル接続
lxc-attach -n [コンテナ名] -- [コマンド]                   # コンテナ内でコマンド実行
lxc-console -n [コンテナ名]                                # コンソール接続
lxc-freeze -n [コンテナ名]                                 # コンテナ凍結(一時停止)
lxc-unfreeze -n [コンテナ名]                               # コンテナ凍結解除
lxc-snapshot -n [コンテナ名]                               # スナップショット作成
lxc-snapshot -n [コンテナ名] -L                            # スナップショット一覧
lxc-snapshot -n [コンテナ名] -r [スナップショット名]       # スナップショット復元
lxc-copy -n [元コンテナ名] -N [新コンテナ名]               # コンテナ複製
lxc-checkconfig                                            # カーネルのLXCサポート確認

LXD コマンド集

# LXDの初期設定
lxd init                                                   # 対話式初期設定

# コンテナ管理
lxc launch [イメージ名] [コンテナ名]                       # コンテナ作成+起動
lxc launch ubuntu:22.04 [コンテナ名]                       # Ubuntu 22.04で起動
lxc list                                                   # コンテナ一覧
lxc start [コンテナ名]                                     # 起動
lxc stop [コンテナ名]                                      # 停止
lxc delete [コンテナ名]                                    # 削除
lxc exec [コンテナ名] -- /bin/bash                         # シェル接続
lxc exec [コンテナ名] -- [コマンド]                        # コマンド実行
lxc info [コンテナ名]                                      # コンテナ情報
lxc config show [コンテナ名]                               # 設定表示
lxc config set [コンテナ名] limits.memory 2GB              # メモリ制限
lxc config set [コンテナ名] limits.cpu 2                   # CPU制限

# イメージ管理
lxc image list                                             # ローカルイメージ一覧
lxc image list images:                                     # リモートイメージ一覧

# スナップショット
lxc snapshot [コンテナ名] [スナップショット名]
lxc restore [コンテナ名] [スナップショット名]
lxc delete [コンテナ名]/[スナップショット名]

# ストレージ・ネットワーク
lxc storage list                                           # ストレージプール一覧
lxc network list                                           # ネットワーク一覧

重要ファイル

  • /etc/lxc/lxc.conf :LXCのグローバル設定
  • /etc/lxc/default.conf :デフォルトコンテナ設定
  • /var/lib/lxc/[コンテナ名]/config :コンテナ個別設定
  • /var/lib/lxc/[コンテナ名]/rootfs/ :コンテナのルートファイルシステム

352.3 Docker(Weight: 9)

Weight 9 は 351.4(libvirt)と並んで最も出題比率が高い サブトピックです。

Docker コマンド集

コンテナ管理

# コンテナの実行
docker run [イメージ名]                                    # コンテナ実行
docker run -d [イメージ名]                                 # バックグラウンドで実行
docker run -it [イメージ名] /bin/bash                      # 対話モードでシェル起動
docker run -d -p 8080:80 [イメージ名]                      # ポートマッピング(ホスト:コンテナ)
docker run -d -v [ホストパス]:[コンテナパス] [イメージ名]   # ボリュームマウント
docker run -d --name [コンテナ名] [イメージ名]             # 名前を指定して実行
docker run -d --restart=always [イメージ名]                # 自動再起動設定
docker run -d -e [環境変数名]=[値] [イメージ名]            # 環境変数を設定
docker run -d --network [ネットワーク名] [イメージ名]      # ネットワーク指定
docker run --rm [イメージ名]                               # 終了後に自動削除
docker run --memory=512m --cpus=1.5 [イメージ名]           # リソース制限

# コンテナ操作
docker ps                                                  # 実行中のコンテナ一覧
docker ps -a                                               # 全コンテナ一覧
docker start [コンテナ名]                                  # コンテナ起動
docker stop [コンテナ名]                                   # コンテナ停止
docker restart [コンテナ名]                                # コンテナ再起動
docker rm [コンテナ名]                                     # コンテナ削除
docker rm -f [コンテナ名]                                  # 強制削除
docker exec -it [コンテナ名] /bin/bash                     # 実行中コンテナにシェル接続
docker logs [コンテナ名]                                   # コンテナログ表示
docker logs -f [コンテナ名]                                # ログのリアルタイム追跡
docker inspect [コンテナ名]                                # コンテナ詳細情報
docker stats                                               # リソース使用状況(リアルタイム)
docker top [コンテナ名]                                    # コンテナ内のプロセス一覧
docker cp [ホストパス] [コンテナ名]:[コンテナパス]         # ファイルコピー
docker diff [コンテナ名]                                   # ファイルシステムの変更点
docker commit [コンテナ名] [新イメージ名]                  # コンテナからイメージ作成
docker rename [旧名] [新名]                                # コンテナ名変更
docker pause [コンテナ名]                                  # コンテナ一時停止
docker unpause [コンテナ名]                                # コンテナ再開
docker wait [コンテナ名]                                   # コンテナ終了を待機
docker prune                                               # 停止済みコンテナの一括削除

イメージ管理

docker images                                              # ローカルイメージ一覧
docker pull [イメージ名]:[タグ]                            # イメージの取得
docker push [リポジトリ名]/[イメージ名]:[タグ]             # イメージの公開
docker rmi [イメージ名]                                    # イメージの削除
docker build -t [イメージ名]:[タグ] [Dockerfileのディレクトリ]   # イメージのビルド
docker build -t [イメージ名] -f [Dockerfileパス] .         # Dockerfile指定ビルド
docker tag [元イメージ名] [新イメージ名]:[タグ]            # イメージにタグ付け
docker history [イメージ名]                                # イメージのレイヤー履歴
docker save -o [出力ファイルパス] [イメージ名]             # イメージをファイルに保存
docker load -i [入力ファイルパス]                          # ファイルからイメージを読み込み
docker image prune                                         # 未使用イメージの一括削除
docker image prune -a                                      # 全未使用イメージの削除

Dockerfile の主要命令

命令 説明
FROM ベースイメージの指定
RUN ビルド時にコマンドを実行
CMD コンテナ起動時のデフォルトコマンド
ENTRYPOINT コンテナ起動時の固定コマンド
COPY ファイルをイメージにコピー
ADD ファイルをコピー(URL・tar展開対応)
WORKDIR 作業ディレクトリの設定
ENV 環境変数の設定
EXPOSE 公開ポートの宣言
VOLUME ボリュームマウントポイントの宣言
USER 実行ユーザーの指定
ARG ビルド時の変数
LABEL メタデータの追加
HEALTHCHECK ヘルスチェックの設定

Dockerfile の例

FROM ubuntu:22.04
LABEL maintainer="admin@example.com"
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

ネットワーク管理

docker network ls                                          # ネットワーク一覧
docker network create [ネットワーク名]                     # ネットワーク作成
docker network create --driver bridge --subnet 172.20.0.0/16 [ネットワーク名]
docker network rm [ネットワーク名]                         # ネットワーク削除
docker network inspect [ネットワーク名]                    # ネットワーク詳細
docker network connect [ネットワーク名] [コンテナ名]       # コンテナをネットワークに接続
docker network disconnect [ネットワーク名] [コンテナ名]    # コンテナをネットワークから切断
ドライバ 説明
bridge デフォルト。コンテナ間の通信用
host ホストのネットワークを直接使用
none ネットワークなし
overlay 複数ホスト間のコンテナ通信(Swarm)
macvlan コンテナにMACアドレスを割り当て

ボリューム管理

docker volume ls                                           # ボリューム一覧
docker volume create [ボリューム名]                        # ボリューム作成
docker volume rm [ボリューム名]                            # ボリューム削除
docker volume inspect [ボリューム名]                       # ボリューム詳細
docker volume prune                                        # 未使用ボリュームの一括削除

Docker Compose

docker compose up                                          # サービス起動
docker compose up -d                                       # バックグラウンドで起動
docker compose down                                        # サービス停止・削除
docker compose ps                                          # サービス一覧
docker compose logs                                        # ログ表示
docker compose build                                       # イメージのビルド
docker compose exec [サービス名] /bin/bash                 # サービス内にシェル接続
docker compose pull                                        # イメージの取得
docker compose restart                                     # サービス再起動

docker-compose.yml の例

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app
    restart: always

  app:
    build: ./app
    environment:
      - DB_HOST=db
      - DB_PORT=3306
    networks:
      - backend

  db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=myapp
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - backend

volumes:
  db-data:

networks:
  backend:

重要ファイル

  • /etc/docker/daemon.json :Dockerデーモンの設定
  • /var/lib/docker/ :Dockerのデータディレクトリ
  • Dockerfile :イメージビルド定義
  • docker-compose.yml :マルチコンテナ定義

352.4 コンテナオーケストレーションプラットフォーム(Weight: 3)

Kubernetes の基本概念

オブジェクト 説明
Pod 最小のデプロイ単位。1つ以上のコンテナを含む
ReplicaSet Podのレプリカ数を管理
Deployment ReplicaSetの宣言的管理。ローリングアップデート対応
Service Podへのネットワークアクセスを提供(ロードバランシング)
Namespace リソースの論理的な分離
ConfigMap 設定データの管理
Secret 機密データの管理
Ingress 外部からのHTTP/HTTPSルーティング
PersistentVolume(PV) 永続ストレージ
PersistentVolumeClaim(PVC) PVの要求

kubectl コマンド集

# リソースの取得
kubectl get pods                                           # Pod一覧
kubectl get pods -o wide                                   # Pod一覧(詳細)
kubectl get pods --all-namespaces                          # 全名前空間のPod
kubectl get deployments                                    # Deployment一覧
kubectl get services                                       # Service一覧
kubectl get nodes                                          # Node一覧
kubectl get all                                            # 全リソース

# リソースの作成・適用
kubectl apply -f [マニフェストファイルパス]                # 宣言的にリソースを適用
kubectl create -f [マニフェストファイルパス]               # リソースの作成
kubectl delete -f [マニフェストファイルパス]               # リソースの削除

# リソースの詳細・ログ
kubectl describe pod [Pod名]                               # Pod詳細
kubectl logs [Pod名]                                       # Podログ
kubectl logs -f [Pod名]                                    # ログのリアルタイム追跡
kubectl exec -it [Pod名] -- /bin/bash                      # Pod内にシェル接続

# スケーリング
kubectl scale deployment [Deployment名] --replicas=[数]    # レプリカ数変更

# 削除
kubectl delete pod [Pod名]                                 # Pod削除
kubectl delete deployment [Deployment名]                   # Deployment削除
kubectl delete service [Service名]                         # Service削除

Docker Swarm(認識レベル)

docker swarm init                                          # Swarmクラスタ初期化
docker swarm join --token [トークン] [マネージャIP]:2377    # ワーカーの参加
docker node ls                                             # ノード一覧
docker service create --name [サービス名] --replicas [数] [イメージ名]
docker service ls                                          # サービス一覧
docker service scale [サービス名]=[数]                     # スケーリング

Topic 353:VMデプロイとプロビジョニング

353.1 クラウド管理ツール(Weight: 2)

認識レベルのプラットフォーム

ツール 説明
OpenStack オープンソースのIaaSプラットフォーム
CloudStack Apache製のクラウド管理プラットフォーム
oVirt KVMベースの仮想化管理
Proxmox VE KVM + LXCベースの管理プラットフォーム
# OpenStack CLI(認識レベル)
openstack server list                                      # インスタンス一覧
openstack server create --flavor [フレーバー名] --image [イメージ名] [インスタンス名]
openstack image list                                       # イメージ一覧

353.2 Packer(Weight: 2)

コマンド集

# Packerによるイメージビルド
packer validate [テンプレートファイルパス]                  # テンプレートの検証
packer build [テンプレートファイルパス]                     # イメージのビルド
packer inspect [テンプレートファイルパス]                   # テンプレート情報の表示
packer init [テンプレートファイルパス]                      # プラグインの初期化

Packerテンプレートの例(HCL2形式)

# template.pkr.hcl
packer {
  required_plugins {
    qemu = {
      source  = "github.com/hashicorp/qemu"
      version = ">= 1.0.0"
    }
  }
}

source "qemu" "ubuntu" {
  iso_url          = "https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso"
  iso_checksum     = "sha256:xxxxxx"
  output_directory = "output-ubuntu"
  disk_size        = "20G"
  format           = "qcow2"
  accelerator      = "kvm"
  ssh_username     = "ubuntu"
  ssh_password     = "ubuntu"
  ssh_timeout      = "30m"
}

build {
  sources = ["source.qemu.ubuntu"]

  provisioner "shell" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y nginx"
    ]
  }
}

353.3 cloud-init(Weight: 3)

重要ポイント

  • cloud-init:クラウドインスタンスの初期設定を自動化するツール
  • 初回起動時にユーザー作成、SSH鍵配置、パッケージインストール等を実行

コマンド集

# cloud-initの状態確認
cloud-init status                                          # 実行状態
cloud-init status --long                                   # 詳細状態

# ログ確認
cat /var/log/cloud-init.log                                # 詳細ログ
cat /var/log/cloud-init-output.log                         # 出力ログ

# cloud-initの再実行
cloud-init clean                                           # 状態のクリア
cloud-init init                                            # 再初期化

# ユーザーデータの確認
cloud-init query userdata                                  # ユーザーデータの表示

cloud-config の例(user-data)

#cloud-config
hostname: myserver
manage_etc_hosts: true

users:
  - name: admin
    groups: sudo
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh_authorized_keys:
      - ssh-ed25519 AAAA... admin@example.com

packages:
  - nginx
  - git
  - vim

runcmd:
  - systemctl enable nginx
  - systemctl start nginx

write_files:
  - path: /etc/motd
    content: |
      Welcome to MyServer!
    permissions: '0644'

final_message: "Cloud-init completed in $UPTIME seconds"

重要ファイル

  • /etc/cloud/cloud.cfg :cloud-initのメイン設定
  • /etc/cloud/cloud.cfg.d/ :追加設定
  • /var/lib/cloud/ :cloud-initの状態データ
  • /var/log/cloud-init.log :cloud-initのログ

353.4 Vagrant(Weight: 3)

コマンド集

# Vagrantの基本操作
vagrant init [Box名]                                       # Vagrantfileの初期化
vagrant up                                                 # VM起動
vagrant halt                                               # VM停止
vagrant destroy                                            # VM削除
vagrant suspend                                            # VM一時停止
vagrant resume                                             # VM再開
vagrant reload                                             # VM再起動(設定再読み込み)
vagrant status                                             # VM状態
vagrant ssh                                                # VMにSSH接続
vagrant provision                                          # プロビジョニング再実行

# Box管理
vagrant box list                                           # Box一覧
vagrant box add [Box名]                                    # Boxの追加
vagrant box remove [Box名]                                 # Boxの削除
vagrant box update                                         # Boxの更新

# マルチVM
vagrant up [VM名]                                          # 特定VMのみ起動
vagrant ssh [VM名]                                         # 特定VMにSSH接続

Vagrantfile の例

Vagrant.configure("2") do |config|
  # ベースBox
  config.vm.box = "ubuntu/focal64"

  # ネットワーク設定
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "private_network", ip: "192.168.56.10"

  # 共有フォルダ
  config.vm.synced_folder "./data", "/vagrant_data"

  # プロバイダ設定
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
    vb.name = "my-dev-vm"
  end

  # プロビジョニング
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
    systemctl enable nginx
  SHELL

  # マルチVM構成
  config.vm.define "web" do |web|
    web.vm.box = "ubuntu/focal64"
    web.vm.network "private_network", ip: "192.168.56.11"
  end

  config.vm.define "db" do |db|
    db.vm.box = "ubuntu/focal64"
    db.vm.network "private_network", ip: "192.168.56.12"
  end
end

重要ファイル

  • Vagrantfile :VM定義ファイル
  • ~/.vagrant.d/ :Vagrantのグローバル設定
  • ~/.vagrant.d/boxes/ :ダウンロード済みBox

出題比率(Weight)ランキング

順位 サブトピック Weight 内容
1 351.4 9 libvirt仮想マシン管理
1 352.3 9 Docker
3 352.1 7 コンテナ仮想化の概念
4 351.1 6 仮想化の概念と理論
4 352.2 6 LXC
6 351.3 4 QEMU
7 351.2 3 Xen
7 351.5 3 VMディスクイメージ管理
7 352.4 3 コンテナオーケストレーション
7 353.3 3 cloud-init
7 353.4 3 Vagrant
12 353.1 2 クラウド管理ツール
12 353.2 2 Packer

試験対策のポイント

頻出テーマ 暗記チェックリスト

必ず覚えるべき項目(Topic 351:完全仮想化)

  • ハイパーバイザの種類(Type 1 / Type 2)と具体例
  • 仮想化方式の違い(HVM / PV / PVHVM / コンテナ)
  • CPU仮想化支援の確認方法(vmx, svm
  • virsh の全サブコマンド(start/stop/list/snapshot/migrate/net/pool等)
  • virt-install によるVM作成手順
  • virt-clone / virt-sysprep の使い方
  • libvirtのXML設定ファイルの構造
  • qemu-img のフォーマット変換・スナップショット・リサイズ
  • qcow2 と raw フォーマットの違い
  • Xenのアーキテクチャ(Dom0 / DomU)と xl コマンド

必ず覚えるべき項目(Topic 352:コンテナ仮想化)

  • 名前空間(Namespaces)の種類と役割
  • cgroups で制御できるリソース
  • VMとコンテナの違い
  • LXCコマンド(lxc-create, lxc-start, lxc-attach等)
  • LXDコマンド(lxc launch, lxc exec, lxc config等)
  • Dockerコマンド全般(run, build, ps, images, volume, network等)
  • Dockerfile の主要命令(FROM, RUN, CMD, COPY, EXPOSE等)
  • Docker Compose の docker-compose.yml の構造
  • Kubernetesの基本オブジェクト(Pod, Deployment, Service等)
  • kubectl の基本コマンド(get, apply, describe, logs, exec

必ず覚えるべき項目(Topic 353:デプロイ・プロビジョニング)

  • cloud-init の cloud-config 書式
  • Vagrantfile の構造とコマンド(up, halt, destroy, ssh等)
  • Packerテンプレートの基本構造

おわりに

LPIC-3 305は virsh(libvirt)Docker がWeight 9で最重要です。この2つだけで試験全体の約30%を占めます。

加えて、コンテナ仮想化の概念(名前空間・cgroups)とLXCもWeight 6〜7と高く、仮想化の理論的な理解も問われます。

学習の進め方としては:

  1. KVM/QEMUの環境を構築し、virshコマンドを徹底的に練習する
  2. DockerでWebアプリのコンテナ化を実践する(Dockerfile + Compose)
  3. LXCでシステムコンテナを作成し、VMとの違いを体感する
  4. VagrantとCloud-initで自動プロビジョニングを試す
  5. qemu-img でディスクイメージの変換・スナップショットを練習する

この記事が合格への一助になれば幸いです。

ここまでお読みいただきありがとうございます。
ではまた、お会いしましょう。

参考リンク

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?