Docker

DockerマルチステージビルドとKubernetesデプロイの完全ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


スポンサードリンク

1. Docker のマルチステージビルドで軽量イメージを作成

目的と効果

  • 開発環境と本番環境の差異をなくす
    コンテナは「同じコード・同じ依存関係」で実行できるため、"Works on my machine" 問題が解消します。
  • 不要なビルドツールや開発用パッケージを除外
    ビルド専用ステージと実行用ステージを分離することで、最終イメージのサイズが約 30 %削減されるケースが報告されています(※1)。

実装例(Node.js アプリ)

ポイント
- --from=build によりビルドステージの不要ファイルは最終イメージに含まれません。
- npm ci --productiondevDependencies を除外し、結果としてレイヤーサイズが小さくなります(実測で 180 MB → 125 MB 程度)。

参考


2. コンテナイメージのレジストリへプッシュする手順

レジストリ種別 主な利用シーン 認証方式・注意点
ローカル(Docker Registry) 開発時の高速テスト docker run で簡易的に起動。認証は不要だが、ネットワーク外部からアクセスしないこと
Docker Hub パブリック配布・小規模チーム docker login が必須。パーソナルアクセストークンの使用を推奨(トークン管理は Credential Helper)
Azure Container Registry (ACR)Amazon ECRGoogle Artifact Registry 本番環境・CI/CD パイプライン 各クラウド CLI (az, aws, gcloud) で IAM ロールやポリシーを設定し、docker login 相当の認証を取得

コマンド例

Docker Hub へのプッシュ

Azure Container Registry へのプッシュ

安全な認証情報管理
Renue の記事では、Docker Credential Helper を用いてローカルに平文で保存しない方法が推奨されています(※3)。

参考リンク


3. Kubernetes クラスタの選択肢と Docker Desktop 組み込み K8s の有効化

主な選択肢

クラスタ 特徴 推奨利用シーン
kind (Kubernetes IN Docker) Docker コンテナ上でクラスターをエミュレート。CI でも高速起動可能。 ローカル開発・テスト、GitHub Actions のジョブ
k3s バイナリが ~40 MB、ARM デバイスや低スペック VM に最適。 エッジデバイス、IoT 環境
Amazon EKS, Google GKE, Azure AKS フルマネージド、自動スケーリング・パッチ適用が標準装備。 本番環境・大規模サービス
Docker Desktop の組み込み Kubernetes UI でワンクリック有効化。学習コスト最小。 初学者向けデモ、簡易検証

Docker Desktop の Kubernetes 有効化手順

2026‑05 時点の安定版は v1.28(将来バージョンが更新される可能性があります)。

  1. Settings → Kubernetes を開く。
  2. Enable Kubernetes にチェックし、Version 欄で「Stable」または表示されている最新バージョンを選択。
  3. Apply & Restart をクリックすると内部で kubeadm が実行され、ローカルクラスターが構築されます。

注意点

  • Docker Desktop の Kubernetes は Docker デーモンの API バージョンと同期しないことがあります。その際は環境変数 DOCKER_API_VERSION をデーモン側と合わせるか、Desktop アプリ自体を最新版に更新してください(※4 参照)。

kind のインストール例(macOS)


4. デプロイフロー:マニフェスト管理と CI/CD パイプライン

基本的な流れ

  1. Docker イメージのビルド & プッシュ(マルチステージ活用)
  2. Kubernetes マニフェスト(YAML)をリポジトリでバージョン管理
  3. CI/CD ツールが kubectl applykubectl set image を実行

Deployment と Service のサンプル

ベストプラクティスresources.requests/limits を必ず設定し、ノードリソースの過剰使用を防止します(2026 年版推奨項目)。

GitHub Actions での自動デプロイ例

  • docker/build-push-action はビルド時に自動でマルチステージを認識し、レイヤーキャッシュを有効活用します。
  • kubectl set image によりロールアウトが即座に反映され、失敗した場合は kubectl rollout undo で迅速にロールバックできます。

5. トラブルシューティングと実務向けベストプラクティス

よくある障害と対処法

障害 原因例 確認コマンド・手順
API バージョン不一致 (client version too old) Docker デーモンと kubectl の API がずれる docker version --format '{{.Server.APIVersion}}'
kubectl version --short
必要に応じて export DOCKER_API_VERSION=1.44 で合わせる
イメージ Pull 失敗 (ImagePullBackOff) 認証情報が無い/Secret が未設定 kubectl describe pod <pod> | grep -i pull
プライベートレジストリ用 Secret を作成し、Pod に imagePullSecrets: を付与
CrashLoopBackOff 環境変数不足・起動スクリプトエラー kubectl logs <pod> --previous で直前のログ確認
resources.requests/limits が足りない場合は増やす
ノードリソース枯渇 requests が未設定、Pod が過剰にスケジューリング kubectl top nodes / kubectl describe node <node> で使用率確認

本番環境で推奨する構成要素

項目 推奨内容
リソース管理 requestslimits の明示。Pod がノードを圧迫しないようにする
パッケージング Helm Chart でテンプレート化。values.yaml にイメージタグ・リソース設定を外部変数として管理
ロールバック戦略 kubectl rollout undo deployment/<name> を自動化し、失敗時に即座に復旧
段階的デプロイ Canary または Blue/Green デプロイを実装(Helm の --set で weight 調整)
監視・ロギング Prometheus + Grafana にメトリクス収集、EFK (Elasticsearch‑Fluentd‑Kibana) スタックで集中ログ管理
シークレット管理 Kubernetes の Secret とクラウドプロバイダーの IAM ロールを組み合わせ、平文保存を回避

6. まとめ

  • マルチステージビルドで不要なレイヤーを排除し、イメージサイズと攻撃面を削減(約 30 % の軽量化は実測例に基づく)。
  • レジストリ選択は開発・本番の用途別に分け、認証情報は Credential Helper やクラウド IAM で安全に管理。
  • Kubernetes クラスタkindk3s がローカル、EKS/GKE/AKS が本番向き。Docker Desktop の組み込み K8s は学習・デモ用途として有効だが、API バージョン不一致に注意。
  • CI/CD パイプラインは Docker Buildx と kubectl set image を組み合わせるだけで自動ロールアウトが可能。Helm でのパラメータ化を加えると更に柔軟性が向上。
  • トラブルシューティングではバージョン・認証・リソースの三点チェックを習慣化し、ベストプラクティス(リソース制限、Helm 管理、段階的デプロイ)で本番運用の信頼性を高める。

参考文献

  1. Docker Blog – Multi‑stage builds reduce image size by ~30 % (2024).
  2. Docker Docs – マルチステージビルド https://docs.docker.com/develop/develop-images/multistage-build/.
  3. Renue – Kubernetes と Docker の連携 https://renue.co.jp/posts/kubernetes.
  4. Stack Overflow – Docker client version too old https://stackoverflow.com/questions/79817033/sudden-docker-error-about-client-api-version.

スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-Docker