コンテナ技術はなぜエンジニアの必須スキルになったのか
2026年の求人市場では、DockerとKubernetesの知識はバックエンドエンジニア・インフラエンジニアの必須スキルとして定着しています。「自分のマシンでは動いたのに本番では動かない」問題を根本解決するコンテナ技術を、この記事でゼロから習得しましょう。
Dockerとは何か?仮想マシンとの違い
Dockerはアプリケーションをコンテナと呼ばれる軽量な仮想環境で実行する技術です。従来の仮想マシン(VM)と比較してください:
| 比較項目 | 仮想マシン(VM) | Dockerコンテナ |
|---|---|---|
| 起動時間 | 数分 | 数秒 |
| リソース消費 | 大(OSごと仮想化) | 小(OSカーネル共有) |
| ポータビリティ | 低い | 高い |
| イメージサイズ | 数GB〜数十GB | 数MB〜数百MB |
Dockerの基本コマンド集
# イメージのダウンロード
docker pull nginx:latest
# コンテナの起動(バックグラウンド実行)
docker run -d -p 80:80 --name my-nginx nginx
# 実行中のコンテナ確認
docker ps
# コンテナの停止
docker stop my-nginx
# コンテナのログ確認
docker logs my-nginx
# コンテナの中に入る
docker exec -it my-nginx bash
# 不要なリソースの一括削除
docker system prune -a
Dockerfileの書き方(Node.jsアプリの例)
# ベースイメージ(軽量版のAlpine Linuxを使用)
FROM node:20-alpine
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係ファイルをコピー(キャッシュ効率化)
COPY package*.json ./
# 依存関係のインストール
RUN npm ci --only=production
# アプリケーションコードをコピー
COPY . .
# TypeScriptのビルド
RUN npm run build
# 非rootユーザーで実行(セキュリティ対策)
USER node
# ポートを公開
EXPOSE 3000
# アプリケーションの起動
CMD ["node", "dist/index.js"]
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://cache:6379
depends_on:
- db
- cache
volumes:
- .:/app
- /app/node_modules
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
cache:
image: redis:7-alpine
command: redis-server --maxmemory 256mb
volumes:
postgres_data:
Kubernetesの基本概念
Kubernetes(K8s)はコンテナのオーケストレーションツールです。複数のDockerコンテナを自動的に管理・スケールします。
K8sの主要オブジェクト
- Pod:K8sの最小デプロイ単位。1つ以上のコンテナをまとめたもの
- Deployment:Podの望ましい状態を定義し、自動復旧やローリングアップデートを管理
- Service:Podへのネットワークアクセスを提供するエンドポイント
- Ingress:外部からのHTTP/HTTPSトラフィックをServiceにルーティング
- ConfigMap / Secret:設定値や機密情報をPodに注入
Kubernetesマニフェスト例
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:v1.0.0
ports:
- containerPort: 3000
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: app-secrets
key: database-url
AWS ECS / Google Cloud Runへのデプロイ
本番環境へのデプロイには、マネージドサービスの活用がおすすめです:
- AWS ECS (Fargate):サーバーレスコンテナ実行。自動スケーリング対応
- Google Cloud Run:HTTPリクエスト時のみ課金。小規模サービスに最適
- Azure Container Apps:KEDA対応のイベント駆動スケーリング
Docker学習ロードマップ2026
- Dockerのインストールと基本コマンドの習得(1〜2日)
- Dockerfileの作成と最適化(3〜5日)
- Docker Composeでマルチコンテナ環境構築(1週間)
- Kubernetesの基本概念とkubectlコマンド(2週間)
- Helmチャートによるアプリケーション管理(1週間)
- CI/CDパイプラインへの組み込み(2週間)
まとめ
DockerとKubernetesはモダンなソフトウェア開発に欠かせないスキルです。本記事のコマンドとマニフェスト例を実際に手を動かして試すことで、コンテナ技術の理解が深まります。まずはDockerのインストールから始め、段階的にKubernetesへとスキルアップを目指しましょう。