はじめに
- 良書として有名なDocker/Kubernetes 実践コンテナ開発入門の改訂新版が発売されたので、購入しました。
- 各章ごとに初版の内容と比較しながら、まとめを書いて行きます。
- なお、購入にはmiiveという福利厚生サービスを活用しました。
miiveとは
- miiveとはプリペイド式のクレジットカードで、「食事」または「学び」に使用できるポイントが毎月3,500円分支給されます。
- 私は主に書籍の購入で活用していますが、毎月書籍購入で3,500円分の補助があるのは本当にありがたいです!
- 弊社でのmiive導入についてはこちらで詳しく紹介しているので、興味のある方は是非ご覧ください。
初版との比較
1. コンテナとDockerの基礎
- タイトル通り基本中の基本です。
- そもそも「コンテナとは」「Dockerとは」から学ぶにはとても良い内容ですね。
- 「開発環境に限らず本番環境でもコンテナ技術を活用すべき」という話の中では、筆者の方がCyberAgentグループ所属ということもあり、ABEMAが配信した2022年FIFAワールドカップの事例が紹介されています。
- 私自身2022年FIFAワールドカップは深夜に起きて観ていたので、サービスを使う一人のユーザとしてコンテナ技術の有用性を感じることができました。
2. コンテナのデプロイ
- コンテナでアプリケーションをデプロイするところまでの流れについて書かれています。
-
docker search
やdocker container run
など具体的なコマンドを使って解説してくれているので、わかりやすいですね。
3. 実用的なコンテナの構築とデプロイ
- 2章までは基礎的な内容でしたが、ここからは実際にコンテナを構築したりデプロイしたりする際に起こる事象について解説されています。
- コンテナの粒度についても解説されており、「1コンテナ = 1プロセス」にするべきかは確かに私が所属するチーム内でも議論になったことがあります。
- この問題について、Dockerの公式ドキュメントでは「コンテナは1つの関心ごとにだけ集中すべきだ」という見解がなされています。
- ここで言う「1つの関心ごと」とは、「1つの役割(ロール)」や「1つの問題領域(ドメイン)」と言い換えることもできます。
- これらを踏まえて筆者は以下の考え方を示しており、「なるほどな」と思いました。
-
アプリケーションとコンテナの粒度について考える場合、「それぞれのコンテナが担うべき役割を適切に見定め、かつそれがレプリカとして複製された場合でも副作用なくスタックとして正しく動作できる状態になるか?」という考えにもとづいて設計すると良いわけです。
-
4. 複数コンテナ構成でのアプリケーション構築
- タスク管理アプリのアーキテクチャを例にして、以下6つのコンテナによるWebアプリケーションの構成について解説されています。
- web
- nginx-web(Reverse Proxy for Web)
- web(Web server)
- api
- nginx-api(Reverse Proxy for API)
- api(API server)
- db
- migrator(DB migration tool)
- mysql(MySQL server)
- web
- なお、初版の4章では
Swarm
が扱われていましたが、現在は開発終了しているため改訂新版ではCompose
とTilt
が扱われています。 - 次章からは代表的なコンテナオーケストレーションツールである
Kuberbetes
が登場するため、初学者の方にも理解しやすいように、まずは本章で初歩として適している最もシンプルなコンテナオーケストレーションシステムのCompose
が選ばれています。
5. Kubernetes入門
- ここから
Kubernetes
が登場します。 - 入門ということで、「
Kubernetes
とは何か」から図解入りで丁寧に解説してくれています。 - また、コラムでは
k9s
というツールについても解説されています。-
k8s
はKubernetes
の略ですが、k9s
はKubernetes
上のリソースを監視・管理するためのCLIツールです。 - デファクトスタンダードになっているCLIツール
kubctl
よりも操作手順が減って、使いやすいらしいです。
-
6. Kubernetesのデプロイ・クラスタ構築
- 4章の
Compose
上で実行したタスクアプリを、Kubernetes
でどのように実行して行くのか解説されています。 - 初版では
GKE(Google Kubernetes Engine)
を使って構築していましたが、改訂新版ではローカルKubernetes
環境(Docker Desktop
)に構築しています。- これはよりシンプルにわかりやすく解説するためでしょうか
- 最後に、ローカル
Kubernetes
環境では難しいIngress
のインターネット上への公開を、AKS(Azure Kubernetes Service)
を使って行っています。
7. Kubernetesの発展的な利用
-
Kubernetes
の一般的なデプロイ以外の用途について、以下の3つが紹介されています。- Podのデプロイ戦略
RollingUpdate
Blue-Green Deployment
- 定期的なバッチジョブの実行
CronJob
- ユーザ管理と
RBAC(Role-Based Access Control)
- Podのデプロイ戦略
8. Kubernetesアプリケーションのパッケージング
-
Kubernetes
リソースの構成管理やパッケージングを補助するためのツールであるKustomize
とHelm
について、解説されています。 - 初版では
Helm
のみ扱われていましたが、改訂新版ではKustomize
も加わっています。 - この2つの使い分け方について、以下のように記載されています。
-
Kustomizeは、開発環境や本番環境など複数の環境にデプロイする際、必要最小限のマニフェストファイルの管理をするために利用しています。
-
Helmは、Kustomizより細かいマニフェストファイルの制御が必要な場合に利用します。また、Kubernetesアプリケーションを他のプロジェクトで再利用したり、OSSで公開する用途でも有用です。
-
9. コンテナの運用
- コンテナ運用で欠かせないロギングやログ収集・管理機構の構築について、
Elastic Stack
を通して解説されています。 -
Elastic Stack
とは、Elastic社が提供するElasticsearch
・Kibana
・Beats
・Logstash
等で構成されるプロダクト群のことで、様々なソースからデータを取得して検索・分析・可視化することができます。
10. 最適なコンテナイメージ作成と運用
- 本書で最も重要な章かと思います。
- 初版では「より軽量なDockerイメージを作る」という章がありましたが、改訂新版では「最適なコンテナイメージ」という内容に書き直されています。
- 以下のような流れで解説されています。
- まず、
scratch
・BusyBox
・Alpine Linux
・Distroless
といった軽量なベースイメージから、軽量なコンテナイメージを作る方法について - 次に、Docker 17.05から導入された
Multi-stage builds
について - また、従来のイメージビルダー(
docker image build
コマンド)を拡張したBuildKit
について - 最後に、
GitHub Actions
を用いたワークフローコンテナのビルドとPushについて
- まず、
11. コンテナにおける継続的デリバリー
- この章は初版には無く、改訂新版で新たに追加された章になります。
- 継続的デリバリー(
Continuos Delivery
)について、GitOps
を中心に解説されています。 -
GitOps
とは、コンテナアプリケーションのデプロイ方法の王道です。- Gitリポジトリを信頼できる唯一の情報源として扱い、マニフェストファイル群を管理します。
- また、以下3つの継続的デリバリーシステムが紹介されています。
12. コンテナのさまざまな活用方法
- 本章では、以下のようなアプリケーションのデプロイ以外のコンテナの活用方法について解説されています
最後に
- 私自身バックエンド領域の業務がメインのため、既に用意された
Dockerfile
やdocker-compose.yml
から自分のローカル開発環境を作ることは多いのですが、一からdocker環境を構築した経験は少ないので、大変勉強になりました。 - 初版も数年前にしっかり読んだはずなのですが、普段から使っていない技術はやはり忘れてしまってますね。
- バックエンド領域の業務がメインでも、Dockerや
Kubernetes
といったコンテナ技術やインフラ領域についての知見があるに越したことは無いので、これからも学んで行きたいですね。