まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

【書評】Docker/Kubernetes 実践コンテナ開発入門はまさに「実践」のための本です

今回、レビュアーとして関わらせてもらい、本を頂けたので感想書いていきます。

とにかく内容が充実していて実用的な本です

私自身、業務でもコンテナの運用をやっているのですが各章知らないことがたくさんありました。全部で400ページぐらいあって1人でこの量書くのどれだけ大変だったんだろうという感じです。共著ではないので本全体を通して流れが一貫してると感じました。

f:id:masato47744:20180823023453p:plain

まずはDockerの歴史や意義から始まり、Dockerの操作、Dockerfileでイメージの作り方、docker-composeでコンテナ連携と順を追ってステップアップしていきます。

そして、Swarmでオーケストレーション、さらにSwarmで作ったやつをKubernetesでもやってみようの流れから、ローカルでやっていたものをGKEにデプロイして一通りKubernetesのことが体験できるようになってます。さらに、コンテナのロギングなど本番運用には欠かせない話から、Dockerイメージの軽量化、付録ではなんとFargateを利用するところもついています。もう、訳が分からないよw

ただ、ページ数が多いといっても文字ばかりという訳ではなく、キャプチャやコマンドの実行結果などが貼られていて読むのが辛いという訳でもないです。 本番でDockerを使うようにするための本なので本当は手を動かしながら読み進めていくのがおすすめですが、上記の通り読んでるだけでもコマンドの雰囲気とかが分かるようになってます。

こういう本を書こうとすると、DockerのコマンドやDockerfileの説明するだけで正直Webで見れば分かっちゃうみたいな内容になってしまう場合もあると思うんですが、本書では実際にgoのアプリケーションを書いてDockerイメージにするみたいなところから試しながら進めていくことができます。それだけじゃなくて、実用的な現場で得た経験に基づくコラムなどもたくさん紹介されてるのでおすすめです。例えば、現場でのCMDENTRYPOINTの使い分けとか知りたいですよね。そういうのものせてくれています! あと、サンプルに選ぶ題材のセンスがいいです。

私自身、コンテナの運用はECSやKubernetesしか触ったことがなくSwarmは触れたことがありませんでした。今の流れ的にはSwarmはメインストリームの立ち位置ではないとは思いますが、本書を読んでECSのあの用語ってきっとSwarmのこれから来てるんだ〜とかそういうことも知れて知識の幅が広がった気がします。

個人的には特に「第9章 より軽量なDockerイメージを作る」がオススメです!!COPYADDの違いの説明は色々読んできたつもりですが、今までで一番納得することができました。是非購入してアハ体験してもらいたいですw

各章の説明は@stromcat24さんのDocker/Kubernetes 実践コンテナ開発入門 出版に寄せての方を見てもらうとして、 レビューさせてもらったときの私の読書感想文ものせておくの読者目線での詳細を感じてみたい方はよろしければどうぞ!

読書感想文

1章 Dockerの基礎

Dockerの何がいいのかに軽く触れた後、基礎や歴史の説明もあり、その後、Dockerを利用する意義について詳細に説明している点がよいと思いました。 Dockerは聞いたことあるけど、なんかそろそろ勉強しないといけないなーで止まってる人には、なぜDockerがいいのかというところが重要だと思えた方が、そのさきのDocker For Windows/Macで試してみように進んでもらえるのではないかと思いました。

私は普段はAWSのECSやk8sでDockerコンテナを本番でホストして運用しているのですが、Docker自体のDotCloud社の頃からの歴史や、Mobyプロジェクト、LinuxKitがなんなのかについてあまり知らなかったのでその点でも勉強になりました。おそらく、この辺に経緯は知らなくとも便利なものとしてDockerは使うことができてしまうので、そういった途中から入った方の層にもオススメなのかなと思いました。

第2章 Dockerコンテナのデプロイ

