Блог
Теория и инструменты тестирования

Docker для тестировщика: зачем нужен и как работает

Docker на собеседовании тестировщика спрашивают нечасто — по опыту школы, примерно в одном случае из десяти-пятнадцати, — но ответ должен звучать уверенно, потому что вопрос всё равно встречается. При этом на реальных проектах 99% тестировщиков Docker напрямую не трогают: с ним работают разработчики и DevOps-инженеры. Разбираться в теме всё равно стоит — хотя бы чтобы понимать, что происходит при сборке проекта, и уметь честно сказать на собеседовании: «Разворачивал базовый контейнер, была практика с PostgreSQL в контейнере». Разберём, откуда вообще берётся необходимость в Docker и чем контейнер отличается от виртуальной машины.

Зависимости в разработке: метафора постройки дома

IT-сфера в этом смысле не особенная — она устроена так же, как любая другая индустрия, просто сейчас на слуху. Разработку удобно сравнить со стройкой дома: есть застройщик (инвестор, который финансирует проект), подрядчики (команды разработчиков), субподрядчики (отдельные специалисты) и поставщики материалов — в разработке их роль играют готовые библиотеки и внешние API. У поставщиков материалов тоже есть свои поставщики: если где-то в этой цепочке случается сбой — скажем, завод перестаёт поставлять комплектующие, — стройка встаёт. В разработке то же самое: ваш проект зависит от библиотеки вроде React, React зависит от своих собственных пакетов, а те — от следующего уровня зависимостей. Уязвимость или поломка в нижнем звене отражается на самом верху.
Зависимости проекта видны прямо в коде — например, во фронтенд-проекте в файле package.json перечислены используемые библиотеки и их версии. Такие фреймворки, как React или Vue, — обёртки над обычным JavaScript с готовыми методиками поверх него, и подавляющее большинство проектов их используют, потому что нет смысла писать всё с нуля, если можно взять готовое и проверенное решение. То же самое с готовыми компонентами вроде Bootstrap: формы, сетки, карусели, всплывающие подсказки — устанавливаются одной командой и используются сразу.
Чтобы проект вообще запустился, нужно окружение: Node.js, база данных вроде PostgreSQL, серверные технологии, фреймворки — и если хотя бы одной составляющей не хватает, проект не заведётся. Дальше добавляются практические проблемы: конфликт версий одной и той же библиотеки в разных частях системы, разница между операционными системами разработчиков. Решение этих проблем — изоляция окружения, и здесь есть два подхода: виртуализация и контейнеризация.

Виртуализация: что такое виртуальная машина

Если у вас на ноутбуке установлен Windows или macOS, а нужен ещё и Linux, есть несколько вариантов: снести текущую систему и поставить Linux вместо неё, настроить dual boot с выбором системы при загрузке, или развернуть виртуальную машину — по сути, ещё один компьютер внутри уже работающего. Виртуальная машина использует часть выделенных ресурсов реальной системы — процессора, памяти, диска, — при этом работает внутри основной ОС, не заменяя её, а ресурсы потребляет через своеобразный переходник в виде самой реальной операционной системы.
Для виртуализации есть несколько инструментов: VirtualBox — бесплатный и кроссплатформенный, Parallels Desktop — платный, но удобный вариант для macOS, VMware — используется в основном бизнесом на Windows и Linux. Виртуальные машины пригождаются в разных задачах: запустить две независимые ОС на одном железе, безопасно протестировать подозрительную программу в изолированной песочнице, проверить сайт или приложение на другой операционной системе. Но у ВМ есть существенное ограничение для плотной ежедневной работы с проектами: она медленная, требует много ресурсов и весит немало, потому что внутри — целая операционная система со всеми её программами, даже если вам нужна только одна.

Что такое Docker и чем контейнер отличается от ВМ

