執筆計画アウトライン¶
概要¶
「Docker/Kubernetes 実践コンテナ解説」シリーズの執筆計画。書籍『Docker/Kubernetes 実践コンテナ開発入門(第 2 版)』の章立て(tmp/index.md)を解説記事として再構成し、各章を実際に動作するサンプルコードに紐づけて解説する。
アルゴリズム入門シリーズ(getting-started-algorithm)の outline.md の方針を踏襲し、章とソースの対応を明確にしたうえで、読者が手を動かしながら理解できる構成にする。
執筆方針¶
実コード紐づけ方式¶
すべての解説は実在のサンプルコードに紐づける。コードを引用するときは出典(パス)を明示し、存在しないコマンドや設定を捏造しない。中心となるサンプルは本リポジトリの apps/ 配下に実装を配置し、実機で動作検証している。書籍リポジトリの一部(pipecd-examples / cloudshell / gihyo-docker-kuberbetes)は apps/ には収録せず、補助参照として扱う。
apps/ 配下に配置するサンプル¶
- echo(
apps/echo/)— 単一コンテナの最小サンプル(Go 製の Hello サーバ)。第 1〜2 章、第 5 章、第 8 章、第 10 章で利用 - taskapp(
apps/taskapp/)— 複数コンテナ構成のタスク管理アプリ(api / web / mysql / migrator / nginx)。第 3〜4 章、第 6 章、第 9 章で利用 - container-kit(
apps/container-kit/)— デバッグ・プロキシ・ジョブ用の補助コンテナ集。第 7 章、第 12 章、付録 C で利用 - image-bootstrap(
apps/image-bootstrap/)— distroless + 非 root + Trivy によるセキュアイメージのサンプル。第 10 章、付録 C で利用 - echo-bootstrap(
apps/cd/echo-bootstrap/)— echo を Kubernetes へデプロイする Kustomize マニフェスト。第 6 章、第 11 章で利用 - argocd-example-apps(
apps/cd/argocd-example-apps/)— Argo CD 用のサンプルアプリ(guestbook、helm、kustomize、blue-green)。第 11 章で利用
補助参照(apps/ には収録しない書籍リポジトリ)¶
- pipecd-examples — PipeCD 用のデプロイ定義(canary、bluegreen、analysis など)。第 11 章で利用
- cloudshell — AWS(EKS / ECS)構築スクリプトと CDK。付録 B で利用
- gihyo-docker-kuberbetes — 書籍のサンプルコード(simple-pod/replicaset/deployment/service/ingress、Helm チャートなど)。第 5 章、第 7〜10 章の補助参照
文体・表記¶
- 言語: 日本語(技術用語は英語のまま)
- 文体: ですます調、句読点は「。」「、」
- 日本語と半角英数字の間には半角スペースを入れる
- コードブロックには言語識別子(
dockerfileyamlbashgoなど)を付ける - 各章は「はじめに → 概念解説 → ハンズオン → まとめ」の流れを基本とする
章とソースの対応¶
| 章 | ファイル | テーマ | 主な参考ソース |
|---|---|---|---|
| 第 1 章 | 01-container-and-docker-basics.md |
コンテナと Docker の基礎 | apps/echo/Dockerfile, apps/container-kit/containers/ |
| 第 2 章 | 02-container-deployment.md |
コンテナのデプロイ | apps/echo/ (main.go, Dockerfile, compose.yaml) |
| 第 3 章 | 03-practical-container-build-deploy.md |
実用的なコンテナの構築とデプロイ | apps/echo/Dockerfile.slim, apps/taskapp/containers/ |
| 第 4 章 | 04-multi-container-application.md |
複数コンテナ構成でのアプリケーション構築 | apps/taskapp/ (compose.yaml, containers, Tiltfile) |
| 第 5 章 | 05-kubernetes-introduction.md |
Kubernetes 入門 | gihyo-docker-kuberbetes/ch05/simple-*.yaml, apps/echo/k8s |
| 第 6 章 | 06-kubernetes-deploy-cluster.md |
Kubernetes のデプロイ・クラスタ構築 | apps/taskapp/k8s/plain/local/, apps/cd/echo-bootstrap/ |
| 第 7 章 | 07-kubernetes-advanced.md |
Kubernetes の発展的な利用 | apps/container-kit/containers/time-limit-job, gihyo*/ch09 |
| 第 8 章 | 08-kubernetes-packaging.md |
Kubernetes アプリケーションのパッケージング | apps/taskapp/k8s/kustomize/, gihyo*/ch07, apps/cd/argocd-example-apps/helm-guestbook |
| 第 9 章 | 09-container-operations.md |
コンテナの運用 | apps/taskapp/containers/nginx-*, apps/taskapp/containers/mysql |
| 第 10 章 | 10-optimal-container-image.md |
最適なコンテナイメージ作成と運用 | apps/echo/Dockerfile.slim, apps/image-bootstrap/ |
| 第 11 章 | 11-continuous-delivery.md |
コンテナにおける継続的デリバリー | apps/cd/argocd-example-apps/, pipecd-examples/, apps/cd/echo-bootstrap/ |
| 第 12 章 | 12-container-use-cases.md |
コンテナのさまざまな活用方法 | apps/container-kit/, gihyo*/chA |
| 付録 A | appendix-a-dev-tools-setup.md |
開発ツールのセットアップ | apps/taskapp/.tool-versions, apps/taskapp/hack/ |
| 付録 B | appendix-b-orchestration-environments.md |
さまざまなコンテナオーケストレーション環境 | cloudshell/aws/, apps/taskapp/k8s/plain/aks, pipecd-examples/ecs |
| 付録 C | appendix-c-tips.md |
コンテナ開発・運用の Tips | apps/container-kit/, apps/image-bootstrap/trivy.yaml |
ファイル構成¶
docs/article/getting-start-docker-kubernetes/
├── index.md # 記事トップページ(目次)
├── outline.md # 本ファイル(執筆計画)
├── 01-container-and-docker-basics.md # 第 1 章
├── 02-container-deployment.md # 第 2 章
├── 03-practical-container-build-deploy.md # 第 3 章
├── 04-multi-container-application.md # 第 4 章
├── 05-kubernetes-introduction.md # 第 5 章
├── 06-kubernetes-deploy-cluster.md # 第 6 章
├── 07-kubernetes-advanced.md # 第 7 章
├── 08-kubernetes-packaging.md # 第 8 章
├── 09-container-operations.md # 第 9 章
├── 10-optimal-container-image.md # 第 10 章
├── 11-continuous-delivery.md # 第 11 章
├── 12-container-use-cases.md # 第 12 章
├── 13-case-monolith-compose-vs-kustomize.md # 第 13 章(ケーススタディ 1)
├── 14-case-event-driven-kustomize-vs-helm.md # 第 14 章(ケーススタディ 2)
├── 15-case-escqrs-axon-kustomize-vs-helm.md # 第 15 章(ケーススタディ 3)
├── 16-case-escqrs-kafka-kustomize-vs-helm.md # 第 16 章(ケーススタディ 4)
├── 17-case-comparison-summary.md # 第 17 章(ケーススタディ まとめ)
├── appendix-a-dev-tools-setup.md # 付録 A
├── appendix-b-orchestration-environments.md # 付録 B
└── appendix-c-tips.md # 付録 C
構成方針¶
書籍の 12 章 + 付録 3 章構成をそのまま維持する。各部のねらいは以下のとおり。
第 1 部: コンテナと Docker(第 1〜3 章)¶
コンテナの概念、Docker の基本操作、実用的なイメージ構築までを学ぶ。
| 章 | テーマ | 内容 |
|---|---|---|
| 1 | コンテナと Docker の基礎 | コンテナとは、Docker とは、利用意義、ローカル実行環境の構築 |
| 2 | コンテナのデプロイ | アプリの実行、イメージ作成、イメージ・コンテナの操作、Docker Compose |
| 3 | 実用的なコンテナの構築とデプロイ | 粒度、ポータビリティ、コンテナフレンドリ、クレデンシャル、永続化 |
第 2 部: 複数コンテナと Kubernetes 入門(第 4〜6 章)¶
複数コンテナ構成のアプリ構築と Kubernetes の基礎・デプロイを学ぶ。
| 章 | テーマ | 内容 |
|---|---|---|
| 4 | 複数コンテナ構成でのアプリケーション構築 | Web/API/MySQL/マイグレータ/リバースプロキシ、Tilt |
| 5 | Kubernetes 入門 | Kubernetes とは、ローカル実行、Pod/ReplicaSet/Deployment/Service/Ingress |
| 6 | Kubernetes のデプロイ・クラスタ構築 | タスクアプリのデプロイ、インターネット公開 |
第 3 部: Kubernetes の実践(第 7〜9 章)¶
発展的な利用、パッケージング、運用を学ぶ。
| 章 | テーマ | 内容 |
|---|---|---|
| 7 | Kubernetes の発展的な利用 | デプロイ戦略、CronJob、RBAC |
| 8 | Kubernetes アプリケーションのパッケージング | Kustomize、Helm |
| 9 | コンテナの運用 | ロギング、可用性の高い運用 |
第 4 部: イメージ最適化と継続的デリバリー(第 10〜12 章)¶
イメージ最適化、CD パイプライン、応用的な活用方法を学ぶ。
| 章 | テーマ | 内容 |
|---|---|---|
| 10 | 最適なコンテナイメージ作成と運用 | 軽量ベースイメージ、Multi-stage builds、BuildKit、セキュリティ |
| 11 | コンテナにおける継続的デリバリー | Flux、Argo CD、PipeCD |
| 12 | コンテナのさまざまな活用方法 | 開発環境統一、CLI、負荷テスト |
第 5 部: 国際貨物輸送システムのケーススタディ(第 13〜17 章)¶
書籍の基礎を踏まえ、実在の貨物追跡システム(Cargo Tracker)の 4 つのアーキテクチャ実装を題材に、コンテナデプロイ手段(Docker Compose / Kustomize / Helm)を比較する。アーキテクチャの違いがデプロイ手段の選択にどう影響するかを、実装と動作検証を通じて学ぶ。
| 章 | テーマ | 比較軸 |
|---|---|---|
| 13 | モノリス(case-1)のデプロイ | Docker Compose 対 Kustomize |
| 14 | イベント駆動マイクロサービス(case-2)のデプロイ | Kustomize 対 Helm |
| 15 | ES/CQRS マイクロサービス(Axon、case-3)のデプロイ | Kustomize 対 Helm |
| 16 | ES/CQRS マイクロサービス(Kafka、case-4)のデプロイ | Kustomize 対 Helm |
| 17 | ケーススタディ実装比較まとめ | 全アーキテクチャ × デプロイ手段の総括 |
付録(App.A〜C)¶
| 付録 | テーマ | 内容 |
|---|---|---|
| A | 開発ツールのセットアップ | WSL2、asdf、kind、Rancher Desktop |
| B | さまざまなコンテナオーケストレーション環境 | GKE、EKS、AKS、オンプレミス、ECS |
| C | コンテナ開発・運用の Tips | コンテナランタイム、Kubernetes Tips、生成 AI 活用、apk |
第 5 部 ケーススタディの実装・執筆計画¶
ねらい¶
第 1〜12 章で学んだコンテナ・Kubernetes・パッケージング・CD の知識を、実在の業務システム(国際貨物輸送システム = Cargo Tracker)の 4 アーキテクチャに適用する。同一ドメインを異なるアーキテクチャで実装した題材を使い、「アーキテクチャの複雑さが増すほど、宣言的・テンプレート化されたデプロイ手段(Kustomize → Helm)の価値が高まる」ことを実装と検証で示す。
題材(参考ソース)¶
| ケース | アーキテクチャ | 参考ソース | 主な構成要素 |
|---|---|---|---|
| case-1 | モノリス | tmp/case-1 |
Spring Boot 単一アプリ(port 8080)+ PostgreSQL |
| case-2 | イベント駆動マイクロサービス | tmp/case-2 |
7 マイクロサービス(auth/booking/routing/tracking/handling/billing/gateway)+ frontend |
| case-3 | ES/CQRS マイクロサービス(Axon) | tmp/case-3 |
Axon 5(Command/Event Sourcing)+ MyBatis(Read)構成のマイクロサービス群 |
| case-4 | ES/CQRS マイクロサービス(Kafka) | tmp/case-4 |
Kafka + ZooKeeper + PostgreSQL + マイクロサービス群。ops/k8s(Kustomize)と ops/helm を既に実装済み(参照モデル) |
章とソース・比較軸の対応¶
| 章 | ファイル | 参考ソース | 実装する成果物 | 比較軸 |
|---|---|---|---|---|
| 第 13 章 | 13-case-monolith-compose-vs-kustomize.md |
tmp/case-1 |
Docker Compose 一式 + Kustomize マニフェスト | Compose 対 Kustomize |
| 第 14 章 | 14-case-event-driven-kustomize-vs-helm.md |
tmp/case-2 |
Kustomize(base/overlay)+ Helm チャート | Kustomize 対 Helm |
| 第 15 章 | 15-case-escqrs-axon-kustomize-vs-helm.md |
tmp/case-3 |
Kustomize + Helm チャート | Kustomize 対 Helm |
| 第 16 章 | 16-case-escqrs-kafka-kustomize-vs-helm.md |
tmp/case-4 |
既存の ops/k8s・ops/helm を整理・検証 |
Kustomize 対 Helm |
| 第 17 章 | 17-case-comparison-summary.md |
第 13〜16 章 | (比較表・指針) | 全体総括 |
apps/ への実装方針¶
ケーススタディのデプロイ成果物とアプリ本体のソースは apps/case-studies/ 配下に配置する。tmp/ は Git 管理対象外でチェックアウトし直すと失われ再現できないため、ビルドに必要なソースも apps/ に同梱する(ビルド成果物・node_modules・.gradle 等は除外)。
apps/case-studies/
├── case-1-monolith/ # 第 13 章: cargo-tracker/(ソース)+ compose/ + k8s/kustomize/
├── case-2-event-driven/ # 第 14 章: ソース + k8s/kustomize/ + helm/
├── case-3-escqrs-axon/ # 第 15 章: ソース + k8s/kustomize/ + helm/
└── case-4-escqrs-kafka/ # 第 16 章: ソース + k8s/kustomize/ + helm/(tmp/case-4 の ops を基に)
実装・検証・執筆のワークフロー¶
各章は「実装 → 動作検証 → 執筆」の順で進める。
- 実装: 参考ソースを基に、対象のデプロイ成果物(Compose / Kustomize / Helm)を
apps/case-studies/に作成する。 - 動作検証: Docker と ローカル Kubernetes(Docker Desktop / kind)で実際にデプロイし、起動・疎通を確認する。検証時に発見した不具合は修正し、修正点を記録する。
- 執筆: 検証で確認した実コード・コマンド・結果に基づき、比較記事を執筆する。捏造せず、出典(
apps/case-studies/...)を明示する。
各章の比較記事には、最低限以下を含める。
- アーキテクチャ概要(ドメインとサービス構成)
- 各デプロイ手段の実装(マニフェスト・チャートの要点)
- 環境差分の扱い(overlay / values による上書き)
- 動作検証の手順と結果
- 比較考察(記述量・重複・再利用性・学習コスト・適性)
進め方¶
規模が大きいため、第 13 章(case-1)から順に「実装 → 検証 → 執筆」を 1 章ずつ完了させ、章単位でコミットする。第 17 章は第 13〜16 章の成果を踏まえて最後に執筆する。
参考文献¶
- 『Docker/Kubernetes 実践コンテナ開発入門(第 2 版)』 — 山田明憲
- 国際貨物輸送システム(Cargo Tracker)ケーススタディ実装(
tmp/case-1〜tmp/case-4、実装はapps/case-studies/に配置) - 各章のサンプルコード(
apps/配下に配置。一部は書籍リポジトリの補助参照)