Docker全般の操作、docker-composeでアプリケーションを立ち上げる構成はDockerやったことない人でやってみようという層にはいいと思いました。スクショや出力結果もあるし読んでいるだけで実際に手を動かさなくてもイメージしやすいと思います。 自分が最初つまづいたENTRYPOINTとCMDの違いなども丁寧にコラムで説明してありとてもいいと思いました。

第3章 実用的なコンテナの構築とデプロイ

仮想マシンやインスタンスなどでサーバーアプリケーションを動かしているものをコンテナ化するときにどうすればいいか、最初につまづくのがどういう単位で分離すればいいのかというところだと思います。1コンテナに入れる実用的な粒度について説明されているのがとてもいいと思いました。 あと、Data Volumeコンテナという手法知らなかったので参考になりました。あとECSやk8sしか触ったことがなかったのでDocker Swarmの部分は面白かったです。 とても盛りだくさんな章で参考になりました。

第4章 Swarmによる実践的なアプリケーション構築

基本的なWebサービスを実用的な構成でコンテナオーケストレーションを体験できるのはいいと思いました。実際はMySQLをコンテナで動かすことはそんなにないと思いますが設定を環境変数化するところなどは本番に即していると思います。 あと、Entrykit知りませんでした。あと、mysqlのメタコマンド\G知らなかった・・ Swarm触ったことないので最初TaskのIDというのが何を指すか分からなかったんですが、Taskはdocker swarmでもservice作ったときの一つのコンテナの単位なんですね。ECSしか触ったことなかったので、気づかなかったんですが、ECSってdocker swarmをもとに作られてるんですかね?ECSだけを見ていては気づかなかったことに気づけた気がします。

第5章 Kubernetes入門

Kubernetes全くの初めての人には足りない部分があるかもしれないですが、それをやりだすと溢れてしまうのでこれぐらいでいいと感じました。Swarmで作ったものをKubernetesでやるにはどうするか?という比較ができるので、理解しやすくなるのではないかなと思います。 余裕があれば、便利ツールのkubectxに触れてあると個人的には嬉しいです。ずっと知らずに切り替えやってたので大変だったという思いからです。

第6章 Kubernetesのデプロイ・クラスタ構築

Ingressを使う場合は、ClusterIPでも公開できると思ったんですが、GKEの場合はNodePortにしないとダメなんですね・・(勘違いしてました)

第7章 Kubernetesの発展的な利用

たくさんあるk8sのresourceの中から実践で使うことが多めなresourceが紹介されててよかったです。Helmでインストールするアプリとしてredmineを選んだのはイメージが湧きやすくいいと思いました。Docker for Macで試せるのはいいですね。

第8章 コンテナの運用

確かにロギングまわりは、コンテナになると今までとやり方が変わる部分ですね。章としてまとめてあるのはいいと思いました。 ConfigMapでコンテナ内のファイルを上書きするやり方、Pod AntiAaffinity、ライブリストアなど普段触れることがないことを知れました。

第9章 より軽量なDockerイメージを作る

全体的に知らないことがありとても勉強になりました。他人にもこの章はオススメですと薦めたいなと思いました。scratchの話、apkの詳しい説明などなんとなく通り過ぎてきてしまってたんですが、そういうことだったんだ・・という目から鱗的な内容でした。 あとdocker historyも知りませんでした。 あと、3章出て来たAlpine Linuxのことと、ダイナミックリンクの件は、ここで埋め合わせられてる気がします。

*11 俗に産業廃棄物とも呼ばれます。

これは知らなかった・・使っていきます。

第10章 Dockerの様々な活用方法

cliでdocker使えるというのは、ぼくはDocker始めた頃に気づけなかったので、こういう紹介があるのはいいと思いました。なんとなくDocker == サーバーアプリケーションとして使うんでしょ?みたいに思っちゃってました。あと、hadolint知りませんでした。

まとめ

とにかくコンテナ開発にまつわるエッセンスが全部詰まってると思います。サンプルをもとに実際に手を動かしながら学んでいけるので、コンテナ開発やっていきの皆様におかれましては購入をオススメいたします。