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に依頼:

  1. プロジェクトの完全なdocker-compose設定を作成
  2. マルチステージDockerfileでイメージサイズを1GB→100MBに削減
  3. ヘルスチェックと自動再起動機構を設定
  4. dev/test/prodの3環境設定を作成
  5. 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

マルチステージビルドの利点

  1. イメージサイズを最大90%削減
  2. 依存関係と実行環境を分離
  3. セキュリティ向上(不要なツールを含めない)

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

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!