Gernar
Frontend DeveloperGit, сборка и DevOps

Интервью-вопрос

Что такое Docker

Docker помогает запускать приложение в повторяемом окружении. Вы фиксируете нужную версию Node.js, зависимости, настройки сборки и runtime. Для frontend важно связать это с CI, локальной разработкой, preview-окружениями и безопасной production-сборкой.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 60 правильно

Как лучше коротко сказать, что такое Docker?

Вы начинаете ответ на интервью и хотите дать точное определение без лишней глубины.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Docker нужен, чтобы описать среду запуска как код. Вместо инструкции поставьте нужную версию Node.js, затем зависимости, затем nginx, вы собираете image и запускаете container из этого image.

На интервью держите простую связку. Dockerfile описывает, как собрать image. Image хранит слои файловой системы, зависимости и команду запуска. Container это уже запущенный процесс на основе image.

Для frontend смысл простой. Если у вас Node.js 18, у коллеги Node.js 22, а CI использует третью версию, сборка может вести себя по-разному. Docker снижает этот риск, потому что окружение фиксируется явно.

Как связать Docker с frontend-разработкой

Хороший ответ не должен звучать так, будто Docker нужен только backend. Во frontend он часто участвует в сборке SPA, SSR-приложений, тестах, Storybook, preview-окружениях и отдаче статических файлов.

Можно сказать так:

В frontend Docker помогает сделать воспроизводимую сборку. Он фиксирует Node.js, пакетный менеджер и команды. В CI это уменьшает ошибки из-за отличий окружений, а в production можно отдавать уже собранную статику из минимального образа.

Не говорите, что Docker ускоряет JavaScript в браузере. Он влияет на среду сборки и деплоя, а не на скорость выполнения клиентского кода сам по себе. Если UI делает лишние запросы, плохо обрабатывает loading или падает при ошибке API, контейнер это не исправит.

Как построить ответ на интервью

1Нужно объяснить Docker одним предложением?
Скажите, что это способ упаковать приложение и зависимости в воспроизводимый контейнер.
2Спрашивают, где польза для frontend?
Свяжите Docker с Node.js, сборкой, тестами, CI и одинаковым окружением команды.
3Спрашивают про production-образ?
Упомяните multi-stage build и минимальный финальный образ со статикой или сервером.
4Спрашивают про ограничения?
Скажите про общее ядро, секреты, размер образа, кэш и состояние вне контейнера.

Image, container и registry

Важно разделять три вещи. Image это шаблон. Container это запущенный экземпляр. Registry это место, где images хранят и откуда их скачивают. Например, внутренний registry компании или Docker Hub.

Из одного image можно запустить несколько контейнеров. Это удобно для preview-окружений, автотестов и отката версии. Если новая сборка сломалась, можно снова запустить прошлый tagged image.

Если вы смешиваете image и container, вам будет сложно объяснить кэширование, деплой и почему контейнер можно удалить без потери самого image.

Контейнер не равен виртуальной машине

Частая ловушка на интервью, назвать Docker легкой VM и остановиться. Такая фраза понятна как аналогия, но технически она грубая. Контейнеры обычно используют механизмы ОС для изоляции процессов, сети и файловой системы. Они не запускают отдельную гостевую ОС с собственным ядром.

Практический вывод такой. Контейнеры стартуют быстро и занимают меньше ресурсов, но это не магическая песочница. Следите за правами пользователя, секретами, зависимостями, сетью и тем, что попадает в image.

Пример production-сборки для frontend

Ниже пример идеи multi-stage build для статического frontend. Это не универсальный Dockerfile для любого проекта. Он показывает главный принцип. Соберите приложение в одном этапе, а в финальный образ положите только результат.

FROM node:22-alpine AS build
WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

На интервью важно объяснить причину. Зависимости и исходники нужны для сборки, но обычно не нужны в финальном образе со статикой. Поэтому итоговый image меньше, быстрее доставляется и содержит меньше лишних файлов.

Если у проекта SSR или серверный runtime, финальный этап будет другим. Например, там может остаться Node.js-сервер. Но принцип тот же. Не тащите в production все, что нужно только для сборки.

Аккуратный frontend-образ
  1. 1Зафиксировать базовый образ с нужной версией Node.js
  2. 2Сначала скопировать lock-файл и установить зависимости
  3. 3Скопировать исходники и собрать production-артефакты
  4. 4В финальный этап перенести только результат сборки
  5. 5Передавать секреты через CI или runtime, а не через Dockerfile
