Docker для фронта — как с ним работать

Я работаю фуллстек-разработчиком, но стараюсь больше заниматься фронтом и прохожу курс "Фронтенд-разработчик".
Мы сейчас пилим один проект и у нас регулярно возникает такая ситуация, что из трех разработчиков обязательно у кого-нибудь что-нибудь не работает после мержа веток — и все из-за разных версий нод на машинах, или каких-то нюансов с архитектурой процессора (у меня MacBook М1) или ОС, у кого-то Windows, у кого-то Ubuntu или MacOS.
И было принято ответственное решение как-то все привести к единому виду, чтобы у всех все работало без проблем.
Первое же, что пришло в голову — это Docker.
Содержание
- Что такое Docker
.envDockerfiledocker-compose.ymlMakefile- Билд
- Запуск
- Выключение
.dockerignore- Проблемы
Что такое Docker
Docker запускает одну и ту же виртуальную среду разработки на любых операционных системах и никак не связан с версиями ноды на локальных машинах, все устанавливается внутри контейнера докера.
Как мы это сделали в двух словах, потом примеры конфигов.
- Сделать образ на базе которого будут запускаться контейнеры
- Настроить контейнеры
Образ (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 и пробовать сбилдить и запускать.
Спасибо за внимание =).
Victor Kasap
3 года назад
8





