こんにちは!いつもブログを読んでいただき、ありがとうございます。
今回からは新テーマ、「主題2.06:コンテナ」 に入ります!
「コンテナってDockerのこと?」「仮想マシンと何が違うの?」という疑問、よく聞きます。現代のインフラやクラウドでは欠かせない技術なので、試験対策と合わせてしっかり理解していきましょう。
LinuC 201全体の学習ロードマップはこちらにまとめています♪
前回の仮想化の記事をまだ読んでいない方は、先にそちらで概念を押さえておくとよりスムーズに読めますよ。
内容が多いため、前半・後半の2記事に分けてお届けします。この記事(前半)では コンテナの仕組みと、仮想マシンとの違い を中心に解説します。
まずは、この主題で絶対に外せない「キーワード」を確認しましょう。
| 項目 | 内容 |
|---|---|
| 主題番号 | 2.06.1 コンテナの仕組み |
| 重要度 | 2(5段階中) |
| 頻出キーワード | namespace、cgroups、OverlayFS、コンテナイメージ、コンテナと仮想マシンの違い |
重要度2は試験全体の中では比較的低めです。ただし、概念の理解が問われやすいテーマなので、「3つのLinux技術の役割の違い」だけは確実に押さえておきましょう!
コンテナを学ぶ前に、まず「仮想マシンと何が違うのか」を整理しましょう。ここは試験でも頻出の比較ポイントです!
| 項目 | 仮想マシン(VM) | コンテナ |
|---|---|---|
| OSカーネル | ゲストOSを丸ごと持つ | ホストOSのカーネルを共有する |
| 起動速度 | 遅い(OSの起動が必要) | 速い(秒単位で起動) |
| サイズ | 大きい(GB単位) | 小さい(MB単位) |
| 分離レベル | 強い(完全に独立) | 軽い(カーネルを共有) |
| 代表技術 | KVM、VMware、VirtualBox | Docker、LXC |
★ここがポイント! コンテナは「ホストOSのカーネルを共有する」という点が最大の特徴です。だから軽くて速い反面、カーネルを共有しているため仮想マシンほど強い分離ではありません。
「コンテナ」は1つの技術ではなく、Linuxカーネルの複数の機能を組み合わせて実現されています。試験ではこの3つの役割が問われます!
namespace(名前空間)— プロセスの分離
namespace は、プロセスが見える「世界」を切り分ける技術です。コンテナ内のプロセスから見ると「自分だけのOS環境」のように見えます。
| namespace の種類 | 分離する対象 |
|---|---|
| pid | プロセスID(PID) |
| net | ネットワーク(IPアドレス・ポートなど) |
| mnt | ファイルシステムのマウント情報 |
| uts | ホスト名・ドメイン名 |
| ipc | プロセス間通信(共有メモリなど) |
| user | ユーザーID・グループID |
📝 試験ポイント:「コンテナ内のプロセスを別のプロセスから見えなくする」仕組みとして pid namespace が、「コンテナごとに異なるIPアドレスを持てる」仕組みとして net namespace が問われやすいです。
cgroups(コントロールグループ)— リソースの制限
cgroups(Control Groups) は、プロセスが使えるリソース(CPU・メモリ・ディスクI/Oなど)に上限を設ける技術です。
コンテナA → CPU: 最大50%、メモリ: 最大512MB
コンテナB → CPU: 最大30%、メモリ: 最大256MB
このように、コンテナごとにリソース使用量を制御できます。1つのコンテナがリソースを使い果たしても、他のコンテナに影響が出ないようにするためのしくみです。
📝 補足:現在の主要ディストリビューション(RHEL 8以降・Ubuntu 20.04以降など)では cgroups v2(統合階層)がデフォルト となっています。試験では
cgroupsとして覚えておけばOKです。
★ここがポイント!
- namespace → プロセスの「見え方」を分離する
- cgroups → プロセスの「使えるリソース」を制限する
この2つの役割の違いを混同しないように注意しましょう!
💡 初学者がつまずきやすいポイント:「namespace=分離」「cgroups=制限」を逆に覚えてしまうケースがとても多いです。引っかけ問題でもよく狙われるので、どちらがどちらかをしっかり定着させておきましょう。
OverlayFS(Union File System)— ファイルシステムの層構造
OverlayFS は、複数のファイルシステムを「重ねて」1つのファイルシステムとして見せる技術です。コンテナイメージの「層構造(レイヤー)」を実現するために使われています。OverlayFSは、いわゆる Union File Systemの一種 として実装されています。
┌──────────────────────────────┐
│ 書き込みレイヤー(コンテナ固有) ← 変更はここに書き込まれる
├──────────────────────────────┤
│ イメージレイヤー③(アプリ) │
├──────────────────────────────┤
│ イメージレイヤー②(ライブラリ) │ ← 読み取り専用
├──────────────────────────────┤
│ イメージレイヤー①(ベースOS) │
└──────────────────────────────┘
- イメージレイヤー:読み取り専用。複数のコンテナで共有できる
- 書き込みレイヤー:コンテナ起動時に追加される読み書き可能な層
📝 試験ポイント:イメージレイヤーは読み取り専用で共有されるため、同じイメージから複数のコンテナを起動してもディスク容量を節約できます。コンテナを削除すると、書き込みレイヤーの変更内容は消えます(イメージ自体は残ります)。
📝 補足:DockerではストレージドライバとしてOverlayFSをベースにした
overlay2が一般的に使用されています。試験ではOverlayFSとして出題されますが、実務ではoverlay2という名称でも登場します。
Linuxのコンテナ技術には大きく2種類あります。
| 種類 | 特徴 | 代表 |
|---|---|---|
| OSコンテナ | OS全体をコンテナとして動かす。仮想マシンに近い使い方 | LXC(Linux Containers) |
| アプリコンテナ | 1つのアプリやプロセスを動かすために特化(基本は1コンテナ1プロセスの設計) | Docker |
📝 試験ポイント:LinuC試験では LXC がOSコンテナの代表として出題されます。「LXCはOS全体を1コンテナとして扱う」という点を押さえておきましょう。
📝 補足:現在のコンテナ環境について 現在は Docker だけでなく、containerd や CRI-O といったコンテナランタイムも広く使われています。特にKubernetesでは、Dockerではなく containerd などを直接利用する構成が主流になっています。ただし、LinuC試験対策としてはまず Docker の理解を優先しましょう!
namespace と cgroups の役割の違いなど、概念の混同を狙った問題が多いテーマです。問題集で一度アウトプットしておくと定着度がぐっと上がりますよ!
【PR】▶ スピードマスター LinuCレベル2問題集(白本)
リンク
過去問を解いていて「ここ、引っかかりそう!」と感じたパターンをまとめました。試験直前に見直してくださいね。
| # | 間違いパターン | 正しい理解 |
|---|---|---|
| 1 | 「コンテナはゲストOSカーネルを持つ」 | ❌ ホストOSのカーネルを共有する |
| 2 | 「cgroupsはプロセスを見えなくする技術」 | ❌ それは namespace。cgroupsはリソース制限 |
| 3 | 「namespaceはリソースの上限を設ける技術」 | ❌ それは cgroups。namespaceはプロセスの分離 |
| 4 | 「コンテナを削除するとイメージも消える」 | ❌ 消えるのは書き込みレイヤーのみ。イメージは残る |
| 5 | 「LXCはアプリコンテナだ」 | ❌ LXCはOSコンテナ。アプリコンテナの代表はDocker |
私がメインで使っている参考書と問題集です。よければ一緒に勉強していきましょう(笑)
【PR】▶ あずき本(Linux教科書 LinuCレベル2 Version 10.0対応) 概念や仕組みをしっかり理解したいときの辞書代わりに。まずここで基礎を固めます。
リンク
試験の申し込みはピアソンVUEの受験チケットが便利です。レベル1・レベル2どちらにも使える共通チケットで、楽天市場での購入なので楽天ポイントも貯まってお得ですよ!
【PR】▶ 【ピアソン専用】LinuCレベル1・レベル2・300試験・303試験・304試験共通受験チケット(電子チケット)
リンク
お疲れ様でした!今回のポイントをおさらいしましょう。
仮想マシン vs コンテナ
| 項目 | 仮想マシン | コンテナ |
|---|---|---|
| OSカーネル | ゲストOSを持つ | ホストOSを共有 |
| 起動速度 | 遅い | 速い |
| 分離レベル | 強い | 軽い |
コンテナを支える3つの技術
| 技術 | 役割 |
|---|---|
| namespace | プロセス・ネットワークなどの分離 |
| cgroups | CPU・メモリなどのリソース制限 |
| OverlayFS | ファイルシステムの層構造を実現(Union File Systemの一種) |
コンテナの種類
| 種類 | 代表 | 特徴 |
|---|---|---|
| OSコンテナ | LXC | OS全体をコンテナ化 |
| アプリコンテナ | Docker | 基本1コンテナ1プロセスの設計 |
皆さんにとって、今日も素敵な1日になりますように!
参考:LPI-Japan 公式試験範囲 https://linuc.org/linuc2/range/201.html
※本記事はLinuC レベル2 Version 10.0 の出題範囲をもとに作成しています。