Docker・Kubernetesは、現代のクラウドネイティブ開発において必須のインフラ技術です。本記事では、コンテナ技術の基礎からKubernetesによる本番運用まで、エンジニアが実践で役立てられる知識を体系的に解説します。
Dockerとは?コンテナ仮想化の基礎を理解する
Dockerはアプリケーションをコンテナという軽量な実行環境にパッケージ化する技術です。「自分のマシンでは動くのに本番では動かない」という問題を根本から解決します。
Dockerの主要コンセプト
- イメージ(Image):アプリと依存関係をまとめた読み取り専用のテンプレート
- コンテナ(Container):イメージから作成される実行中のインスタンス
- Dockerfile:イメージのビルド手順を定義したファイル
- Docker Hub:パブリックなイメージレジストリ
- Docker Compose:複数コンテナをまとめて管理するツール
実践的なDockerfile例
# Node.jsアプリのDockerfile例
FROM node:20-alpine AS base
WORKDIR /app
# 依存関係のインストール(キャッシュ活用)
COPY package*.json ./
RUN npm ci --only=production
# ソースコードのコピー
COPY . .
# ビルドステージ
FROM base AS builder
RUN npm run build
# 本番用の軽量イメージ
FROM node:20-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
USER node
CMD ["node", "dist/server.js"]
Docker Composeで開発環境を構築する
複数のサービス(Webアプリ・DB・Redis等)を組み合わせた開発環境をDocker Composeで一元管理できます。
# docker-compose.yml
version: '3.9'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
volumes:
- ./src:/app/src
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
postgres_data:
Kubernetesの基礎と主要オブジェクト
Kubernetes(K8s)は、コンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するオーケストレーションシステムです。
| オブジェクト | 役割 | 主なユースケース |
|---|---|---|
| Pod | 最小デプロイ単位(コンテナ集合) | アプリケーション実行 |
| Deployment | Podのデプロイ管理・ローリングアップデート | ステートレスアプリ |
| Service | Pod群へのネットワークアクセス | ロードバランシング |
| ConfigMap | 設定情報の管理 | 環境変数・設定ファイル |
| Secret | 機密情報の管理 | パスワード・APIキー |
| Ingress | 外部HTTP/HTTPSトラフィックの制御 | ルーティング・TLS終端 |
Kubernetes Deployment YAML例
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:v1.2.3
ports:
- containerPort: 3000
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 10
2026年のKubernetes最新トレンド
- Gateway API:Ingressの後継として普及が加速中
- Argo CD / Flux:GitOps によるデプロイメント自動化
- Karpenter:ノードの自動プロビジョニング(AWSで特に有効)
- Service Mesh(Istio・Cilium):mTLS・オブザーバビリティの強化
- AI/ML on K8s(Kubeflow・KServe):MLパイプラインのコンテナ化
Docker・Kubernetes学習リソース
- Docker公式ドキュメント(docs.docker.com):Getting Startedから始める
- Kubernetes公式チュートリアル(kubernetes.io):インタラクティブで学べる
- CKA(Certified Kubernetes Administrator)試験:実務スキルを証明する業界標準資格
- Udemy「Docker & Kubernetes: The Practical Guide」:英語だが最も体系的な動画コース
まとめ
Docker・Kubernetesはクラウドネイティブ開発の基盤技術として、2026年においても不可欠なスキルです。Dockerから始めてDocker Compose・Kubernetesと段階的に習得することで、インフラ・DevOpsエンジニアとしての市場価値を大きく高めることができます。