# Docker
[[LXC]] のメカニズム(namespace・cgroup)に基づき、Linux カーネルでプロセスを共有 OS 上で隔離する事実上の標準コンテナソリューション。Docker イメージは Linux 仮想化スタックと同様にレイヤー化されたファイルシステムで構成され、union mount により読み書き可能な top layer(コンテナ本体)を読み取り専用ベースイメージの上に重ねる。複数の読み取り専用ファイルシステムを積み重ねてベースイメージから新規イメージを構築でき、これがイメージリポジトリベースの自動化されたアプリケーションパッケージング・プロビジョニングを可能にする。([[@2019__TCC__Cloud Container Technologies - A State-of-the-Art Review]])
Bernstein([S5])はガバナンスの観点から「Docker(スタートアップ Docker 社)と Kubernetes(Google 主導)のより中立な協働構造が、共通パッケージング/デプロイ標準合意のために必要」と論じる。Docker の成功要因はオープンソース化と早期リリース、豊富なイメージリポジトリエコシステム、コミュニティサポートに帰せられる。
本論文(2017 公開)時点で、Docker は LXC を凌駕する研究関心の中心となり、コンテナ単体研究を活性化させた事実上の reference technology だった。
## ISPASS 2015 時点の性能特性
Felter ら([[@2015__ISPASS__An Updated Performance Comparison of Virtual Machines and Linux Containers]])は Docker 1.0(2014年7月)の性能を IBM FlashSystem 840 搭載の Intel Sandy Bridge-EP サーバ上で KVM と比較した。
- **ネイティブ≈Docker**: CPU(Linpack)・メモリ帯域(STREAM)・シーケンシャル I/O はほぼ同等
- **ランダム I/O**: Docker ≈ ネイティブ(IOPS・レイテンシとも)。KVM は QEMU 経由のオーバーヘッドで約 50% 低下
- **ネットワーク NAT のコスト**: Docker NAT(veth pair + bridge + NAT)は高パケットレートで Redis スループット約 15% 低下・遅延増加。Docker net=host ならネイティブと同等
- **AUFS のコスト**: Docker NAT + AUFS(デフォルトストレージドライバ)の MySQL は NAT volume より ~8% 追加低下。volume(ホスト直結)を使えば回避できる
コンテナ起動時間は KVM(11秒)に対し Docker は 1秒未満と大幅に速い(定常性能ではなく起動レイテンシの差)。
## Linux カーネル攻撃面との関係
Docker コンテナはホスト OS の Linux カーネルを共有するため、Linux カーネル自体の脆弱性が全コンテナとホストに影響する攻撃面となる。APSys ’23 の Container Transplantation 論文([[@2023__APSys__Reducing Attack Surface with Container Transplantation for Lightweight Sandboxing]])は、この攻撃面を軽減するために Linux コンテナを FreeBSD カーネルへ移植し、FreeBSD の Capsicum サンドボックスを透過適用するアプローチを提案している。
## 関連
- ソース: [[@2019__TCC__Cloud Container Technologies - A State-of-the-Art Review]] / [[@2015__ISPASS__An Updated Performance Comparison of Virtual Machines and Linux Containers]]
- エンティティ: [[LXC]] / [[Kubernetes]] / [[CNCF]] / [[Wes Felter]] / [[IBM Research]]
- 概念: [[コンテナオーケストレーション]] / [[マイクロサービスアーキテクチャ]] / [[コンテナ配置最適化]] / [[コンテナ仮想化]]
## 出典
- [[@2019__TCC__Cloud Container Technologies - A State-of-the-Art Review]](§2.1 Container Technology Principles、§5.2.5 Container Technologies)
- [[@2015__ISPASS__An Updated Performance Comparison of Virtual Machines and Linux Containers]](Docker 1.0 の性能特性の詳細)