Docker/Kubernetes 実践コンテナ開発入門 改訂新版を出版します

こんにちは、ビコーペガサスです。この度、「Docker/Kubernetes 実践コンテナ開発入門 改訂新版」を出版します。本書は2018年に出版した初版を全面改訂したものです。

「改訂新版」のモチベーション

初版の出版から早5年半が過ぎ、コンテナ技術の情報は大きく変化しました。コンテナ技術の基本的な部分は変わらないとはいえ、初版の内容が陳腐化するだけの時間が流れたことは否定しようがありません。

執筆には大きなカロリーを要すために著者として覚悟が必要なわけですが、5刷までいった著書をそのまま腐らせるのは勿体ないという気持ちがわずかに勝利したため、改訂することになりました。

それを受け、どのように改訂すべきかを2022年の秋頃から緩やかに考え始めました。初版の振り返りをしていくと、初版で論じた事が通用しない部分も多々出てきました。初版を単純に改訂していくと様々な矛盾を生み出しそうだという懸念がありました。

また、現状のコンテナ技術の市場感も俯瞰してみました。コンテナ技術はここ5年、開発コミュニティや各種ベンダー、クラウド事業者によって真っ当に進歩しました。しかしながら、開発者が複雑性を抱きやすくなった面もあるかと思います。特に、Kubernetesにはオーバーテクノロジーを感じて敬遠する開発者も多いのではないでしょうか。

そのような開発者の空気を読みつつ、改めてコンテナ技術をシンプルに捉えて学習してほしいという意図でほぼほぼスクラッチで書き直しています。初版と同様に、「コンテナで開発・運用していくための基本的な考え方を養えるようにする」という思想は変わっていません。

コンテナ初心者はもちろんですが、経験者にもぜひ読んでもらいたいです。また、実運用でKubernetesを使わなくても良いと思うんです。ただ、Amazon ECSやGoogle Cloud Run等で十分というケースも多いですが、それでもKubernetesはコンテナオーケストレーションの基本を学ぶための肥やしでもあると思っています。本書を読んで、もっと深く掘り下げたくなれば他の専門書に飛びつけば良いだけです。

改訂新版概観

1. コンテナとDockerの基礎

コンテナの基本的な概念について。まさにこれからコンテナを始める人に読んでもらいたい。コンテナを利用する意義や、アプリケーション開発がどのように変わるのか。その他、Docker Desktopのセットアップについて。

2. コンテナのデプロイ

実際にコンテナを実行したり、コンテナイメージをビルドしていく。コンテナ技術のオープン化により、Dockerはコンテナ実行環境の選択肢の一つとなった。そのため、本書では「Dockerコンテナ」「Dockerイメージ」といった表記はせずに、「コンテナ」「コンテナイメージ」としている。

コンテナレジストリといえばDocker Hubが代表的だが、本書では基本的にGitHub Container Registry(GHCR)を使うスタイルで進めている。

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

2章までは単純な実行例だったが、ここではコンテナの粒度やポータビリティを意識したコンテナの使い方について学ぶ。また、コンテナではシークレットの扱いが悩みどころであるが、様々な観点で考察している。

4. 複数コンテナ構成でのアプリケーション構築

新たにスクラッチしたタスクアプリを題材に、Composeで複数コンテナ構成のアプリケーションを構築する。初版ではSwarmを使っていたが、改訂新版ではさすがに利用しない。この章を終えると複数コンテナ構成の基本が身につく。

自分はTiltが好きです。

5. Kubernetes入門

5章からKubernetesが登場する。Docker DesktopのKubernetes環境で学習を完結できるようになっており、基本的なリソースの使い方を学ぶ。

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

4章においてCompose上で実行したタスクアプリをKubernetesでどのように実行していくか。

初版でも似たような内容があったが、いきなりGKEが出てきて読み飛ばしたという声も多かった。改訂新版ではIngressを使ったインターネットへの公開以外はDocker Desktopで完結できるようにしている。なお、公開したい場合はAzure Kubernetes Serviceでの例を紹介した(最初はOktetoを使っていたが、入稿直前にOktetoのフリープランが終了するという大事件が起きた)。

7. Kubernetesの発展的な利用

可用性を意識したPodのデプロイ戦略(RollingUpdateやBlue-Green Deployment)など。また、ジョブの実行やRBACといった少し痒いところを紹介。

8. Kubernetesアプリケーションのパッケージング

初版ではHelmを扱っていたが、今回はKustomizeとHelmについて紹介する。Chartの公開もGHCRでやってしまいましょう。

9. コンテナの運用

主にロギングやログ収集・管理機構の構築についてElastic Stackを通して学ぶ。こちらもDocker Desktopだけで体験可能。

10. 最適なコンテナイメージ作成と運用

初版に「より軽量なDockerイメージを作る」という章があったが、「最適なコンテナイメージ」という形で書き直した。DistrolessやMulti-stage buildsはもちろん、BuildKitでマルチプラットフォーム対応のイメージをビルドしたりする。

また、セキュアなコンテナイメージ作りや、GitHub Actionsでのコンテナイメージ作成のワークフローも紹介する。

コンテナビルド組合員、必読の章。

11. コンテナにおける継続的デリバリー

「継続的デリバリー」を新たな新章として追加した。開発組織のパフォーマンスがソフトウェアデリバリーのパフォーマンスと相関があると言われて久しいが、人の手を介さずにユーザーに変更を届けるリリースパイプラインの重要性が高まっている。 それを実現するスタイルであるGitOpsについて、主にFlux、ArgoCD、PipeCDを使った例を紹介する。

めちゃくちゃ深く触れているわけではないが、まずはGitOpsを一度体験してみてほしい。

12. コンテナのさまざまな活用方法

ここはコンテナのちょっとした活用方法について。Trivyや負荷テスト的な使い方等も。

Appendix-A. 開発ツールのセットアップ

Windowsユーザー向けに、WSL2を使った環境構築について。また、本書を読み進める上で必要なツールをインストールするasdfや、kindについても紹介。

Appendix-B. さまざまなコンテナオーケストレーション環境

代表的なKubernetesマネージドサービスである、GKE, EKS, AKSに加えAmazon ECSについて雰囲気を掴んでほしい。

Appendix-C. コンテナ開発・運用のTips

コンテナランタイム(containerd)や、KubernetesのTipsなど。

さあ、コンテナをはじめよう

シンプルにコンテナを捉えようと言っておきながら、なぜか初版の約420Pから約600Pにバルクアップしてしまいました。ただ、読者の習熟状況によっては読み飛ばせる構成にもなっているので、緩くトライしてほしいです。

早いところでは、明日2/14から店頭に並ぶ書店さんもあるようです。もちろん電子版も程なくして出るのでそちらもどうぞ。