『イラストでわかる Docker と Kubernetes』の読書メモです。

表紙

読んだ動機

Docker や Kubernetes の仕組みについてざっくり把握したくて読みました。こういったランタイムの仕組みに関する本は特に情報の鮮度が重要だと思っていて、今回「知りたいなぁ」と思ったタイミングで本書が発売された (2020 年 12 月 5 日が発売日) のがきっかけとして大きかったです。

ちなみに読み始める前の私の理解度は、Docker はちょっとしたローカル開発で使ったことがあるけど、Kubernetes はまったく使ったことがなくて雑誌などの記事を読んだことがある程度。コンテナの実行環境は namespace や cgroup などを使って作られているんでしょ?、くらいでした。

感想

要素技術や標準仕様について平易ながらもしっかり書かれていて良かったです。実行例はごく基本的なものしか載っていないので、これを読んでも Docker や Kubernetes が使えるようにはなりませんが、これを読んでからより実践的な本やリファレンスを読めば理解が早そうです (私はまだ読んでないので実際のところ分かりません)。私のように使い方よりも仕組みに興味がある人に特にオススメです。

読書メモ

Twitter でのメモ書き

第 1 章 コンテナ技術の概要

  • コンテナ技術の特徴、仮想マシンとの違い、コンテナ技術のエコシステム (OCI と CNCF)、オーケストレーション、コンテナランタイム、など。

第 2 章 Docker の概要

  • コンテナのワークフロー (Build, Ship, Run) を実際にスクリプトを書いて体験、コンテナイメージのレイヤ構造とそれを実現する storage driver の仕組みの解説、Docker デーモンと OCI ランタイムのアーキテクチャの紹介、など。
  • ルートファイルシステムはレイヤ構造を持つ。レイヤ毎に tar で固めて、それをディレクトリごとに展開・重ね合わせてマウントする。レイヤはコンテナ間で共有されて CoW される。それを実現しているのが overlay2 などの storage driver。btrfs も storage driver として使えるのか。

第 3 章 Kubernetes の概要

  • Kubernetes の特徴 (宣言的な管理や拡張性など)、クラスタの構成と kubectl による基本操作、pod とそのラベリングやアノテーション、pod のデプロイ方法 (Deployment, StatefulSet etc)、サービスディスカバリ、CRI ランタイムと CNI プラグイン、など。
  • pod 内のコンテナ群は同一ノードにデプロイされて localhost でやりとりできるのか。IP アドレスの割り振り方やサービスディスカバリの仕組みも勉強になった。

第 4 章 コンテナランタイムとコンテナの標準仕様の概要

  • 高レベルランタイム (CRI) と低レベルランタイム (OCI) による pod 作成の流れ、高レベルランタイム (Docker, containerd, CRI-O) の違い、低レベルランタイム (runc, gVisor, Kata Containers) の作る実行環境の違い、OCI の各標準仕様の概要、runc によるコンテナ実行の仕組み、コンテナ環境生成のための要素技術 (namespace, cgroup)、など。
  • 低レベルランタイムの実装毎の実行環境の違いと、OCI の各仕様がそれぞれ何を定義しているのかざっくり把握できて良かった。面白そうだし時間があったら実装や仕様を深堀りしてみたいなぁ。