Docker — платформа контейнеризации, позволяющая упаковать приложение со всеми зависимостями в изолированный контейнер. Для QA-инженера Docker незаменим для воспроизводимого тестирования, поднятия тестовых окружений, запуска автотестов в изолированной среде и локальной работы с микросервисами.
1. Зачем тестировщику Docker
Задача
Описание
Воспроизводимые окружения
Тестовое окружение идентично на всех машинах
Поднятие зависимостей
Базы данных, очереди, кеши за одну команду
Изоляция тестов
Каждый тест-сьют в отдельном контейнере
Локальные микросервисы
Запуск нескольких сервисов одновременно
Тестирование в CI/CD
Тесты в Docker-контейнере на любом сервере
Быстрая очистка
Удалить контейнер — и система чистая
2. Контейнеры vs образы
Образ (Image)
Шаблон для создания контейнера
Содержит ОС, приложение, зависимости, конфигурацию
Неизменяемый (immutable) —после того как создан, не меняется
Хранится в реестре (Docker Hub, приватный registry)
Примеры: postgres:15, nginx:latest, python:3.11
Контейнер (Container)
Запущенный экземпляр образа
Изолирован от хостовой системы и других контейнеров
# Остановить и удалить всё
docker compose down -v
# Удалить все неиспользуемые ресурсы
docker system prune -a --volumes
# Поднять заново
docker compose up -d
# Проверить
docker compose ps
docker compose logs
8. Dockerfile для тестов
Простой Dockerfile для автотестов
FROM python:3.11-slim
# Рабочая директория
WORKDIR /app
# Установка зависимостей
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копирование тестов
COPY tests/ ./tests/
COPY conftest.py .
# Переменные окружения (по умолчанию)
ENV BASE_URL=http://localhost:8080
ENV BROWSER=chrome
# Команд по умолчанию — запуск тестов
CMD ["pytest", "tests/", "-v", "--tb=short"]
Сборка и запуск
# Собрать образ
docker build -t my-tests:latest .
# Запустить тесты
docker run --rm \
-e BASE_URL=http://host.docker.internal:8080 \
my-tests:latest
# Запустить конкретный тест
docker run --rm my-tests:latest pytest tests/test_login.py -v
9. Полезные команды-шпаргалки
Управление ресурсами
# Объём использования диска
docker system df
# Очистка всех неиспользуемых ресурсов
docker system prune -a
# Очистка только контейнеров
docker container prune
# Очистка только образов
docker image prune -a
# Очистка только томов
docker volume prune
Работа с сетями
# Список сетей
docker network ls
# Создать сеть
docker network create test-net
# Запустить контейнер в сети
docker run -d --name app --network test-net my-app
# Подключить существующий контейнер к сети
docker network connect test-net my-container
Работа с томами (volumes)
# Список томов
docker volume ls
# Создать том
docker volume create test-data
# Использовать том
docker run -d -v test-data:/data postgres:15
# Монтировать локальную папку
docker run -d -v $(pwd)/data:/app/data my-app
10. Типичные проблемы и решения
Проблема
Решение
Порт уже занят
Найти процесс: lsof -i :5432 или сменить порт: -p 5433:5432
Контейнер не запускается
Проверить логи: docker logs container_name
Нет места на диске
docker system prune -a --volumes
Контейнер не видит хост
Использовать host.docker.internal вместо localhost (macOS/Windows)
Медленная работа на macOS
Использовать named volumes вместо bind mounts
Изменения в volume не видны
Volume живёт отдельно от образа — удалить и пересоздать
Permission denied
Запустить от имени админа или добавить пользователя в группу docker
Образ не скачивается
Проверить интернет, попробовать docker logout и docker login
11. Сравнение: ручная установка vs Docker
Без Docker
С Docker
Установка PostgreSQL
Скачать инсталлятор, настроить, создать БД
docker run postgres:15
Время
10–30 минут
30 секунд
Воспроизводимость
Зависит от ОС и версий
Идентично на любой машине
Очистка
Удалить программы, почистить реестр
docker rm -f container
Несколько версий
Сложно (конфликты портов)
Легко (разные порты)
Параллельные тесты
Проблемы с ресурсами
Изолированные контейнеры
Итоги
Операция
Команда
Скачать образ
docker pull image:tag
Запустить контейнер
docker run -d --name name image
С маппингом портов
docker run -d -p 8080:8080 image
С переменными
docker run -e VAR=val image
Список контейнеров
docker ps -a
Логи
docker logs -f name
Подключиться
docker exec -it name bash
Остановить
docker stop name
Удалить
docker rm -f name
Compose: запустить
docker compose up -d
Compose: остановить
docker compose down -v
Очистка
docker system prune -a
Docker позволяет QA-инженеру за секунды поднять полноценное тестовое окружение, которое раньше требовало часов настройки. Это один из ключевых инструментов современного тестировщика.