【書評】Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

 

あまりにも内容が素晴らしく感銘を受けましたので、僭越ながら感謝の気持ちを込めて書評を書かせていただきます。

コンテナ技術に関する書籍は、これまでも色々と出版されてきましたが、ここまでコンテナアプリケーションの設計、構築、デプロイ、運用に至る開発スタイルを網羅した書籍はこれまでになかったと思います。

私自身、実際にコンテナアプリケーションの開発、運用を実践している方が出版する書籍をずっと待ち望んでいたのと、著者のブログを読んでさらに早く読みたいという欲求が抑えきれず、書泉ブックタワーで先行発売の情報を知り、駆け付けた次第です。

私のコンテナ歴としては、基本的に専門学校や社内外の勉強会でのハンズオンでDocker/Kubernetes/Rancherを教えたり、個人で検証してQiitaやコミュニティでプレゼンしたりするレベルです。2017年にDockerCon、KubeCon/Cloud Native Conにも参加しました。

翔泳社コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤の第六章 Rancher2.0を執筆しました。(宣伝すみません。)

主観になりますが、章ごとに書評させていただきます。



1.Dockerの基礎

この章は、私的に知識の整理、復習として読み進めることができましたが、実際にコンテナアプリケーションの開発、運用を実践している著者だけあり、「Dockerを利用する意義」における、「Infarastructure as CodeとImmutable Infrastructureの考え方を簡単かつ低コストに実現するのがDockerです。」という一文は簡潔かつ非常に説得力感じました。

そして、全体的に言えるのですが、コラムの内容が非常に充実しています。この章のMobyプロジェクトとLinuxKitについては、長くコンテナ技術をキャッチアップしている人にとってはバックグラウンド知識として既知のことかもしれませんが、これから始める人にとって有益な情報だと個人的に思います。

「ローカルDocker環境を構築する」では、Docker for Windows/Mac,Linux環境へのインストールが非常に丁寧に書かれているので、始めやすいと思いました。

2.Dockerコンテナのデプロイ

DockerイメージとDockerコンテナの違いを簡潔に説明し、サンプルアプリケーション、Dockerfile、Dockerイメージビルド、Dockerコンテナの実行までを出力結果を含めて説明しているので、実際に手を動かさなくても理解しやすく読み進めることができました。

コラムに書かれている、「短いdockerコマンド」では、自分はこれまで旧来のコマンドで実行していましたが、操作対象の明確性の向上という理解に共感し、今後は新コマンドで実行しようと思いました。

Dockerflileのインストラクション(命令)について、私もDockerfileを書き始めた頃に意識したADDとCOPYの違いやCMDとENTRYPOINTの使い分けについてもしっかり書かれていてさすがだと思いました。

お恥ずかしながら、MAINTAINERインストラクションが非推奨になっていたのは知らなかったので、今後はLABELを利用します。(MAINTAINER自体使っていませんでした)

docker searchコマンド結果で、公式リポジトリ名前空間に一律でlibraryがついているというのも知りませんでした。

「Dockerコンテナの操作」では、コマンド結果も書かれていますし、説明も簡潔なので非常に分かりやすいです。docker container run --rm はやはり実践ならではの説明だと思いました。

「Docker Composeでマルチコンテナを実行する」では、JenkinsコンテナのMasterとSlave構成もやったことがなかったので、勉強になりました。

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

知りたいエッセンス満載でした。

「アプリケーションをコンテナの中にどのように配置すればよいのか?、1コンテナにどれだけの役割を担わせるべきか?、細かく役割を分割したが、システム全体として複雑になっていないか?」や「1コンテナ=1プロセスを厳守すべきか?」、「コンテナのポータビリティ」、「永続化データをどう扱うか」等は、誰もが知りたいエッセンスではないでしょうか。ここはネタバレにはしたくないので、是非じっくり読んで欲しいと思います。実践経験者ならではの実績、見解を基に非常に分かりやすく、簡潔に書かれています。

この章の後半から、著者の意向としてDocker Swarmの理解が自ずとKubernetesも理解しやすいというところからDocker Swarmの内容となります。私自身、Docker Swarmを触ることなくKubernetesに行ったので、逆になるところはありますが、著者の意向を理解することができました。Rancherの1系に実装されているRancher独自のオーケストレーションツールであるCattleに似ているところもあるという印象も受けました。

dindの環境構築は少し入門者にはハードルが高い気もしました。

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

この章は、実際にTODOアプリを動かすシステムをDocker Swarm上にコンテナで構築する内容となっています。MySQL,API,Web,NginxのコンテナをDockerfileからビルドしてイメージをレジストリにpushしてから、実際にデプロイして構築していくので、それぞれの機能のコンテナをどう連携してシステムを実現していく流れを体感できます。Ingressも含まれています。

正式発売前で設定ファイル等ダウンロードできなかったので、読み進めて理解しただけですが、ここは発売後に実際に手を動かして改めて確認しようと思います。

環境変数も駆使されているのでそのあたりも学ぶポイントだと思います。

5.Kubernetes入門

この章は、Kubernetesの情勢的な話から、ローカル環境の構築、そして、Kubernetesの概念として、Master,Node,Namespace,Pod,ReplicaSet,Deployment,Service,Ingressについてマニフェストファイルの内容とkubectlコマンドの実行結果を含めて書かれているので非常に分かりやすいです。Deployment,ReplicaSet,Podの関係性の説明がしかっりされているところはさすがです。この辺りの理解の重要性は改めて感じました。

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

 この章は、GKE(Google Kubernetes Engine)を利用して、gcloudコマンドベースにKubernetesクラスタを作成して、前章のTODOアプリケーションをKubernetes用にカスタマイズしてデプロイします。その中で、PersistentVolume,PersistentVolumeClaim,StorageClass,StatefulSetをマニフェストファイルとkubectlコマンド結果を含めて簡潔に説明しているので、これまた非常に分かりやすいです。特にこれまでStatefulSetによるDBサーバを構築したことがなかったので、どういう仕組みで、どうやって実現するかを理解できたことが本当に嬉しかったです。

