コンテナ

コンテナとは こんてなとは

コンテナ仮想化Docker隔離namespacecgroup
コンテナとは何か教えて

簡単に言うとこんな感じ!

アプリと、そのアプリが動くために必要な設定・ライブラリを「箱(コンテナ)」に全部まとめて持ち運べるようにした仕組みだよ。「自分のPCで動いてたのに本番サーバーで動かない」問題を解決した技術なんだ!


コンテナとは

コンテナ(Container)は、アプリケーションと、それが実行に必要なすべての依存関係(ライブラリ・設定ファイル・ランタイム)を一つの軽量な実行環境にパッケージングする技術です。コンテナはホストOSのカーネルを共有しながら、プロセスnamespacecgroupという仕組みで互いに隔離します。

仮想マシン(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カーネルレベル)

コンテナとVMの構造比較 コンテナ 仮想マシン(VM) アプリA アプリB コンテナランタイム(Docker) Host OS(Linuxカーネル共有) 物理サーバー App Guest OS App Guest OS Hypervisor Host OS 物理サーバー

関連する規格・RFC

規格内容
OCI Runtime Specificationコンテナランタイムの標準仕様
OCI Image Specificationコンテナイメージフォーマットの標準
cgroup v2Linuxリソース制御の最新版仕様

関連用語