Docker
そろそろ Docker についてちゃんと学び直したい気持ちになった。コンテナ仮想化技術については、一度しっかり学んでおいて損はなさそうなので学び直したい。
背景: 様々な仮想化
ホスト型仮想化
ハードウェアの上にホストOSをインストールし、ホストOSに仮想化ソフトウェアをインストールする
pros 手軽
cons ホストOS上でゲストOSを動かす分、無駄なCPUリソースやディスク容量が必要
例: VMWare, VirtualBox
ハイパーバイザー型仮想化
ハードウェアの上にハイパーバイザーをインストールし、それがハードウェアと仮想環境を制御するgc
pros ホストOSがなくハードウェアを直接制御するのでリソース効率が良い
cons 仮想環境毎に別OSが動作するので、仮想環境起動のオーバーヘッドが大きい
例: Hyper-V, XenServer
コンテナ型仮想化
ホストOS上に論理的なコンテナをつくり、あたかも個別のサーバのように扱うようにする。ホストOSのリソースを論理的に分割し、複数のコンテナで共有する。ホストマシン (Linux) のカーネルを他のコンテナと共有する。
pros オーバーヘッドが少ないため、軽量で高速に動作する
cons ???
動作の仕組み
Docker のコア機能は、Linux 上で動作する仮想化技術がベースになっている。
namespace
cgroup
仮想ブリッジ, 仮想NIC
ネットワーク
いつのまにかリンクはいらなくて、同一Dockerコンテナ内であればコンテナ名で名前解決できるようになっていた
コマンド
code:bash
TODO: ビルドステージとか、イメージへのコミットについて描く
TODO: docker stop 時は SIGTERM signal が送信されることとか、Docker のインタフェースを介して操作した時にコンテナ内に何が実行されるか?を理解したい マルチステージビルド