dockerの機能、利点についてまとめます。
dockerが使用している技術
dockerはコンテナによる仮想化方式を提供しているが、それらはdockerがフルスクラッチで作ったものではない。(つまり、Linuxの機能をdockerが使っている。)
代表的な機能
- LXC (Linux Container)
- namespaces (プロセスの分離)
- cgroups (コンテナのリソース制御)
- AUFS (コンテナイメージの差分管理)
これらの機能はLinuxで提供されるものを使用するため、それを提供するKernelのバージョンに依存する。
dockerのメリット
- ゲストOSはホストのKernelを直接使用するためオーバヘッドが小さく高速
- ゲストOSがそれぞれにKernelを持たないため、メモリやディスクの消費量を節約できる。
- 必要とするリソースが少ないため、多くのゲストOSを起動できる。
- Kernelを新たに起動する必要がないため、ゲストOSの起動が早い。
また、dockerはコンテナを起動する際に、各コンテナごとのディスク上にデータを持つのではなく、*「1つのイメージから複数のコンテナを作る」*という方式でゲストを起動する。
これはイメージから起動するコンテナはいつも同じことが保証されている。
そのため、以下の利点もある。
- コンテナのイメージ(雛形)からコンテナ(実態)を作るため、同一構成のOSを簡単に複数作成できる。
- テストをパスしたイメージは本番環境でもすぐに使用できる。(開発とデプロイのサイクルが早い)
ここまでのまとめ
- 基本的な機能はLinuxにもともと搭載されているものを使うから早い
- 環境そのものを簡単に複製、配布できるので環境構築の手間が省ける(たくさんの人たちが環境構築に苦しめられているはずです。)
- イメージとしてたくさんのOS(Linuxディストリビューション)が簡単に使えるので、色々試せる