Dockerはアプリケーションをコンテナとして動かす技術で、現代のエンジニアにとって必須スキルです。2026年現在、ほぼすべての企業がDockerを採用しています。本記事では、Dockerの基礎から本番環境へのデプロイまでを解説します。
Dockerとは?仮想マシンとの違い
| 比較項目 | Docker(コンテナ) | 仮想マシン(VM) |
|---|---|---|
| 起動時間 | 数秒 | 数分 |
| リソース消費 | 少ない(ホストOSを共有) | 多い(OSを丸ごと持つ) |
| ポータビリティ | 高い(どこでも同じ動作) | 中程度 |
| 分離レベル | プロセスレベル | ハードウェアレベル |
Dockerのインストール
# macOS(Docker Desktop)
brew install --cask docker
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# バージョン確認
docker --version
docker compose version
Dockerfileの書き方
Node.jsアプリケーションのDockerfileサンプルです。
# Node.js アプリ用 Dockerfile(マルチステージビルド)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 本番用イメージ(最小サイズ)
FROM node:20-alpine AS production
WORKDIR /app
ENV NODE_ENV=production
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で複数コンテナを管理
# docker-compose.yml(Webアプリ + DB + Redis構成)
version: '3.9'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/myapp
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
restart: unless-stopped
db:
image: postgres:16-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
本番デプロイのベストプラクティス
- 🔒 セキュリティ:rootユーザーではなく専用ユーザーで実行
- 📦 イメージサイズ削減:マルチステージビルド・alpineベースイメージを使用
- 🏥 ヘルスチェック:HEALTHCHECKでコンテナの死活監視
- 📊 ログ管理:stdout/stderrに出力してホストで集約
- 🔄 再起動ポリシー:restart: unless-stoppedで自動復旧
KubernetesへのステップアップPath
Dockerをマスターしたら、次はKubernetes(K8s)でコンテナオーケストレーションを学びましょう。
- Docker基礎(本記事)
- Docker Compose習得
- Kubernetes基礎(Pod・Service・Deployment)
- Helm・ArgoCD(GitOps)
- EKS/GKE/AKSでの本番運用
まとめ
Dockerはモダンなソフトウェア開発において欠かせない技術です。本記事の内容を実践することで、「どの環境でも動く」アプリケーションを構築できるようになります。次のステップとしてKubernetes・CI/CDパイプラインの構築も挑戦してみてください。