Vapor Trail

明るく楽しく元気よく

『イラストでわかるDockerとKubernetes』を読んだ

 


Dockerを開発で使用しておりDockerfileもdocker-compose.ymlも書くが、実はどういう仕組で動いているのかよくわかっていないので買って読んでみた。
感想を先に書くと本自体は薄いけど内容は濃い本。『イラストでわかるDockerとKubernetes』という本のタイトルだけ読むと初心者向けっぽく見えるけど、あくまでDockerとコンテナ技術について深堀した本であって「Docker Imageの中身がどういう構造か見てみましょう」「コンテナのレイヤがどういう風に作られるのか見てみましょう」みたいな濃い内容です。よくあるような「ApachePHPのコンテナを作ってWebアプリを動かしてみよう」といったことを期待している人は、別の本を買ったほうがいいと思う。
VagrantVirtualBoxでPC上に仮想の環境を作るという説明で理解しやすいですが、Dockerはコンテナを作るという感覚的に理解しにくい上、コンテナに入るってなんだ!?とかなんでCentOS上でUbuntu動かせるんだとか説明が大変です。今まではDockerについて説明するときに複数のネット上の記事の画像などを引用して説明する必要があったので、イラスト付きのわかりやすく体系的に書かれている本が出たという点で価値がある本だと思います。

学んだこと

いつも忘れるコンテナはなぜ軽いのかを復習。

・ホスト型
VirtualBoxなど
f:id:kyamashiro:20210321133314j:plain

正式リリース版で見るHyper-Vのアーキテクチャ:いまさら聞けないHyper-V【前編】 - TechTargetジャパン 仮想化


・ハイパーバイザ型
WSLなど
f:id:kyamashiro:20210321133346j:plain

正式リリース版で見るHyper-Vのアーキテクチャ:いまさら聞けないHyper-V【前編】 - TechTargetジャパン 仮想化


Windowsの構成

f:id:kyamashiro:20210321135637p:plain

 

・コンテナ型

f:id:kyamashiro:20210321135848p:plain

 

コンテナ内はホスト環境とは隔離されている。
Ubuntuのイメージにはルートファイルシステムを構成するファイルが含まれているがLinuxカーネルは含まれていない。
→Dockerを通してカーネルを共有するから。

複数のレイヤーがLinuxのルートファイルシステムを重ねていってコンテナを作成する。
複数のコンテナで同じイメージを使用する場合、コンテナ同士で共通のレイヤーは読み込み専用で共有され、コンテナ実行時にさらに読み書き可能なレイヤ(コンテナレイヤ)を作成してルートファイルシステムへの書き込みを可能にしている。
DockerはStorage Driverというコンポーネントでレイヤ群の管理を行う。

f:id:kyamashiro:20210321140649p:plain

イメージ、コンテナ、ストレージ・ドライバについて — Docker-docs-ja 17.06 ドキュメント


Dockerコマンド
↓ DockerAPIを実行
Dockerデーモン(dockerd)

OCIランタイム(ホストから隔離した実行環境をコンテナとして作り出す)

コンテナ作成

f:id:kyamashiro:20210321140935p:plain

Container Runtimes Part 3: High-Level Runtimes - Ian Lewis

 

f:id:kyamashiro:20210321140958p:plain

What is containerd ? - Docker Blog

 

結局、Linuxの知識をもっと身に付けねばと感じました。以上。