こちらも設定ファイル入手後に実際に手を動かしてみます。

コラムにあった、kubectxというのは正直知らなかったので有益な情報でした。

オンプレに対するKubernetesクラスタ構築について、kubesprayとAnsibleの組み合わせが簡潔に書かれています。私自身、kubesprayを使ったことが無いのでとても勉強になりました。Ansibleもyaml,Kubernetesyamlという観点で考えるととても素敵だと思ってしまいました。

7.Kubernetesの発展的な利用

この章は、KubernetesのJob,CronJob,Secret,RBACについて簡潔に書かれています。特にRBACの認証ユーザーとServiceAccountは詳細に書かれていてます。ここまで書かれている日本語書籍は現時点でこの書籍だけだと思います。この辺りも実際に運用しているからこその内容だと思います。まだ理解しきれていないところもあるので、理解できるまでじっくり読ませていただきます。

そして、著者が力を入れているであろうと感じるHelmについても簡潔に書かれています。Helmについては、日本語書籍、いや日本語ドキュメントとしてもこの書籍が初だと思います。私自身もHelmについて色々と調べている時期があって、著者のブログ記事など参考にさせていただいた記憶があります。

RBAC対応アプリケーションのインストールや独自Chart、独自Chartリポジトリの作成をここまで詳細に書かれているのは本当にありがたいです。

Kubernetesのデプロイについても簡潔かつ詳細に書かれています。

RollingUpgradeの箇所でmaxUnavailable,maxSurge,livenessProbe,readinessProbeについは、実践経験者ならではの説明で本当にありがたい有益な内容です。GracefulShutdownのコラムは読み応えありました。

BlueGreen Deploymentの箇所もselectorラベル変更によるDeployment切り替えについて簡潔に説明されています。「サービスメッシュを実現するLinkerdとIstio」というコラムも著者の検証中の内容も加味したうえでの見解が良かったです。

8.コンテナの運用

この章は、ロギングの運用として標準ログ出力の有用性、Elasticsearch Fluentd Kibanaによるログ収集と検索をdocker-comose.ymlを使って環境構築をして体感できます。この辺りも誰もが知りたいエッセンスだと思うので是非じっくり読んでもらいたいです。早く設定ファイルを入手して体感したいと思っています。

その他のログ収集ツールとして、Stackdriverについても書かれています。これも知らなかったのですが、sternというツールについても書かれていて発見でした。

「Dockerホストやデーモンの運用」の「dockerdのチューニング」箇所で、max-concurrent-downloads,max-concurrent-uploadsでpullやpushの並列数をチューニングできることを知れたのは嬉しかったです。ミラーレジストリによるレイテンシの影響を調整するのも有益情報でした。

「Docker/Kubernetesの運用はマネージド?非マネージド?」このコラムの見解も非常に参考になりました。

「障害対策」では、PodAffinity,PodAntiAffinity,Horizontal Pod Autoscaler,Cluster Autoscalerは非常に勉強になりました。このあたりもやはり実践経験者ならではと思わざるを得ませんでした。

コラムの「GKE On-Prem」については、かなり最近の情報まで入っているところが良心を感じました。

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

知りたいエッセンス満載でした。

scratchについては、ベースイメージの奥深さを感じ、勉強になりました。ここでADDの仕組みが理解できたのもよかったです。

BusyBoxといのも詳細は知らなかったので、勉強になりました。

かつて一度だけ開催されたAlpine Linux Meetupで登壇されただけあり、Alpine Linuxについて詳細に書かれていますし、ここまで詳細に書かれている書籍は他に無いです。貴重で有益な情報に感謝です。

「軽量なDockerイメージをつくる」における、Dockerイメージの構造理論からDockerfile作成の工夫、malti-stage buildsの内容は非常に勉強になりました。本当にありがたい内容です。

10.Dockerの様々な活用方法

この章では、私的に「負荷テスト」のLocustというツールは知らなかったので勉強になりました。このあたりも誰もが知りたいエッセンスではないでしょうか。

Appendix-A セキュリティ

知りたいエッセンス満載でした。

DockerHubを始めとするレジストリにおけるセキュリティ、Docker Bench for Security、適切なアクセス制御、クレデンシャル(機密情報)の扱い等、セキュリティは避けては通れないので非常に有益な内容なので、是非じっくり読んでいただきたいと思います。

Appendix-B Dockerでの開発を支援するツール・サービス

独自Dockerレジストリの構築、CI/CDとしてCircleCI、AWS FargateとECSなど著者の観点で簡潔に書かれてます。参考になりました。

Appendix-C 主要コマンドまとめ

dockerコマンド、Dockerfileのインストラクション、docker-composeコマンド、docker swarm/stackコマンド、helmコマンドがまとめられています。Helmコマンドは詳細に書かれてます。非常にありがたいです。


こうした内容の理解は、Microservice,ServiceMeshの分野においても理解必須だと思いました。

称賛ばかりで恐縮ですが、本当に良書です。

400ページ以上にまとめ上げたのは非常に大変だったと思います。

これだけの素晴らしい内容を書籍として出版して頂けたことに感謝です。

実際に開発、運用の現場にいたくてもいられない自分にとっては、有益になる情報ばかりでした。何度も繰り返し見返し、読み続けたいと思います。

初心者から上級者、プロダクション利用の有無問わず、コンテナ技術に興味がある誰もが求めているエッセンスが盛り込まれていると思いますので、オススメ致します!!