DockerとKubernetesとは?なぜ今コンテナが重要なのか
現代のソフトウェア開発において、DockerとKubernetes(K8s)は欠かせない技術スタックとなっています。2026年現在、クラウドネイティブな開発スタイルが主流となり、エンジニアとしてこれらの技術を習得することは、キャリアアップにおいても非常に重要です。
この記事では、完全な初心者でもDockerとKubernetesを理解できるよう、基礎から実践まで段階的に解説します。実際にコマンドを叩きながら学べるハンズオン形式で進めていきます。
この記事で学べること
- Dockerの基本概念(コンテナ・イメージ・Dockerfile)
- Docker Composeを使ったマルチコンテナ環境の構築
- Kubernetesの基本アーキテクチャとコンポーネント
- 実践的なKubernetesデプロイメント手順
- 本番環境で役立つベストプラクティス
Dockerとは?コンテナ技術の基礎を理解する
Dockerは、アプリケーションをコンテナと呼ばれる軽量な仮想環境でパッケージ化し、どこでも同じ環境で実行できるようにするプラットフォームです。
仮想マシン(VM)との違い
従来の仮想マシン(VM)と比較したコンテナのメリットを以下の表にまとめます。
| 項目 | 仮想マシン(VM) | Dockerコンテナ |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| リソース消費 | 大(GBオーダー) | 小(MBオーダー) |
| OS | 各VMに独立したOS | ホストOSを共有 |
| 移植性 | 低い | 高い |
| スケーリング | 遅い | 高速 |
Dockerのインストールと基本コマンド
インストール方法(macOS・Windows・Linux)
Docker公式サイトから「Docker Desktop」をダウンロードしてインストールするのが最も簡単です。
# インストール確認
docker --version
docker info
# Hello Worldコンテナの実行
docker run hello-world
# イメージ一覧表示
docker images
# コンテナ一覧(実行中)
docker ps
# コンテナ一覧(全て)
docker ps -a
Dockerfileの作成と独自イメージのビルド
Dockerfileは、Dockerイメージを作成するための設計書です。以下はNode.jsアプリケーションのDockerfileの例です。
# Dockerfile
FROM node:20-alpine
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係のコピーとインストール
COPY package*.json ./
RUN npm ci --only=production
# アプリケーションのコピー
COPY . .
# ポートの公開
EXPOSE 3000
# アプリケーションの起動
CMD ["node", "server.js"]
# イメージのビルド
docker build -t myapp:1.0 .
# コンテナの起動(バックグラウンド)
docker run -d -p 3000:3000 --name myapp myapp:1.0
# ログの確認
docker logs myapp
# コンテナ内でコマンド実行
docker exec -it myapp sh
# コンテナの停止・削除
docker stop myapp
docker rm myapp
Docker Composeで複数コンテナを管理する
Docker Composeを使うと、複数のコンテナ(例:Webアプリ+DB+Redis)を一つの設定ファイルで管理できます。
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:password@db:5432/mydb
depends_on:
- db
- redis
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
# Docker Compose の主要コマンド
docker compose up -d # 全サービスを起動
docker compose down # 全サービスを停止・削除
docker compose logs -f web # ログをフォロー
docker compose ps # サービス一覧
docker compose exec web sh # コンテナ内でシェル起動
Kubernetesとは?オーケストレーションの基礎
Kubernetes(K8s)は、Googleが開発したコンテナオーケストレーションプラットフォームです。大規模なコンテナ化されたアプリケーションの自動デプロイ、スケーリング、管理を行います。
Kubernetesの主要コンポーネント
- Pod:最小のデプロイ単位。1つ以上のコンテナを含む
- Deployment:Podのレプリカ数管理とローリングアップデート
- Service:Podへのネットワークアクセスを提供
- Ingress:外部からのHTTPルーティング
- ConfigMap / Secret:設定値と機密情報の管理
- Namespace:リソースの論理的な分離
基本的なKubernetesマニフェストの書き方
# 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
ports:
- containerPort: 3000
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: ClusterIP
kubectlコマンドチートシート
# よく使うkubectlコマンド
# クラスター情報
kubectl cluster-info
kubectl get nodes
# リソースの確認
kubectl get pods -n default
kubectl get deployments
kubectl get services
# マニフェストの適用
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# ログの確認
kubectl logs pod-name -f
kubectl logs -l app=myapp --tail=100
# デバッグ
kubectl describe pod pod-name
kubectl exec -it pod-name -- /bin/sh
# スケーリング
kubectl scale deployment myapp-deployment --replicas=5
# ローリングアップデート
kubectl set image deployment/myapp-deployment myapp=myapp:2.0
kubectl rollout status deployment/myapp-deployment
kubectl rollout undo deployment/myapp-deployment # ロールバック
# 削除
kubectl delete -f deployment.yaml
本番環境でのベストプラクティス
1. セキュリティ強化
- rootユーザーを使わない:Dockerfileで
USER命令を使い非rootユーザーで実行 - イメージのスキャン:Trivyなどのツールで脆弱性を定期的にチェック
- Secretの適切な管理:環境変数でなくKubernetes Secretまたは外部シークレット管理ツールを使用
- ネットワークポリシー:Pod間の通信を必要最小限に制限
2. パフォーマンス最適化
- マルチステージビルド:最終イメージのサイズを最小化
- リソース制限の設定:requestsとlimitsを必ず設定する
- HorizontalPodAutoscaler:負荷に応じた自動スケーリング
- 読み取り専用ファイルシステム:
readOnlyRootFilesystem: trueの設定
3. 監視・ロギング
- Prometheus + Grafana:メトリクス収集と可視化
- EFK/ELK Stack:ログの一元管理
- Jaeger:分散トレーシング
- Alertmanager:アラート通知の設定
おすすめの学習リソース
DockerとKubernetesをさらに深く学びたい方には、以下のリソースを強くおすすめします。
書籍・オンライン講座
- Udemy「Docker & Kubernetes: The Practical Guide」:英語ですが最も体系的で実践的
- 「仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん」:日本語の入門書として最適
- Kubernetes公式ドキュメント:最新情報はここが一番
- Play with Docker:ブラウザ上でDockerを試せる無料環境
まとめ:コンテナ技術をマスターしてキャリアを加速しよう
DockerとKubernetesは、現代のクラウドネイティブ開発において必須のスキルです。本記事で学んだ内容を振り返ります。
- ✅ Dockerはアプリをコンテナ化し、環境差異をなくす技術
- ✅ Docker Composeで複数コンテナを簡単に管理できる
- ✅ Kubernetesは本番規模でのコンテナオーケストレーションに最適
- ✅ セキュリティと監視の設定が本番運用では必須
まずはDockerのインストールから始めて、小さなアプリのコンテナ化を試してみてください。実際に手を動かすことが、コンテナ技術習得への最短ルートです。
関連記事もぜひチェックしてください: