Beyond The Limit

はじまりは2001年

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とか

Dockerにおけるドライバ

  • Dockerのバックエンドの仕組みとして、コンテナの生業を行う実行ドライバ、ファイルシステム関連の制御を行うストレージドライバの2種類がある
  • 実行ドライバは名前空間やcgroupを利用するのに必要
  • Dockerシステムの裏側で動作するバックエンドの実行ドライバーとしてlibcontainerがある
  • Docker0.9から組み込まれているので、DockerとLinuxカーネルの間にLXCなどのドライバを挟まなくても良くなった