Docker 開発環境
「私のマシンでは動くのに!」——この古典的な台詞の最終的な解決策がDockerです。
Dockerを使うと、開発環境が本番環境と完全に一致し、「開発では動くのに本番で壊れる」という悪夢を排除できます。
🔥 Vibe Prompt
「完全なDocker開発環境を作成:Python FastAPIバックエンド、PostgreSQLデータベース、Redisキャッシュを含むマルチサービスdocker-compose設定。dev/staging/productionの3環境を分離。」
Docker 基本概念
| 概念 | 説明 | 類推 | |------|------|------| | イメージ | 読み取り専用のテンプレート | ISOインストールディスク | | コンテナ | イメージの実行インスタンス | インストール済みOS | | Dockerfile | イメージ構築手順書 | インストールマニュアル | | ボリューム | 永続的データ保存 | 外付けハードドライブ | | ネットワーク | コンテナ間通信の仮想ネットワーク | LAN |
Dockerfile ベストプラクティス
# マルチステージビルド
# ステージ1: ビルド
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# ステージ2: 実行(より小さいイメージ)
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]
Docker Compose 設定
version: '3.8'
services:
api:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "8000:8000"
volumes:
- .:/app
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/app
depends_on:
- db
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=app
volumes:
pgdata:
開発 vs 本番環境
| 項目 | 開発 | 本番 | |------|------|------| | コード | ボリュームマウント(ホットリロード) | イメージに内蔵 | | デバッグ | デバッグポート公開 | 無効 | | ログ | 詳細出力 | 構造化JSON | | データベース | 自動リセット可能 | 永続化・定期バックアップ |
実践練習
💡 Vibe Coding 練習:AIに依頼:
- プロジェクトの完全なdocker-compose設定を作成
- マルチステージDockerfileでイメージサイズを1GB→100MBに削減
- ヘルスチェックと自動再起動機構を設定
- dev/test/prodの3環境設定を作成
- CI/CD用Dockerビルドスクリプトを作成
Dockerとデータベース
services:
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
api:
build: .
depends_on:
- db
マルチステージビルドの利点
- イメージサイズを最大90%削減
- 依存関係と実行環境を分離
- セキュリティ向上(不要なツールを含めない)
Docker Compose のヒント
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- .:/app # ホットリロード用
environment:
- DEBUG=true
コンテナのデバッグ
docker compose exec app bash
docker compose logs -f app
docker compose restart app