はじめに
こんばんは、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:完全仮想化)
必ず覚えるべき項目(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:デプロイ・プロビジョニング)
おわりに
LPIC-3 305は virsh(libvirt) と Docker がWeight 9で最重要です。この2つだけで試験全体の約30%を占めます。
加えて、コンテナ仮想化の概念(名前空間・cgroups)とLXCもWeight 6〜7と高く、仮想化の理論的な理解も問われます。
学習の進め方としては:
KVM/QEMUの環境を構築し、virshコマンドを徹底的に練習する
DockerでWebアプリのコンテナ化を実践する(Dockerfile + Compose)
LXCでシステムコンテナを作成し、VMとの違いを体感する
VagrantとCloud-initで自動プロビジョニングを試す
qemu-img でディスクイメージの変換・スナップショットを練習する
この記事が合格への一助になれば幸いです。
ここまでお読みいただきありがとうございます。
ではまた、お会いしましょう。
参考リンク