コンテナ 概要¶
コンテナは、アプリケーションとその実行に必要なものをひとまとめにして、隔離されたプロセスとして動かす仕組み。
仮想マシンより軽く、起動が速く、開発環境と実行環境の差を減らしやすいのが強み。
関連ノート:
まず押さえたいこと¶
- コンテナは 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 Docs, What is a container? https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-a-container/
周辺技術の見取り図¶
- Docker: ローカル開発や単体実行で触ることが多い
- containerd / CRI-O: 実行基盤側で使われることが多い
- BuildKit: イメージビルドを高速化・高機能化する仕組み
- Compose: 複数コンテナをローカルでまとめて扱う
- Kubernetes: 複数ホストで本格運用するための基盤
メモ¶
Dockerはよく使うが、コンテナの概念そのものと Docker 製品は分けて考えたほうがよい- 学習順としては
Docker -> Dockerfile -> Compose -> Kubernetesが入りやすい - まずは「イメージを作る」「コンテナを起動する」「ログを見る」「破棄する」ができれば十分
図を入れるなら¶
コンテナと VM の違い、または Image / Registry / Runtime の関係図があると理解しやすい。出典は Docker 公式か OCI 系の一次情報を優先したい。