コンテナとは こんてなとは
コンテナ仮想化Docker隔離namespacecgroup
コンテナとは何か教えて
簡単に言うとこんな感じ!
アプリと、そのアプリが動くために必要な設定・ライブラリを「箱(コンテナ)」に全部まとめて持ち運べるようにした仕組みだよ。「自分のPCで動いてたのに本番サーバーで動かない」問題を解決した技術なんだ!
コンテナとは
コンテナ(Container)は、アプリケーションと、それが実行に必要なすべての依存関係(ライブラリ・設定ファイル・ランタイム)を一つの軽量な実行環境にパッケージングする技術です。コンテナはホストOSのカーネルを共有しながら、プロセスをnamespaceとcgroupという仕組みで互いに隔離します。
仮想マシン(VM)と異なり、コンテナはゲストOSを持ちません。そのため、VMに比べてはるかに起動が速く(秒〜ミリ秒)、リソース消費が少ないのが特徴です。
コンテナの最大の価値は環境の一貫性です。開発者のノートPC・CIサーバー・本番クラウドなど、どこで実行してもまったく同じ環境で動きます。「自分の環境では動いた(It works on my machine)」問題を根本的に解決します。
コンテナ vs 仮想マシン
| 項目 | コンテナ | 仮想マシン(VM) |
|---|---|---|
| OS | ホストOSカーネルを共有 | 独立したゲストOSを持つ |
| 起動速度 | 秒〜ミリ秒 | 数十秒〜数分 |
| サイズ | 数MB〜数百MB | 数GB |
| 分離レベル | プロセスレベル | ハードウェアレベル |
| 密度 | 高(1ホストに100+) | 低(1ホストに数十) |
| セキュリティ | 共有カーネルのため若干低 | 強い分離 |
コンテナを支える Linux 技術
- namespace — プロセス・ネットワーク・ファイルシステムなどの分離
- cgroup(Control Groups) — CPU・メモリ・ディスクIOなどのリソース制限
- Union File System — 読み取り専用レイヤーを積み重ねて軽量なイメージを実現
歴史と背景
- 2000年 — FreeBSD Jailsがコンテナ概念の先駆け
- 2008年 — LinuxカーネルにLXC(Linux Containers)が統合
- 2013年 — DockerがリリースされLXCを使いやすくラップ。コンテナが一気に普及
- 2014年 — KubernetesがGoogleによりオープンソース化
- 2015年 — OCI(Open Container Initiative)設立。コンテナ標準化が加速
- 現在 — コンテナは現代のソフトウェア開発・デプロイの標準技術に
コンテナの仕組み(Linuxカーネルレベル)
関連する規格・RFC
| 規格 | 内容 |
|---|---|
| OCI Runtime Specification | コンテナランタイムの標準仕様 |
| OCI Image Specification | コンテナイメージフォーマットの標準 |
| cgroup v2 | Linuxリソース制御の最新版仕様 |
関連用語
- Docker — コンテナを普及させた代表的なプラットフォーム
- コンテナイメージ・Dockerfile — コンテナの設計図
- Kubernetes — コンテナを大規模に管理するオーケストレーター
- OCI(Open Container Initiative) — コンテナの標準化団体