Ответ
Да, я активно использую Docker Compose. Это основной инструмент для организации локальной разработки и тестирования многокомпонентных приложений.
Основная задача, для которой я его применяю, — это декларативное описание и запуск окружения, состоящего из нескольких сервисов. Например, типичный docker-compose.yml
для Go-приложения включает:
- Сам Go-сервис.
- Базу данных, например, PostgreSQL или MySQL.
- Кэш, например, Redis.
- Очередь сообщений, например, RabbitMQ или NATS.
Пример docker-compose.yml
:
version: '3.8'
services:
# Сервис нашего Go-приложения
app:
build: . # Собрать образ из Dockerfile в текущей директории
ports:
- "8080:8080"
environment:
- DB_HOST=postgres
- REDIS_HOST=redis
depends_on: # Запустить после старта postgres и redis
- postgres
- redis
# Сервис базы данных
postgres:
image: postgres:14-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
# Сервис кэша
redis:
image: redis:7-alpine
Ключевые преимущества:
- Воспроизводимость: Гарантирует, что у всех разработчиков в команде одинаковое и предсказуемое окружение.
- Изоляция: Сервисы работают в изолированных контейнерах, не засоряя основную систему.
- Простота управления: Все окружение поднимается одной командой (
docker-compose up -d
) и останавливается другой (docker-compose down
). - Интеграционное тестирование: Позволяет легко запускать тесты, которые требуют наличия реальной БД или кэша.
В то время как для production-окружений предпочтительнее использовать оркестраторы вроде Kubernetes, Docker Compose остается незаменимым инструментом для разработки и CI/CD.