Docker 再入門として Learning Docker and Kubernetes by Lab | Udemy のコースを受講しているのだが、とてもよい。コンテナを支える Linux カーネルの機能として cgroups, Network Namespaces (Strorage(aufs), Security, Process Namespaces) の概要から、brctl, ip netns の使用例と仕組みまで解説してくれていて、とてもわかりやすい。(^.^)
今まで読んだ Docker 本ではコンテナを支える Linux カーネルの機能を説明しているものがなかったし、当然 brctl や ip netns も出てくることはなかった。O'Reilly の Docker 本は python のアプリを使って説明しようとしていたが、「知りたいのは docker であって python のフレームワークじゃないんだよ... コンテナなんか素の nginx で十分(docker -d --name my-nginx-1 nginx
) なんだよ... 」と言いたい気持ちをぐっとこらえて読んだものの、どこかはぐらかされた気持ちで消化不良を起こしていた。
コースの内容はドキュメントにまとまって公開されている。これを読むだけでもわかる人にはわかるのだろうが、自分の場合は、実際にビデオをみて、手を動かして、ドキュメントで補足するのが一番理解が進んだ。
Docker Kubernetes Lab Handbook — Docker Kubernetes Lab 0.1 documentation
個人的にありがたかった点を以下にあげておく。
- コンテナの基礎技術である cgroups の説明により k8s の CPU 割り当ての実態が見えてくる。
- brctl と ip netns の説明により docker の Network Namespaces の実態が見える。実際、docker は自身の Network Namespace を隠してしまうため ip netns list では表示されないが、それを裏技的に表示する方法を紹介している。ip netns exec が実際の docker exec なのではないかと思う(大きく外れてはいないはず)。
- CNM や overlay ドライバを利用した複数ホストをまたいだネットワークがよくわかる。docker 本家でもこれらの例をわかりやすい図で説明してくれているのだが、学習者はなかなかそのリンクまでたどり着かないことが多いと思う。(⌍་д་⌌)
libnetwork/design.md at master · docker/libnetwork · GitHub
labs/06-overlay-networks.md at master · docker/labs · GitHub