ローカル開発のための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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Go向けマルチステージDockerビルド
- 環境設定とシークレット
- ローカル開発のためのDocker Compose
- ヘルスチェックと本番環境のチューニング