0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Я работаю фуллстек-разработчиком, но стараюсь больше заниматься фронтом и прохожу курс<a>"Фронтенд-разработчик"</a>.</p>
1
<p>Я работаю фуллстек-разработчиком, но стараюсь больше заниматься фронтом и прохожу курс<a>"Фронтенд-разработчик"</a>.</p>
2
<p>Мы сейчас пилим один проект и у нас регулярно возникает такая ситуация, что из трех разработчиков обязательно у кого-нибудь что-нибудь не работает после мержа веток - и все из-за разных версий нод на машинах, или каких-то нюансов с архитектурой процессора (у меня MacBook М1) или ОС, у кого-то Windows, у кого-то Ubuntu или MacOS.</p>
2
<p>Мы сейчас пилим один проект и у нас регулярно возникает такая ситуация, что из трех разработчиков обязательно у кого-нибудь что-нибудь не работает после мержа веток - и все из-за разных версий нод на машинах, или каких-то нюансов с архитектурой процессора (у меня MacBook М1) или ОС, у кого-то Windows, у кого-то Ubuntu или MacOS.</p>
3
<p>И было принято ответственное решение как-то все привести к единому виду, чтобы у всех все работало без проблем.</p>
3
<p>И было принято ответственное решение как-то все привести к единому виду, чтобы у всех все работало без проблем.</p>
4
<p>Первое же, что пришло в голову - это Docker.</p>
4
<p>Первое же, что пришло в голову - это Docker.</p>
5
<h2>Содержание</h2>
5
<h2>Содержание</h2>
6
<ul><li><a>Что такое Docker</a></li>
6
<ul><li><a>Что такое Docker</a></li>
7
<li><a>.env</a></li>
7
<li><a>.env</a></li>
8
<li><a>Dockerfile</a></li>
8
<li><a>Dockerfile</a></li>
9
<li><a>docker-compose.yml</a></li>
9
<li><a>docker-compose.yml</a></li>
10
<li><a>Makefile</a></li>
10
<li><a>Makefile</a></li>
11
<li><a>Билд</a></li>
11
<li><a>Билд</a></li>
12
<li><a>Запуск</a></li>
12
<li><a>Запуск</a></li>
13
<li><a>Выключение</a></li>
13
<li><a>Выключение</a></li>
14
<li><a>.dockerignore</a></li>
14
<li><a>.dockerignore</a></li>
15
<li><a>Проблемы</a></li>
15
<li><a>Проблемы</a></li>
16
</ul><h2>Что такое Docker</h2>
16
</ul><h2>Что такое Docker</h2>
17
<p>Docker запускает одну и ту же виртуальную среду разработки на любых операционных системах и никак не связан с версиями ноды на локальных машинах, все устанавливается внутри контейнера докера.</p>
17
<p>Docker запускает одну и ту же виртуальную среду разработки на любых операционных системах и никак не связан с версиями ноды на локальных машинах, все устанавливается внутри контейнера докера.</p>
18
<p>Как мы это сделали в двух словах, потом примеры конфигов.</p>
18
<p>Как мы это сделали в двух словах, потом примеры конфигов.</p>
19
<ol><li>Сделать образ на базе которого будут запускаться контейнеры</li>
19
<ol><li>Сделать образ на базе которого будут запускаться контейнеры</li>
20
<li>Настроить контейнеры</li>
20
<li>Настроить контейнеры</li>
21
</ol><p>Образ (image) - это как флешка с установочной системой, а после установки системы запускается компьютер - это уже контейнер (container).</p>
21
</ol><p>Образ (image) - это как флешка с установочной системой, а после установки системы запускается компьютер - это уже контейнер (container).</p>
22
<p>Структура:</p>
22
<p>Структура:</p>
23
<p>/app - внутри папки app находятся все файлы проекта, это как папка с проектом локально, внутри которого находятся package.json, /src, node_modules и так далее, все, что нужно для разработки</p>
23
<p>/app - внутри папки app находятся все файлы проекта, это как папка с проектом локально, внутри которого находятся package.json, /src, node_modules и так далее, все, что нужно для разработки</p>
24
<p>Dockerfile - инструкции для сборки образа, билдится один раз для создания контейнеров</p>
24
<p>Dockerfile - инструкции для сборки образа, билдится один раз для создания контейнеров</p>
25
<p>docker-compose.yml - инструкции для запуска контейнера, имя, порты, папки и все такое</p>
25
<p>docker-compose.yml - инструкции для запуска контейнера, имя, порты, папки и все такое</p>
26
<p>Makefile - скрипты запуска и билда</p>
26
<p>Makefile - скрипты запуска и билда</p>
27
<p>.env - переменные для изменения образа докера или контейнера</p>
27
<p>.env - переменные для изменения образа докера или контейнера</p>
28
<p>В данном случае образ собирается из официального образа Node.js 18</p>
28
<p>В данном случае образ собирается из официального образа Node.js 18</p>
29
<h2>.env</h2>
29
<h2>.env</h2>
30
<p>IMAGE_NAME=frontend CONTAINER_NAME=webapp PORT=4444</p>
30
<p>IMAGE_NAME=frontend CONTAINER_NAME=webapp PORT=4444</p>
31
<h2>Dockerfile</h2>
31
<h2>Dockerfile</h2>
32
<h2>docker-compose.yml</h2>
32
<h2>docker-compose.yml</h2>
33
<h2>Makefile</h2>
33
<h2>Makefile</h2>
34
<h2>Билд</h2>
34
<h2>Билд</h2>
35
<p>В терминале, в папке, где лежит docket-compose.yml, т.е в корне папки project - make build</p>
35
<p>В терминале, в папке, где лежит docket-compose.yml, т.е в корне папки project - make build</p>
36
<h2>Запуск</h2>
36
<h2>Запуск</h2>
37
<p>В том же терминале - make up. После этой команды откроется терминал контейнера, т.е терминал той урезанной Ubuntu, у нее нет доступа к ресурсам локальной машины. Билд может происходить долго, в зависимости от мощности вашей машины и скорости интернета.</p>
37
<p>В том же терминале - make up. После этой команды откроется терминал контейнера, т.е терминал той урезанной Ubuntu, у нее нет доступа к ресурсам локальной машины. Билд может происходить долго, в зависимости от мощности вашей машины и скорости интернета.</p>
38
<p>Далее устанавливаем внутри этого виртуального контейнера пакеты, у меня уже есть там файл package.json с пакетами для Vite.</p>
38
<p>Далее устанавливаем внутри этого виртуального контейнера пакеты, у меня уже есть там файл package.json с пакетами для Vite.</p>
39
<p>npm install</p>
39
<p>npm install</p>
40
<p>Далее запускаем сервер той командой, которая у вас в package.json для запуска сервера.</p>
40
<p>Далее запускаем сервер той командой, которая у вас в package.json для запуска сервера.</p>
41
<h2>Выключение</h2>
41
<h2>Выключение</h2>
42
<h2>.dockerignore</h2>
42
<h2>.dockerignore</h2>
43
<p>app/.parcel-cache/ app/node_modules/ app/dist/ docker-compose.yml Dockerfile .gitignore .DS_Store README.md .idea/ .git/</p>
43
<p>app/.parcel-cache/ app/node_modules/ app/dist/ docker-compose.yml Dockerfile .gitignore .DS_Store README.md .idea/ .git/</p>
44
<p>Чтобы это все работало, надо сначала установить Docker на вашу тачку =).</p>
44
<p>Чтобы это все работало, надо сначала установить Docker на вашу тачку =).</p>
45
<h2>Проблемы</h2>
45
<h2>Проблемы</h2>
46
<p>Сборщик Parcel не работает на Windows внутри докера, причина известная, но решения пока нет. Народ пишет, что это проблема связи между локальной машиной WSL и Parcel внутри контейнера. При этом на MacOS и Ubuntu таких проблем нет, там все работает отлично.</p>
46
<p>Сборщик Parcel не работает на Windows внутри докера, причина известная, но решения пока нет. Народ пишет, что это проблема связи между локальной машиной WSL и Parcel внутри контейнера. При этом на MacOS и Ubuntu таких проблем нет, там все работает отлично.</p>
47
<p>Знаю точно, проверено, что сборщик Vite работает на всех ОС в контейнера и browser-sync отрабатывает как надо.</p>
47
<p>Знаю точно, проверено, что сборщик Vite работает на всех ОС в контейнера и browser-sync отрабатывает как надо.</p>
48
<p>Webpack тоже как-то через раз работает.</p>
48
<p>Webpack тоже как-то через раз работает.</p>
49
<p>Для установки докера на винду нужно проделать дополнительные танцы с бубном, установить Git Bash + WSL и пробовать сбилдить и запускать.</p>
49
<p>Для установки докера на винду нужно проделать дополнительные танцы с бубном, установить Git Bash + WSL и пробовать сбилдить и запускать.</p>
50
<p>Спасибо за внимание =).</p>
50
<p>Спасибо за внимание =).</p>