Docker для фронта — как с ним работать
2026-02-26 20:06 Diff

Я работаю фуллстек-разработчиком, но стараюсь больше заниматься фронтом и прохожу курс "Фронтенд-разработчик".

Мы сейчас пилим один проект и у нас регулярно возникает такая ситуация, что из трех разработчиков обязательно у кого-нибудь что-нибудь не работает после мержа веток — и все из-за разных версий нод на машинах, или каких-то нюансов с архитектурой процессора (у меня MacBook М1) или ОС, у кого-то Windows, у кого-то Ubuntu или MacOS.

И было принято ответственное решение как-то все привести к единому виду, чтобы у всех все работало без проблем.

Первое же, что пришло в голову — это Docker.

Содержание

Что такое Docker

Docker запускает одну и ту же виртуальную среду разработки на любых операционных системах и никак не связан с версиями ноды на локальных машинах, все устанавливается внутри контейнера докера.

Как мы это сделали в двух словах, потом примеры конфигов.

  1. Сделать образ на базе которого будут запускаться контейнеры
  2. Настроить контейнеры

Образ (image) — это как флешка с установочной системой, а после установки системы запускается компьютер — это уже контейнер (container).

Структура:

/app — внутри папки app находятся все файлы проекта, это как папка с проектом локально, внутри которого находятся package.json, /src, node_modules и так далее, все, что нужно для разработки

Dockerfile — инструкции для сборки образа, билдится один раз для создания контейнеров

docker-compose.yml — инструкции для запуска контейнера, имя, порты, папки и все такое

Makefile — скрипты запуска и билда

.env — переменные для изменения образа докера или контейнера

В данном случае образ собирается из официального образа Node.js 18

.env

IMAGE_NAME=frontend CONTAINER_NAME=webapp PORT=4444

Dockerfile

docker-compose.yml

Makefile

Билд

В терминале, в папке, где лежит docket-compose.yml, т.е в корне папки project — make build

Запуск

В том же терминале — make up. После этой команды откроется терминал контейнера, т.е терминал той урезанной Ubuntu, у нее нет доступа к ресурсам локальной машины. Билд может происходить долго, в зависимости от мощности вашей машины и скорости интернета.

Далее устанавливаем внутри этого виртуального контейнера пакеты, у меня уже есть там файл package.json с пакетами для Vite.

npm install

Далее запускаем сервер той командой, которая у вас в package.json для запуска сервера.

Выключение

.dockerignore

app/.parcel-cache/ app/node_modules/ app/dist/ docker-compose.yml Dockerfile .gitignore .DS_Store README.md .idea/ .git/

Чтобы это все работало, надо сначала установить Docker на вашу тачку =).

Проблемы

Сборщик Parcel не работает на Windows внутри докера, причина известная, но решения пока нет. Народ пишет, что это проблема связи между локальной машиной WSL и Parcel внутри контейнера. При этом на MacOS и Ubuntu таких проблем нет, там все работает отлично.

Знаю точно, проверено, что сборщик Vite работает на всех ОС в контейнера и browser-sync отрабатывает как надо.

Webpack тоже как-то через раз работает.

Для установки докера на винду нужно проделать дополнительные танцы с бубном, установить Git Bash + WSL и пробовать сбилдить и запускать.

Спасибо за внимание =).