Почему я перестал беспокоиться о настройке окружения!
Если бы Стэнли Кубрик был инженером-программистом, он бы назвал этот пост так
Dr. Nosetup: Как я перестал беспокоиться о настройке и полюбил разработку.
(Я увижу себя со стороны с этим каламбуром!)
Я попробовал внести свой вклад в проект с открытым исходным кодом, не установив на самом деле
не устанавливая полный набор инструментов языка программирования, и мне показалось, что это стоит задокументировать.
Проблема: так много нужно скачать и настроить, прежде чем приступить к работе
Я попробовал отправить функцию в репозиторий node-red GitHub Repository с новым узлом конфигурации TOML.
Однако я не хотел портить (простите за использование этого слова) свой личный ноутбук установкой.
Одна из конкретных причин заключается в том, что у меня сейчас меньше времени, чтобы продолжать заниматься веб-разработкой,
и node.js
не является моим любимым языком в любом случае. Я хочу, чтобы мой хост-ноутбук был настолько минимальным, насколько это возможно.
Но я хотел отправить функциональный патч вверх по течению, потому что я был в зоне риска.
Решение: Инкапсулированная среда Docker
Поскольку я уже некоторое время активно использую docker
, я спросил себя.
- Что мне нужно для отправки патча вверх по течению?
Ответ: Только соответствующие файлы
- Предоставляет ли
docker
мне средуnode.js
?
О: Да, конечно, предоставляет. Не только node.js
, но и для всех возможных языков программирования.
- Как избежать ручного копирования-вставки файлов между контейнером и ноутбуком?
Ответ: Объемные монтирования. Любые изменения внутри контейнера отражаются на хост-ноутбуке и наоборот.
Настройка!
Все, что мне действительно было нужно, это docker
на моей машине, и мы готовы к работе!
Шаги:
-
клонирование репозитория в выделенную директорию на моем хост-ноутбуке
-
Посетите Docker Hub и найдите репозиторий образов
node-js
. -
Найдите тег образа версии Long-Term-Support (LTS). В моем случае это было
16.15.0
.
Итак, у нас есть почти все, что мы хотели!
Предостережения
Помните, что контейнеры Docker — это собственные эфемерные миры.
Если контейнеры разработаны для пользователей root
, ваши файлы могут сменить владельца или иметь
разные владельцы. Вы можете проверить это, используя ls -la
в вашем каталоге.
Я очень хочу избежать подобных сценариев, такие проблемы с правами собственности могут повлиять как на вашу файловую систему, так и на
как на вашу файловую систему, так и на исходный код. Но нет проблем, docker
CLI предоставляет возможность контролировать настройки пользователей и групп
перед запуском контейнера.
Стоит также упомянуть, что контейнерное окружение также создает файлы, которые не должны быть
отражаться в ваших коммитах вверх по течению. В случае node-red
package-lock.json
— это файл, созданный
внутри контейнера, который будет отображен на хост-машину.
Может быть разумно хранить такие файлы в файлах .gitignore
, а также .dockerignore
в репозитории разработки.
репозитория, чтобы избежать их случайной фиксации вверх по потоку или переноса в контейнер.
Docker CLI
$ # assuming your are in the development repository
$ docker run -it --name=node-red-TOML
-u $(id -u):$(id -g)
-v $(pwd):/usr/src/app
-p 1880:1880
node:16.15.0
/bin/bash
Параметр -u
сопоставляет ваш текущий идентификатор пользователя и группу с контейнером, избегая любых конфликтов владения root
.
конфликтов.
Параметр -v
— это монтирование тома, который будет отображать кодовую базу на каталог /usr/src/app
контейнера.
контейнере.
Вот и все! Среда node-js без необходимости скачивать и устанавливать инструмент на хосте!
Теперь вы можете с легкостью кодировать все в выбранном вами редакторе при запущенном контейнере.
Любые изменения, как на хосте, так и в контейнере, будут отражены в вашем редакторе.
Просто убедитесь, что команды выполнения выполняются в контейнере.
Преимущества
Для меня это сработало отлично! Я смог запустить кодовую базу в кратчайшие сроки, не беспокоясь о проблемах совместимости.
беспокоиться о проблемах несовместимости.
Изменения, сделанные в моем редакторе (новые файлы, рефакторинговые файлы), доступны в контейнере для использования и выполнения.
Выполнение команд в контейнере облегчает понимание того, что происходит, и все это эфемерно
поэтому мне не нужно делать много уборки после этого.
Просто удалите контейнер и зафиксируйте код!
Попутно замечу, что функциональный патч выше по течению не был нужен основной команде :(, но я мог бы использовать
тот же паттерн среды разработки для создания узла node-red-contrib
. Так что ничего не пропадает зря!
Надеюсь, это поможет, свяжитесь с нами, если вы хотите высказать свои предложения или критику!