Использовали ли Docker в работе и базовые моменты его использования
Что проверяют
Умеете ли вы упаковать фронтенд так, чтобы он собирался и запускался где угодно, и чем образ для разработки отличается от продакшен-образа. Следом часто просят описать Dockerfile для SPA или объяснить, откуда в образе берутся переменные окружения.
Как отвечать
Если использовали, начните с конкретики: что упаковывали (SPA, SSR на Next.js, дев-окружение с бэкендом) и что это дало команде. Если нет, так и скажите и покажите, что понимаете основы. Базовый набор:
- образ и контейнер: образ это неизменяемый шаблон из слоёв, контейнер это запущенный из него изолированный процесс;
- многоэтапная сборка:
FROM node:24-alpine AS build, внутриnpm ciиnpm run build, затемFROM nginx:alpineиCOPY --from=build /app/dist /usr/share/nginx/html. В итоговом образе нетnode_modulesи исходников; - кеш слоёв: сначала копируют
package.jsonиpackage-lock.json, ставят зависимости, потом копируют код. Тогда правка в компоненте не переустанавливает пакеты; .dockerignore: исключаетnode_modules,.git, локальные.env;- SPA в nginx:
try_files $uri /index.html, иначе прямой заход на/profileотдаёт 404; - Next.js:
output: 'standalone'и запускnode server.jsбез полногоnode_modules; - команды:
docker build -t,docker run -p 8080:80,docker logs,docker exec -it <id> sh,docker compose upдля связки с API и базой.
Важный момент для фронтенда: переменные вида VITE_* или NEXT_PUBLIC_* подставляются в бандл на этапе сборки. Поменять их через docker run -e нельзя, нужна пересборка под окружение или конфиг, который генерируется при старте контейнера.
Где спотыкаются
Запускают в продакшене дев-сервер: npm run dev или vite внутри контейнера вместо собранной статики. Это медленно, тяжело и без минификации.
В дев-контейнере с примонтированным кодом не работает hot reload. Dev-сервер слушает localhost вместо 0.0.0.0, а в Docker Desktop, особенно на Windows, события файловой системы из примонтированной папки доходят не всегда, и приходится включать polling.
Копируют весь проект одним COPY . . до установки зависимостей, и каждая сборка заново ставит пакеты.