Docker・Kubernetesとは?なぜ今コンテナ技術が必須なのか
2026年現在、クラウドネイティブ開発においてDockerとKubernetesは事実上の標準技術となっています。本記事では、コンテナ技術の基礎から始まり、実際の本番環境での運用まで、体系的に解説します。
📌 この記事で学べること
- Dockerの基本概念とインストール手順
- Dockerfileの書き方とベストプラクティス
- Docker Composeによるマルチコンテナ管理
- Kubernetesの基本アーキテクチャ
- 本番環境でのKubernetes運用ポイント
Dockerの基礎知識
コンテナとは何か?仮想マシンとの違い
コンテナは、アプリケーションとその依存関係をパッケージ化した軽量な実行環境です。従来の仮想マシン(VM)と比較すると、以下の点で優れています:
| 比較項目 | 仮想マシン(VM) | コンテナ(Docker) |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| リソース消費 | 大(OSごと) | 小(カーネル共有) |
| ポータビリティ | 中 | 高 |
| スケーラビリティ | 低 | 高 |
| セキュリティ隔離 | 高 | 中 |
Dockerのインストール方法(Mac/Windows/Linux)
DockerはDocker Desktop(Mac/Windows)またはDocker Engine(Linux)でインストールできます。
# Ubuntu/Debian系のインストール手順
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
# インストール確認
docker --version
# Docker version 27.x.x, build xxxxxx
Dockerfileの書き方とベストプラクティス
Dockerfileはコンテナイメージを作成するための設計図です。良いDockerfileを書くことは、セキュリティ・パフォーマンス・保守性に直結します。
Node.jsアプリケーションの例
# マルチステージビルドで本番用イメージを最適化
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:20-alpine AS production
# セキュリティ:非rootユーザーで実行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
USER appuser
EXPOSE 3000
CMD ["node", "server.js"]
Dockerfileベストプラクティス10選
- 軽量ベースイメージを使用する(alpine系推奨)
- マルチステージビルドで最終イメージを小さく
- 非rootユーザーで実行する(セキュリティ対策)
- .dockerignoreを活用する(不要ファイルを除外)
- レイヤーを最小化する(RUN命令をまとめる)
- COPY命令よりADD命令の乱用を避ける
- 環境変数でシークレットを管理しない
- ヘルスチェックを設定する
- イメージにタグをきちんとつける
- 定期的にベースイメージを更新する
Docker Composeで複数コンテナを管理する
実際のWebアプリケーションでは、Webサーバー・データベース・キャッシュなど複数のコンテナを連携させる必要があります。Docker Composeはこれを簡単に実現します。
# docker-compose.yml(本番対応版)
version: '3.9'
services:
web:
build: .
ports:
- "80:3000"
depends_on:
- db
- redis
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:password@db:5432/myapp
restart: unless-stopped
db:
image: postgres:16-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: myapp
restart: unless-stopped
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
postgres_data:
Kubernetes(K8s)入門
Kubernetesの基本アーキテクチャ
Kubernetesは、コンテナのオーケストレーション(調整・管理)システムです。大規模なコンテナを自動デプロイ・スケーリング・管理します。
主要コンポーネント:
- Pod:最小デプロイ単位(1つ以上のコンテナ)
- Deployment:Podの宣言的管理・ローリングアップデート
- Service:Pod間の通信・外部公開
- Ingress:HTTPルーティング・SSL終端
- ConfigMap/Secret:設定・機密情報管理
- Namespace:リソースの論理的分離
基本的なDeploymentの作成
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0.0
ports:
- containerPort: 3000
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
本番運用のポイント:セキュリティ・監視・コスト最適化
セキュリティ対策
- コンテナイメージの脆弱性スキャン(Trivy、Snyk活用)
- 最小権限の原則でRBAC設定
- Network Policyでトラフィック制限
- Secretの暗号化(KMS利用)
- PodSecurityAdmissionの設定
推奨ツール・サービス
| カテゴリ | ツール | 特徴 |
|---|---|---|
| マネージドK8s | Amazon EKS / GKE / AKS | インフラ管理不要 |
| CI/CD | ArgoCD / Flux | GitOps対応 |
| 監視 | Prometheus + Grafana | メトリクス可視化 |
| ログ収集 | EFK Stack / Loki | ログ集約・検索 |
| セキュリティスキャン | Trivy / Falco | 脆弱性・異常検知 |
まとめ:Docker・Kubernetesの学習ロードマップ
Docker・Kubernetesは現代のクラウドエンジニアにとって必須スキルです。以下のロードマップで段階的に習得しましょう:
- Dockerの基礎(イメージ・コンテナ・Dockerfile)
- Docker Composeによるマルチコンテナ管理
- Kubernetesの基本コンセプト
- ローカルでminikubeやkind環境構築
- クラウドマネージドK8s(EKS/GKE/AKS)の利用
- CI/CDパイプラインとの統合
- 本番運用・監視・セキュリティ強化
コンテナ技術の習得は、エンジニアとしての市場価値を大幅に高めます。ぜひ実際に手を動かして学んでいきましょう。