Docker Compose для локальной разработки
Связывание сервиса Go с PostgreSQL и Redis
«Docker Compose для локальной разработки» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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:
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 с начальными данными к каталогу /docker-entrypoint-initdb.d образа postgres — они выполняются при первом создании контейнера:
db:
volumes:
- ./migrations:/docker-entrypoint-initdb.dПрофили
Используйте профили Compose, чтобы запускать необязательные сервисы (например, стек мониторинга) только при необходимости:
services:
grafana:
profiles: ["monitoring"]Compose в непрерывной интеграции
Запускайте интеграционные тесты в непрерывной интеграции с реальными сервисами, используя Compose. GitHub Actions изначально поддерживает Docker Compose; используйте проверки состояния, чтобы дождаться готовности сервисов.
Быстрая проверка
Как обеспечить ожидание контейнером приложения готовности базы данных в Docker Compose?
Итоги: Docker Compose
Основные положения:
- docker-compose.yml определяет все сервисы, сети и тома
- Используйте depends_on вместе с healthcheck для проверки готовности сервиса
- Файлы переопределений предназначены для настроек локальной разработки, а env_file — для секретов
- Air обеспечивает горячую перезагрузку; подключайте исходный код как том
Часто задаваемые вопросы
Урок «Docker Compose для локальной разработки» бесплатный?
Да — полный текст урока «Docker Compose для локальной разработки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Docker Compose для локальной разработки»?
Связывание сервиса Go с PostgreSQL и Redis Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Docker Compose для локальной разработки»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Многоэтапная сборка Docker для Go
- Конфигурация окружения и секреты
- Docker Compose для локальной разработки
- Проверки работоспособности и настройка для эксплуатации