Ответ
Да, развернуть PostgreSQL в Docker — стандартная практика для создания изолированных сред. Вот пример для быстрого старта и более продвинутая конфигурация.
1. Базовый запуск для разработки:
docker run -d
--name dev-postgres
-e POSTGRES_PASSWORD=strongpassword
-e POSTGRES_DB=myapp
-p 5432:5432
postgres:15-alpine
2. Продакшен-ориентированный пример с Docker Compose и томами:
# docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: app-postgres
restart: unless-stopped
environment:
POSTGRES_USER: app_user
POSTGRES_PASSWORD: ${DB_PASSWORD} # Берется из .env файла
POSTGRES_DB: app_db
volumes:
# Постоянное хранение данных
- postgres_data:/var/lib/postgresql/data
# Подключение SQL-скриптов для инициализации
- ./init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app_user -d app_db"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres_data:
3. Ключевые практики для DevOps:
- Версионирование: Всегда фиксируйте конкретную версию тега (не
latest), напримерpostgres:15-alpine. - Управление секретами: Пароли (
POSTGRES_PASSWORD) должны передаваться через переменные окружения, а не храниться в коде. Используйте.envфайлы или секреты оркестратора (Kubernetes Secrets, Docker Swarm secrets). - Тома (Volumes): Обязательно монтируйте том для
/var/lib/postgresql/data, иначе данные будут потеряны при пересоздании контейнера. - Alpine-образы: Используйте
-alpineтеги для уменьшения размера образа и поверхности атаки. - Health Checks: Настройте
healthcheckдля мониторинга готовности БД оркестратором.