Вопрос с собеседования · DevOps
Как поднять приложение вместе с базой данных через docker compose?
JuniorDocker и контейнеры
Ещё спрашивают так:
- Что такое docker-compose.yml?
- Как подключиться к PostgreSQL из соседнего контейнера?
Коротко
compose.yaml описывает несколько сервисов, их образы или сборку, переменные окружения, порты, тома и зависимости; docker compose up -d поднимает всё одной командой, down — останавливает. Сервисы в одном проекте оказываются в общей сети и находят друг друга по имени сервиса: приложение подключается к базе по адресу db:5432, а не localhost. Данные базы — в именованном томе, иначе пропадут при пересоздании.
- depends_on с healthcheck — ждать, пока база готова, а не просто запущена
- Секреты — в файле .env, который не коммитят
- docker compose logs -f app — логи сервиса
А ещё ports нужен только для доступа с хоста; между контейнерами порты открыты в общей сети
Подробно
Пример:
services:
app:
build: .
environment:
DATABASE_URL: postgres://app:${DB_PASSWORD}@db:5432/app
ports: ["8000:8000"]
depends_on:
db: {condition: service_healthy}
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes: [pgdata:/var/lib/postgresql/data]
healthcheck:
test: ["CMD", "pg_isready", "-U", "app"]
interval: 5s
volumes:
pgdata:Что хотят услышать
- Описание сервисов в compose.yaml.
- Обращение по имени сервиса.
- Том для данных базы.
- Healthcheck и .env.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Сервисы описывают в compose.yaml; приложение подключается к базе по localhost, а depends_on без healthcheck гарантирует готовность базы
- ✗Данные PostgreSQL сохраняются при пересоздании контейнера и без тома
- ✗depends_on без healthcheck гарантирует, что база готова принимать соединения
- ✓Сервисы в compose.yaml, запуск — docker compose up; друг друга находят по имени сервиса, данные БД — в томе
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.