Опасный образ
  1. 1Ставить зависимости после копирования всего проекта
  2. 2Оставлять dev-зависимости и исходники в production-образе
  3. 3Хранить токены в Dockerfile или .env внутри image
  4. 4Запускать сборку с плавающими версиями без lock-файла
  5. 5Не отличать переменные сборки от переменных запуска

Переменные окружения и секреты

Во frontend особенно легко ошибиться с переменными. Если переменная используется на этапе сборки клиентского бандла, ее значение может попасть в JavaScript, который скачает пользователь. Поэтому токены, приватные ключи и внутренние секреты нельзя считать безопасными только потому, что они пришли из Docker или CI.

Безопаснее разделять настройки. Публичные значения, например URL публичного API, могут быть build-time переменными. Секреты должны оставаться на сервере, в CI secret storage или в runtime-инфраструктуре, где клиентский код их не видит.

Опасный сценарий такой. Вы кладете NPM_TOKEN или API key в ENV внутри Dockerfile, собираете image и отправляете его в registry. Значение может остаться в слоях, логах или попасть в клиентский бандл. Безопаснее передать токен как secret на время установки зависимостей и не копировать его в финальный image.

Что Docker не проверяет за вас

Успешная Docker-сборка не значит, что frontend-релиз безопасен и удобен для пользователя. Контейнер может корректно отдать файлы, но приложение все равно покажет пустой экран при ошибке API, выполнит лишний запрос из-за гонки эффектов, раскроет публичный токен или загрузит старый JS из-за неверных cache headers.

Практический вывод для ответа такой. Docker отвечает за повторяемую среду. Клиентские риски закрываются тестами, проверкой runtime-конфига, настройкой сервера статики и ревью кода. Для SSR также отдельно проверьте, что код не обращается к browser-only API во время серверного рендера и не создает hydration mismatch.

Что сказать про Docker Compose

Docker Compose описывает несколько сервисов для локального или тестового окружения. Например, frontend, backend, база данных и mock-сервис могут подниматься одной командой. Это удобно, когда вам нужно быстро объяснить локальную разработку в проекте.

Но не говорите, что Compose это то же самое, что Kubernetes или полноценная production-оркестрация. Для интервью достаточно сказать, что Compose помогает описать состав окружения, сети, volumes и переменные для нескольких контейнеров.

Практический вывод

На вопрос Что такое Docker сильный ответ идет в таком порядке. Определение, image и container, польза для frontend, отличие от VM, ограничения. Так вы показываете не только знание термина, но и понимание того, как Docker влияет на сборку и деплой.

Хорошая короткая версия:

Docker упаковывает приложение и зависимости в image, из которого запускается container. Для frontend это полезно, чтобы одинаково собирать и тестировать проект локально и в CI, фиксировать Node.js и отдавать production-артефакты из минимального образа. При этом контейнер не является полной VM и не решает безопасность автоматически.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Называть Docker виртуальной машиной

    Это неточная формулировка. Контейнеры изолируют процессы и файловую систему, но обычно используют ядро хоста. Виртуальная машина запускает отдельную ОС. Лучше скажите, что Docker дает похожую идею изоляции, но работает легче и на другом уровне.
  2. 2

    Путать image и container

    image это шаблон, который можно скачать, собрать и положить в registry. container это запущенный экземпляр image. Если вы это перепутаете, дальше будет сложно объяснить деплой, откат и кэширование слоев.
  3. 3

    Класть секреты в образ

    Секреты могут остаться в слоях image и попасть в registry, логи CI или кэш сборки. Для токенов и ключей используйте secret-хранилища, переменные окружения CI или runtime-механизмы. Во frontend отдельно помните, что build-time переменная может попасть в публичный бандл.
  4. 4

    Делать один большой production-образ

    Если в финальном образе остаются node_modules для разработки, исходники и инструменты сборки, образ становится тяжелее и дольше сканируется. Для SPA чаще достаточно собрать статику в build-этапе и перенести результат в минимальный runtime-образ.
  5. 5

    Игнорировать кэш Dockerfile

    Если сначала копировать весь проект, а потом ставить зависимости, любое изменение исходников может сбрасывать кэш установки пакетов. Обычно сначала копируют package.json и lock-файл, ставят зависимости, а потом копируют исходный код. Так CI и локальные пересборки проходят быстрее.
  6. 6

    Считать Docker проверкой качества клиентского кода

    Контейнер может успешно собраться, но приложение все равно может отдавать старый бандл из-за неверных cache headers, раскрывать токен в клиентском JS или ломать hydration при SSR. После сборки отдельно проверьте настройки сервера статики, публичность переменных и поведение UI при ошибке загрузки.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми проверяют понимание Docker в сборке, CI и frontend-разработке.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание