コンテンツにスキップ

コンテナ 概要

コンテナは、アプリケーションとその実行に必要なものをひとまとめにして、隔離されたプロセスとして動かす仕組み。

仮想マシンより軽く、起動が速く、開発環境と実行環境の差を減らしやすいのが強み。

関連ノート:

まず押さえたいこと

  • コンテナは VM ではなく、ホスト OS のカーネルを共有して動く
  • アプリごとに実行環境を閉じ込めやすい
  • 起動と破棄が速いので、開発・CI/CD・一時実行と相性がよい
  • 永続データはコンテナの外へ逃がす前提で考える

何がうれしいか

  • 環境差異を減らしやすい
  • アプリ単位で依存関係を持てる
  • 検証環境を作り直しやすい
  • イメージ化することで配布しやすい

ざっくり構成要素

  • Image: コンテナの元になる読み取り専用テンプレート
  • Container: Image から起動した実体
  • Registry: Image の保管場所
  • Runtime: コンテナを実際に動かす仕組み
  • Orchestrator: 複数コンテナをまとめて運用する仕組み

どういう場面で使うか

  • ローカル開発環境を揃えたいとき
  • アプリを同じ形で配布したいとき
  • CI でビルドやテストを再現性高く回したいとき
  • マイクロサービスを小さく分けて運用したいとき

VM との違い

  • VM は OS ごと分ける。コンテナはプロセス単位で軽く分ける
  • VM は重いが分離が強い。コンテナは軽いが前提が違う
  • OS レベルで大きく分けたいなら VM、アプリ単位で回したいならコンテナ、という見方がわかりやすい

ざっくり比較図

以下は Docker 公式ドキュメントの説明をもとにした簡易図。

[Virtual Machines]
+---------------------------+
| App A | Bin/Lib | GuestOS |
+---------------------------+
| App B | Bin/Lib | GuestOS |
+---------------------------+
|        Hypervisor         |
+---------------------------+
|       Host Hardware       |
+---------------------------+

[Containers]
+---------------------------+
| App A | Bin/Lib           |
+---------------------------+
| App B | Bin/Lib           |
+---------------------------+
|   Container Runtime       |
+---------------------------+
|      Host OS Kernel       |
+---------------------------+
|       Host Hardware       |
+---------------------------+

出典:

周辺技術の見取り図

  • Docker: ローカル開発や単体実行で触ることが多い
  • containerd / CRI-O: 実行基盤側で使われることが多い
  • BuildKit: イメージビルドを高速化・高機能化する仕組み
  • Compose: 複数コンテナをローカルでまとめて扱う
  • Kubernetes: 複数ホストで本格運用するための基盤

メモ

  • Docker はよく使うが、コンテナの概念そのものと Docker 製品は分けて考えたほうがよい
  • 学習順としては Docker -> Dockerfile -> Compose -> Kubernetes が入りやすい
  • まずは「イメージを作る」「コンテナを起動する」「ログを見る」「破棄する」ができれば十分

図を入れるなら

コンテナと VM の違い、または Image / Registry / Runtime の関係図があると理解しやすい。出典は Docker 公式か OCI 系の一次情報を優先したい。