Dockerメモ
改めてDockerの本を読んでいるのでメモ
Dockerコンテナのアーキテクチャ
コンテナ毎に空間を分離してくれる
- ただしLinuxの基盤上でWindowsのコンテナを動かすことは出来ない
- コンテナにはLinuxコンテナ(LXC)というものがあり、古いバージョンのDockerはLXCの機能を利用していた
- LXDというものが最近出てきた
- 現在のDockerはlibcontainerというドライバを利用しており、LXCには依存していない(Docker0.9以上)
- Dockerはプロセスレベル、ファイルシステムレベルでの分離を行う
ハイパーバイザー型とコンテナ型の違い
- ハイパーバイザー型は自身のゲストOS上のMBR領域に対してブートローダーをインストールする等の必要がある(物理OSを起動する時と同じような感じ)、コンテナ型はそういったものがないため、起動・停止が非常に高速。
- ハイパーバイザー型はハードウェアをエミュレーションしているが、コンテナ型は名前空間とcgroupを利用してコンテナがプロセスとして稼働するだけなので、リソースが少なくて済む
- コンテナ型はアプリケーションが分離されるが、ホストOS環境から直接実行されるため、ホストOSと同等の性能を発揮出来る
名前空間
- プロセスでの分離が出来る、分離した空間同士を見えないように制御を行う
- 名前空間にはいくつか種類があり、名前空間ごとにハードウェアリソースを割り当てているのがcgroup
- Dockerコンテナを立ち上げると、ipc/mnt/net/pid/user/utsの名前空間が作られる
Docker導入準備
コンテナ専用OS
- コンテナを稼働させること以外のパッケージやアプリケーションは極力排除されている、サーバーOSと比較してセキュリティ・性能面などで優位性がある
- CoreOSとかPorject Atomicとか