# [コンテナの歴史]Dockerができるまで 第二回 〜集合知を集めて歴史を知ろう〜
## 目的(ゴール)
- 時代や目的・背景を知って、コンテナについて理解を深める。
- どのような構成要素によってDockerが作られているかを知る。
## 自己紹介
### Sayaka
- 名前:さやか
- twitter:@flower_norn
- 趣味:
- 旅行
- 星空鑑賞、
- 自作PC(水冷)、
- カメラ ...etc
- 職業:
- ネットワークエンジニア上がりの広く薄くできる何でも屋さん。
- 最近はMS(Azure, AD, MBAM,SCCM..etc)がメイン。
## 事前にお伝えしておくこと
- Dockerの歴史は、コンピューターの歴史、仮想化の歴史とも言えます。
- 音声通話・チャットでの優しいまさかりを受け付けています。
- ※一緒に話に乗ってくれる方も募集しています。
## 仮想化・コンテナ化の歴史における解決したい永遠のテーマ
- 目的・背景
- 貴重なリソース(当時は高価だった)をいかに効率よく使用するか
- セキュアな環境の確保
## 前回の振り返り
### 1972
- IBM VM/370 (OS)
- 初の仮想化機能が実装
- https://en.wikipedia.org/wiki/Logical_partition
### 1974
- PopekとGoldbergの仮想化要件 (論文)
- 仮想化を実現するための十分条件
### 1979
- chroot(2) システムコールの Version 7 Unix への導入
- 特定のディレクトリを疑似的に別の環境に見せる仕組み
### 1982
- chroot(2) システムコールの BSD4.2 への導入
前回は1970年~1990年までお話ししました。
## 本編
### 1991
-
### 1992
### 1993
-
### 1994
-
### 1995
-
### 1996
-
### 1997
-
### 1998
-
### 1999
- Virtuozzo(OpenVZの前身)のファーストステップ
- コンテナ仮想化の新しい方向性を提案
### 2000
- FreeBSD jail が FreeBSD 4.0 に導入 (Feature)
- 機能
- UNIXに古くから存在するchrootを発展させたもの
- 管理者がFreeBSDベースの計算機システムをjailと呼ばれる独立した小さなシステムに分割できるようになる
- 用途
- 脆弱性などの懸念があるソフトウェアを安全にホスト環境へ影響を与えないように動作させたいとき
- システム管理者がシステムの一部の権利を委譲したいとき
http://blog.livedoor.jp/dankogai/archives/51916648.html
- Virtuozzo のプロジェクトが発足
### 2001
- Linux VServer
- 機能
- jailと同じ機構を持ったシステム
- LinuxカーネルにOSレベルの仮想化機能を追加することで実装されたバーチャル・プライベート・サーバ
- 「独立性とセキュリティの高い単一のボックスに複数の汎用Linuxサーバーを動作させる」ことができる。
- 背景
- ありがとうございます
-
### 2002
- Mount namespaces
- 機能
- ファイルシステムツリーを分離する。
- 異なる名前空間のファイルシステムにアクセスできないようにする。
- 全てのユーザースペースはDockerイメージからマウントされる。
- chroot は使用しない
- 機能(tenforward提案)
- マウント操作、マウントポイントの分離
- 異なる名前空間で行ったマウント処理は他から見えないようにできる
- 他の名前空間から見えるようにもできる
- ファイルシステムツリーの独立性とは独立した概念
- 背景
- a
### 2003
- Google
- The Borg System(Google)
https://storage.googleapis.com/pub-tools-public-publication-data/pdf/43438.pdf
- Xen
- The first stable Xen release
https://sourceforge.net/p/xen/mailman/message/5533663/
### 2004
- Solaris Containers(Zone) 登場
https://en.wikipedia.org/wiki/Solaris_Containers
- 機能
- Solaris 上のコンテナ技術
- ゾーンによって提供されるシステム資源制御と境界分離の組み合わせ
- ゾーンは、単一のオペレーティングシステムインスタンス内で完全に分離された仮想サーバーとして機能
- 背景
- コストを削減し、1台のマシン上の別々のマシンの保護を提供
-
```
Zone 開発エピソード
「Zone の元々のアイディアは、数年前に、我々がサーバの統合について顧客と話を
していた時に始まりました。 その時点で、Solaris OS には、いくつかのリソース
管理機能、例えば、管理者が異なるアプリケーションに対して、どのように CPU を
割当てるかを制御できるようにする、といった機能が追加されていました。
顧客は、自分たちのサーバの利用率を向上させることに、とても興味はあったのだけど、
ひとつのマシン上で複数のアプリケーションを"stack"したり、統合することができな
かった。 その原因のうちいくつかは、リソース割当てに関するものだったが、多くのと
ころは、アプリケーションを、configuration, security, そして administrationの
点においても独立させる必要があったからでした。
これらの問題を解決するために、開発したのがZoneなのです。」
```
### 2005
- OpenVZ プロジェクト発足
- 商用のコンテナソフトウェアである Virtuozzo の OSS 版として
- OpenVZ (Feature)
- 機能
- Linuxカーネルをコンテナー間で共有ができる。
- カーネルを共有しつつ隔離した空間を作成できる。現在「コンテナ」と呼ばれる環境と同じと考えて良い
- 背景
-
- 現在使われているサービス
- NTTPC WebArena
- AUFSの原案が発案 (FileSystem)
- 機能
- Linux のファイルシステムサービスであり、複数の異なるファイルシステム (ブランチと呼ばれる) のファイルやディレクトリ同士を透過的に重ねる (マージする) ことができる技術である
- 背景
-
-
- Xen
- UML - skas0 - separate kernel address space on stock hosts
https://lwn.net/Articles/142494/
### 2007
- Solaris LDoms
- Local Domain
Logical Domains (LDoms or LDOM) is the server virtualization and partitioning technology for SPARC V9 processors. It was first released by Sun Microsystems in April 2007
### 2013
- Omega (google)
- Omega: flexible, scalable schedulers for large compute clusters – Google AI https://ai.google/research/pubs/pub41684
### 2014
- Kubernetes の公開
- Google Cloud Platform Blog: An update on container support on Google Cloud Platform
https://cloudplatform.googleblog.com/2014/06/an-update-on-container-support-on-google-cloud-platform.html
### 2015
- Kubernetes
- v1.0のリリース
Kubernetesがv.1.0に到達、Googleは新組織Cloud Native Computing Foundationに技術を寄贈 | TechCrunch Japan https://jp.techcrunch.com/2015/07/22/20150721as-kubernetes-hits-1-0-google-donates-technology-to-newly-formed-cloud-native-computing-foundation-with-ibm-intel-twitter-and-others/
## special thanks
- 勉強会に参加してくださった皆様
## 必要基礎技術
~~- リングプロテクション
https://ja.wikipedia.org/wiki/リングプロテクション~~
- namespace
- cgroup
- netns
- User Mode Linux
https://ja.wikipedia.org/wiki/User_Mode_Linux
- LXC
https://ja.wikipedia.org/wiki/LXC
- Linux VServer
https://ja.wikipedia.org/wiki/Linux-VServer
- Xen
https://ja.wikipedia.org/wiki/Xen_(仮想化ソフトウェア)
```mermaid
graph TD;
TimeShareingSystem-->VM/370;
VM/370-->LogicalPartition;
LogicalPartition--> SolarisLocalDomain;
LogicalPartition --> Xen;
LogicalPartition --> VMware;
LogicalPartition --> KVM;
VM/370-->chroot;
chroot-->Jail;
Jail-->Virtuosso;
Jail-->SolarisZone/Container;
chroot--> LinuxVServer;
Jail-->Lguest;
LinuxVServer-->UserModeLinux;
```
## referenced of Links the historical
[Namespace](https://lwn.net/Articles/531114/)
[AUFS](http://aufs.sourceforge.net/History)
[A Brief History of Containers: From the 1970s to 2017](https://blog.aquasec.com/a-brief-history-of-containers-from-1970s-chroot-to-docker-2016)
[Linux namespaces](https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Linux_namespaces.html)
[Plan 9 from Bell Labs](https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/Plan_9_from_Bell_Labs.html)
[The History of Container - Redhat Blog]: https://rhelblog.redhat.com/2015/08/28/the-history-of-containers/
https://www.kishiro.com/FreeBSD/jail.html
[OpenVZ]: https://wiki.openvz.org/History
[Parallels: : SWsoft Releases Virtuozzo 2.0, Bringing Mainframe-Inspired Functionality to Intel-Based Servers]: http://www.odin.com/news/id,6987
[Announce: many virtual servers on a single box]:
http://lkml.iu.edu/hypermail//linux/kernel/0110.1/0909.html
[The first stable Xen release]:
https://lwn.net/Articles/52033/
[FreeBSD jail]:
http://phk.freebsd.dk/pubs/sane2000-jail.pdf
----
### memo
- vertualizationの登場
- chrootの登場
- namespaceの登場
- jailの登場