Docker решает ту же задачу изоляции окружения, но иначе. Это программное обеспечение для автоматизации развёртывания и управления приложениями в контейнерах. Контейнеризация похожа на виртуализацию, но с важным отличием: в виртуальной машине приложение изолируется внутри целой отдельной операционной системы, а в контейнере никакой отдельной ОС нет — это просто изолированная «коробочка» с ровно тем набором технологий, который нужен конкретному приложению.
Показательный пример: на одном сервере с Linux можно развернуть контейнер с приложением А, использующим Bootstrap 5.3, и рядом контейнер с приложением Б на Bootstrap 4.3 — они не конфликтуют, потому что полностью изолированы друг от друга. Важный нюанс: Docker в чистом виде работает только на Linux. Если ставить его на Windows, система автоматически разворачивает виртуальную машину с Linux, и уже внутри неё поднимается контейнер — то есть прямая, «родная» работа Docker возможна именно на Linux.
По сравнению с виртуальной машиной контейнер запускается быстрее, потребляет намного меньше ресурсов и весит меньше — потому что содержит только необходимое для проекта, а не целую операционную систему с калькулятором, текстовым редактором и прочим лишним. Ключевая разница между ними — именно в размере образа: виртуальная машина — это вся ОС целиком, контейнер — только то, что реально нужно.

Архитектура Docker и Docker Hub

Устройство Docker описывается цепочкой: Docker Client, через который отдаются команды, → Docker Engine (он же Daemon) — движок, который эти команды выполняет, → сами контейнеры → Linux → железо. В отличие от виртуальной машины, которая обращается к железу напрямую, Docker всегда проходит через Linux.
Отдельного внимания заслуживает Docker Hub — хранилище готовых образов (шаблонов контейнеров) для самых распространённых технологий. Командой docker pull nginx скачивается готовый, преднастроенный образ веб-сервера nginx, командой docker pull postgres — готовый образ PostgreSQL. Хорошая аналогия для контейнера — эмиграционная фирма, работающая «под ключ»: оформит документы, страховку, всё необходимое сразу, и вам не нужно решать каждую задачу отдельно вручную. С контейнером то же самое: развернул — и все нужные зависимости и технологии уже на месте, готовы к использованию. Это особенно удобно с базами данных: понадобилась ещё одна PostgreSQL — разворачивается новый контейнер за секунды, что-то сломалось — старый контейнер удаляется и поднимается чистый новый, без необходимости разбираться, что именно пошло не так.

Что реально нужно знать тестировщику про Docker

Для тестировщика Git и Docker находятся как бы на одной параллели по важности инструментов, но Git всё же весомее — и вопрос о нём на собеседовании возникает практически всегда, а про Docker — заметно реже. На большинстве проектов тестировщик не настраивает и не поддерживает Docker-инфраструктуру самостоятельно — этим занимаются разработчики и DevOps. Но базовое понимание всё равно нужно: чем контейнер отличается от виртуальной машины, зачем существует Docker Hub, и как выглядит команда docker pull. Практического опыта в духе «разворачивал контейнер с PostgreSQL» обычно достаточно, чтобы уверенно ответить на собеседовании — этого действительно ждут от тестировщика, а не экспертизы уровня DevOps-инженера.
Разница между чтением теории про контейнеры и реальным пониманием того, зачем они нужны, ощущается именно тогда, когда сам разворачиваешь первый контейнер и видишь, что база данных поднялась за секунды без единой ручной настройки. На курсе «Инженер по ручному тестированию» это часть домашних заданий Спринта 10: установка Linux на VirtualBox, разворачивание базового контейнера и контейнера с PostgreSQL — по шагам, с проверкой ментора, а не абстрактно по документации.
-------

Полезные ссылки школы

Сайт Quality Academy:
https://quality-academy.ru/main
Telegram-канал:
https://t.me/quality_academy
YouTube-канал:
https://www.youtube.com/@quality_academy
ВКонтакте:
https://vk.com/quality_academy
Канал отзывов учеников (58+ отзывов):
https://t.me/quality_academy_reviews
Задать вопрос менеджеру:
https://t.me/quality_academy_bot
Тест «Подойдёт ли вам тестирование»:
https://quiz.quality-academy.ru
5000+ вопросов с собесов тестировщика — бот-тренажёр:
https://t.me/quality_academy_interview_bot
3 практические задачи и дорожная карта:
https://t.me/quality_academy_tasks_bot
Бесплатные тренажёры — SQL Arena, Playwright Arena, Python Arena:
SQL Arena · Playwright Arena · Python Arena