0Pricing
Go Academy · レッスン

ローカル開発のためのDocker Compose

GoサービスをPostgreSQLとRedisに接続します。

「ローカル開発のためのDocker Compose」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

Docker Compose を使う理由

Docker Compose は、複数のコンテナ(アプリ、データベース、キャッシュ、メッセージブローカー)をローカル開発向けにオーケストレーションします。手動でサービスを設定しなくても、本番環境に近い環境を再現できます。

docker-compose.yml の構成

YAML ファイルでサービス、ネットワーク、ボリュームを定義します。

services:
  app:
    build: .
    ports: ["8080:8080"]
    environment:
      - DATABASE_URL=postgres://app:pass@db/mydb
    depends_on: [db]
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

Air によるライブリロード

開発中のライブリロードには、github.com/air-verse/airを使用します。ソースコードをコンテナにマウントし、バイナリの代わりに air を実行します。

app:
  volumes:
    - .:/app
  command: air

ヘルスチェック

ヘルスチェックを定義すると、depends_on は DB が単に起動しただけでなく、実際に準備完了になるまで待機します。

db:
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U app"]
    interval: 5s
    timeout: 3s
    retries: 5
app:
  depends_on:
    db:
      condition: service_healthy

環境別のオーバーライド

ローカル専用の設定には docker-compose.override.yml(自動的にマージされます)を使用し、CI 用のベースファイルをクリーンに保ちます。

# docker-compose.override.yml
services:
  app:
    volumes: [".:/app"]  # source mount for live reload

名前付きネットワーク

サービスを共有のカスタムネットワークに配置すると、サービス名による DNS ベースのサービスディスカバリを利用できます。

networks:
  backend:
    driver: bridge
services:
  app:
    networks: [backend]
  db:
    networks: [backend]

環境変数ファイル

env_fileキーを使用して .env ファイルをコンテナに読み込み、シークレットを YAML の外部で管理します。

app:
  env_file: .env.local

コマンドの実行

よく使う Compose コマンド:

docker compose up -d      # start in background
docker compose down -v    # stop and remove volumes
docker compose logs -f app # stream app logs
docker compose exec db psql -U app mydb # run in container

データベースへの初期データ投入

SQL の初期データ投入用ファイルを postgres イメージの /docker-entrypoint-initdb.d ディレクトリにマウントします。これらのファイルは、コンテナを初めて作成するときに実行されます。

db:
  volumes:
    - ./migrations:/docker-entrypoint-initdb.d

プロファイル

Compose のプロファイルを使用すると、必要な場合にだけオプションのサービス(監視スタックなど)を起動できます。

services:
  grafana:
    profiles: ["monitoring"]

CI での Compose

CI では Compose を使用して、実際のサービスに対して統合テストを実行します。GitHub Actions は Docker Compose をネイティブにサポートしています。ヘルスチェックを使用して、サービスの準備が完了するまで待機します。

クイックチェック

Docker Compose で、アプリコンテナがデータベースの準備完了を待機するようにするには、どうすればよいですか。

まとめ:Docker Compose

要点:

  • docker-compose.yml で、すべてのサービス、ネットワーク、ボリュームを定義します
  • サービスの準備完了には depends_on と healthcheck を使用します
  • ローカル開発の設定にはオーバーライドファイルを、シークレットには env_file を使用します
  • ライブリロードには Air を使用し、ソースコードをボリュームとしてマウントします

よくある質問

「ローカル開発のためのDocker Compose」レッスンは無料ですか?

はい。「ローカル開発のためのDocker Compose」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「ローカル開発のためのDocker Compose」で何を学びますか?

GoサービスをPostgreSQLとRedisに接続します。 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ローカル開発のためのDocker Compose」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Go向けマルチステージDockerビルド
  2. 環境設定とシークレット
  3. ローカル開発のためのDocker Compose
  4. ヘルスチェックと本番環境のチューニング
← Go Academyに戻る