Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コンテナアーキテクチャ詳細解説
Search
Yuto Sasaki
October 14, 2026
15
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コンテナアーキテクチャ詳細解説
Yuto Sasaki
October 14, 2026
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
Side Projects
sachag
456
43k
Building AI with AI
inesmontani
PRO
1
1.3k
Typedesign – Prime Four
hannesfritz
42
3.2k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
So, you think you're a good person
axbom
PRO
2
2.2k
Transcript
コンテナアーキテクチャ詳細解説 コンテナ技術の内部構造 仮想化の基礎からイメージビルド・OCI仕様まで 1
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 2
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 3
コンテナアーキテクチャ詳細解説 1. 仮想化の定義 仮想化の定義 ソフトウェアによってハードウェア(CPU、メモリ、ディスク等)を論理的に分割・ 統合し、実際とは異なる構成の独立したシステムとして見せかける技術 4
コンテナアーキテクチャ詳細解説 1. 仮想化の利用例 例1:リソースの有効活用 課題: 64コアのCPU、256GBのメモリを持つ高性能な物理サーバーで、小さな社内 システム1つだけを動かすのはリソースの無駄 解決策: ハードウェアを論理的に分割し、複数のシステム(Webサーバー、DBサー バー、メールサーバー等)を相乗りさせて稼働率を上げる
例2:環境の分離(システムライブラリ競合の回避) 課題: 1つのOSに複数アプリを入れると、依存するシステムライブラリ(例: OpenSSLやglibc)のバージョンが衝突することがある。アプリAのためにOSのラ イブラリを更新すると、古いライブラリに依存するアプリBが動かなくなる 解決策: 仮想化技術を用いてファイルシステムや環境を分離し、互いに干渉しない 安全な独立空間をアプリケーションごとに確保する 5
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 6
コンテナアーキテクチャ詳細解説 2. 仮想化の3つの方法 ITスタック(ハードウェア → OS → アプリケーション)のどの階層でソフトウェアに よる抽象化を行うかによって、アーキテクチャは大きく3つに分類される 1.
ホストOS方式 2. ハイパーバイザ方式 3. コンテナ方式 これらについて、具体的なユースケースとともに比較する 7
コンテナアーキテクチャ詳細解説 2. ホストOS方式(ハイパーバイザ Type2) ホストOS上の1つのアプリケーションとして仮想化ソフトウェアを動かす +-------+ +-------+ | App A
| | App B | +-------+ +-------+ |GuestOS| |GuestOS| <+-------+ +-------+ | VirtualBox | <+-----------------+ | Host OS | <+-----------------+ | Hardware | +-----------------+ 等 仮想化ソフトの上で独立したOSが動く 仮想化ソフトウェア 物理マシンのOS (Windows, macOS等) メリット: デスクトップ環境などで手軽に構築・検証ができる デメリット: ホストOSとゲストOSの二重処理が発生し、非常に重くリソースを多 8 く消費する
コンテナアーキテクチャ詳細解説 2. ハイパーバイザ方式 ハードウェア直上にハイパーバイザを配置し、直接ゲストOSを稼働させる +-------+ +-------+ | App A |
| App B | +-------+ +-------+ |GuestOS| |GuestOS| <+-------+ +-------+ | Hypervisor | <- ESXi, KVM, Hyper-V +-----------------+ | Hardware | +-----------------+ ハイパーバイザの上で独立したOSが動く 等 メリット: OSレベルで完全に独立しているため分離性が高く、安全(本番環境向 け) デメリット: ゲストOSの起動に時間がかかり(数分)、リソースの事前確保が必要 9
コンテナアーキテクチャ詳細解説 2. コンテナ方式 ホストOSのカーネルを共有してプロセス空間だけを隔離する +-------+ +-------+ | App A |
| App B | <+-------+ +-------+ | Cont. | | Cont. | +-------+ +-------+ | Container Engine| <- Docker, containerd +-----------------+ | Host OS | <- Linux +-----------------+ | Hardware | +-----------------+ 隔離されたただのプロセス 等 カーネルを全コンテナで共有 (Windowsの場合はWSL2等の軽量VMを経由) メリット: OS起動プロセスがないため数ミリ秒で起動し、メモリ消費も極めて少 なく高密度に集約できる デメリット: ホストOSのカーネルに依存するため、原則としてLinuxコンテナは 10 Linuxカーネル上でしか動かない
コンテナアーキテクチャ詳細解説 2. アーキテクチャ比較まとめ ホスト 方式 [ OS ] +-------+ +-------+
| App A | | App B | +-------+ +-------+ |GuestOS| |GuestOS| +-------+ +-------+ | VirtualBox | +-----------------+ | Host OS | +-----------------+ | Hardware | +-----------------+ 等 ・手軽だが高負荷 ハイパーバイザ方式 [ ] +-------+ +-------+ | App A | | App B | +-------+ +-------+ |GuestOS| |GuestOS| +-------+ +-------+ | Hypervisor | +-----------------+ | | | Hardware | | | +-----------------+ / ・分離性が高い 本番向け コンテナ方式 [ ] +-------+ +-------+ | App A | | App B | +-------+ +-------+ | Cont. | | Cont. | +-------+ +-------+ | Container Engine| +-----------------+ | Host OS | +-----------------+ | Hardware | +-----------------+ / / ・軽量 高速 高集約 11
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 12
コンテナアーキテクチャ詳細解説 3. コンテナ技術の概要 コンテナとコンテナエンジンの役割 コンテナ 主要なLinuxカーネル機能(Namespace, cgroups, OverlayFSなど)を利用して構築 される隔離された実行環境の概念。実態はホストOS上で動く単なるプロセス コンテナエンジン
複雑なカーネル操作を隠蔽し、コンテナのライフサイクル(作成・起動・停止) やイメージの管理を行うソフトウェア (例: Docker Engine, containerd, Podmanなど) 13
コンテナアーキテクチャ詳細解説 3. コンテナ技術の概要 Dockerと標準化 (OCI) Docker コンテナ技術を広く普及させた代表的なプラットフォーム OCI (Open Container
Initiative) コンテナのイメージフォーマットやランタイムの標準規格。現在はこの標準化が 進んでおり、Kubernetes内部ではcontainerdが使われるなど、Docker以外のツール も広く普及している 14
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 15
コンテナアーキテクチャ詳細解説 4. システム独占の錯覚 コンテナの実態はホストOS上で動く単なるプロセスだが、コンテナ内のプロセスから は自分専用のOS環境(ファイルシステム、ネットワーク、権限)を完全に独占してい るように見える。 これにより、仮想マシン(VM)のような高い独立性と安全性を確保しつつ、プロセス としての軽量さと速さを両立している。各アプリケーションは他のシステムから完全 に分離された独立空間で稼働する。 16
コンテナアーキテクチャ詳細解説 4. 隔離による開発・運用のメリット (1/2) ネットワークポートの競合回避 具体例: コンテナ内では常に自身が80番ポートを独占していると認識する。外 部からのアクセスは、ホスト側でポートマッピング(例: ホストの8080番 →
コンテナAの80番)を行うことで競合を回避し、安全に複数起動できる 依存関係の完全分離 具体例: コンテナAは /usr/bin/python をPython 2として、コンテナBは Python 3として認識する。ファイルシステムが独立しているため、ホスト環境 を汚さずに衝突を防ぐことができる 17
コンテナアーキテクチャ詳細解説 4. 隔離による開発・運用のメリット (2/2) 設定ファイルの単純化 具体例: コンテナ内では常に自身が唯一のユーザー(ルート権限)として振る 舞える。そのため、ホスト上の他のユーザー権限を考慮する必要がなく、デ ィレクトリ権限などの設定が極めてシンプルになる 18
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 19
コンテナアーキテクチャ詳細解説 5. Namespace (プロセスIDの隔離) システム独占の錯覚を技術的に作り出しているのが、Linuxカーネルの Namespace (名前空間) 機能。プロセスから参照できるシステムリソースを論理的に分割し、他 の空間を隠蔽する。 PID
Namespace (プロセスID) ホストOS上から確認すると、コンテナ内のプロセス(例: Nginx)は「PID: 15234」のようなホスト上の1プロセスとして見える しかし、コンテナ内部から確認すると、Nginxは「PID: 1(システムで最初に 起動したプロセス)」として表示され、ホスト側の他のプロセスは一切見えな くなる 20
コンテナアーキテクチャ詳細解説 5. Namespace (ネットワークの隔離) Network Namespace (ネットワーク) ネットワークリソース(インターフェース、IPアドレス、ルーティングテーブ ル等)を隔離する ホストOSが持つNIC(ネットワークカード)とは別に、コンテナ専用の仮想
NIC(例: eth0 )や独自のIPアドレス(例: 172.17.0.2 )を割り当てる。こ れにより、コンテナは専用のネットワーク環境を持っているように振る舞う 21
コンテナアーキテクチャ詳細解説 5. Namespace (マウントポイントの隔離) Mount Namespace (マウント・ファイルシステム) ホストのファイルシステムツリーを見えなくし、コンテナ固有のルートディレ クトリ( /
)を割り当てる これにより、コンテナ内からは自身に割り当てられた専用のファイルシステ ムしか見えなくなり、ホストの重要ファイルや他のコンテナのデータを不用 意に触ってしまうことが物理的に不可能になる 22
コンテナアーキテクチャ詳細解説 5. cgroups (リソースの制限) Namespaceが空間の隔離(見えなくする機能)であるのに対し、cgroups(Control Groups) はリソースの制限を行うLinuxカーネル機能。 CPUやメモリの利用上限を設定 コンテナの実態はプロセスであるため、放置するとホストのCPUやメモリを 食いつぶしてしまう可能性がある(ノイジー・ネイバー問題)
cgroupsを使うことで、「このコンテナはメモリを最大512MBまでしか使えな い」「CPUリソースの20%しか使えない」といった物理的なリソースの上限を 厳格に設定し、システムの安定稼働を担保する 23
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 24
コンテナアーキテクチャ詳細解説 6. ファイルシステム OverlayFSの仕組み (1/2) Mount Namespaceでコンテナに割り当てられるルートディレクトリは、Linuxカーネル の機能である OverlayFS によって構築される。
これは複数の異なるディレクトリを透過的に重ね合わせて、1つのディレクトリとして 見せる技術。 ディレクトリ重ね合わせの基本構造 上層 (読書可能): プロセス用の空ディレクトリ(コンテナ起動時の使い捨て層) 中層 (読取専用): アプリケーション等がインストールされた差分ディレクトリ 下層 (読取専用): ベースとなるOS環境ディレクトリ プロセスが / にアクセスすると、これらが下から順に結合された状態で表示される。 25
コンテナアーキテクチャ詳細解説 6. ファイルシステム OverlayFSの仕組み (2/2) 具体例:Ubuntu環境にNode.jsを追加した場合 上層 (読書可能): ログの出力や一時ファイルの作成など、コンテナ稼働中の変更が すべて書き込まれる層
中層 (読取専用): Node.jsのインストールによって追加された /usr/local/bin/node などのファイル群が含まれる層 下層 (読取専用): Ubuntuの基本ファイルである /bin/bash や /etc/apt/ などが 含まれる層 これらが透過的に重なることで、コンテナ内のプロセスからは、Ubuntu環境にNode.js がインストールされた単一のファイルシステムとして認識される。 26
コンテナアーキテクチャ詳細解説 6. Copy-on-Write (CoW) と 削除マーカー Copy-on-WriteとWhiteout(削除マーカー) 下層にあるファイルをコンテナ内で変更・削除しても、下層のファイル自体は変 化しない。最上層に変更分が書き込まれるか、「ファイルが削除された」という特 殊なマーカーファイル(Whiteout)が置かれ、プロセスから見えなくなるだけであ
る メリット 下層のイメージレイヤは常に不変(イミュータブル)に保たれるため、複数コン テナ間でベースイメージを安全に共有でき、ディスク容量を節約できる。コンテナ を破棄すれば最上層の変更分も消え、常にクリーンな状態から起動できる 27
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 28
コンテナアーキテクチャ詳細解説 7. コンテナイメージとは何か? これまで見てきたように、コンテナを起動・隔離するためには、ベースとなるファイ ルシステムや環境変数などの設定が必要となる。 これらを他のマシンでも再利用可能な形でパッケージングしたものがコンテナイメー ジである。 コンテナイメージは単一のバイナリファイル( .exe や
.iso 等)ではない。 標準規格(OCI: Open Container Initiative)に基づくファイル群の論理的な集合体として 構成される。 29
コンテナアーキテクチャ詳細解説 7. コンテナイメージの実体(tarとJSON) イメージを構成する実体は、大きく分けて以下の2つの要素となる。 1. tarファイル群 (Layer Blob) ビルド工程で作成された各レイヤ(ディレクトリの差分ファイル群)を、それぞ れ個別の
tar.gz 形式に圧縮したもの 2. JSONファイル (Config & Manifest) コンテナ起動時の環境変数や実行コマンド、そして「どのtarファイルを、どうい う順番で下から重ね合わせるか」を定義した設定ファイル これらが同一領域で管理された状態を、総称してコンテナイメージと呼んでいる。 30
コンテナアーキテクチャ詳細解説 7. コンテンツアドレス (CAS) による管理 これらのファイル(tar.gzやJSON)は、ディスク上でコンテンツアドレス(CAS: Content-Addressable Storage)方式で管理される。 ファイル名はハッシュ値 「ubuntu_base.tar」といった人間が読める名前ではなく、ファイルの中身から計
算された SHA256 ハッシュ値(例: sha256:e6924... )がそのままファイルネー ムになる 改ざん防止と重複排除 中身が1バイトでも変わればハッシュが変わるため、改ざんを確実に検知できる。 また、別のイメージでも全く同じ内容のレイヤ(例: apt-get 済みの同じベース環 境)を持っていれば同じハッシュ値になるため、ディスク容量を自動で節約(重 複排除)できる 31
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 32
コンテナアーキテクチャ詳細解説 8. イメージはどうやって作られるか (Dockerfile) コンテナのベースとなるイメージの実体(tarとJSONの集合体)は、通常 Dockerfile を用いてビルド(構築)される。 Dockerfileの命令の1行1行が、1つのOverlayFSレイヤ(tar.gz)に対応して生成されて いく。 具体的なビルドの流れ
1. FROM ubuntu:22.04 (ベースOSのレイヤを取得し配置する) 2. RUN apt-get install -y nginx (一時的にコンテナを起動してNginxをインスト ールし、追加されたファイル群だけの差分レイヤを作る) 3. COPY index.html /var/www/html/ (ホストからファイルをコピーし、そのファイ ルの差分レイヤを作る) 33
コンテナアーキテクチャ詳細解説 8. ビルドにおけるキャッシュ技術 ビルドツールは、各命令を実行した結果(生成されたレイヤのハッシュ値)を保存し ている。 キャッシュの再利用 再度ビルドを実行した際、Dockerfileの命令と関連するファイル群に変更がなけれ ば、保存済みのレイヤをそのまま使い回す 具体例とメリット ソースコード(
COPY の対象)だけを修正して再度ビルドした場合、時間のかか る apt-get install などのベース構築レイヤは以前のものが再利用され、ソース コードをコピーする最後のレイヤだけが新しく作り直される。これにより、開発 中の極めて高速なビルドが可能になる 34
コンテナアーキテクチャ詳細解説 アジェンダ 1. 仮想化とは なぜ必要なのか 2. 仮想化の3つの方法 3. コンテナ技術の概要 4.
隔離によるシステム独占の錯覚 5. 隔離を実現するカーネル機能(Namespace・cgroups) 6. ファイルシステム(OverlayFS) 7. コンテナイメージの実体(tarとJSON) 8. イメージのビルドプロセス 9. まとめ 35
コンテナアーキテクチャ詳細解説 9. コンテナアーキテクチャの技術的まとめ (1/2) 1. コンテナの本質 ゲストOSを持たず、Linuxカーネルを共有しながらホストOS上で稼働する隔離さ れたただのプロセス 2. 隔離機能
(Namespace / cgroups) カーネルレベルでPID、Network、Mount等のシステムリソースを論理的に分割して システムを独占していると錯覚させ(Namespace)、CPUやメモリのリソース利用 上限を制限する(cgroups) 36
コンテナアーキテクチャ詳細解説 9. コンテナアーキテクチャの技術的まとめ (2/2) 3. ファイルシステム (OverlayFS) イミュータブル(不変)な読み取り専用レイヤ群と使い捨ての最上層レイヤを透 過的に重ね合わせ、Whiteout(削除マーカー)等を用いて効率的かつ安全なファ イルシステムを構築する
4. イメージ管理とビルド (OCI / CAS) Dockerfileの行ごとに抽出した差分(tar.gz)をハッシュ値ベースで保存し、重ね合 わせの手順を定義したJSONと紐付けることでイメージを構成する。これにより差 分ビルドや重複排除を実現している 37