Разработка без установки: Опыт продуктивной работы с Docker


Почему я перестал беспокоиться о настройке окружения!

Если бы Стэнли Кубрик был инженером-программистом, он бы назвал этот пост так

Dr. Nosetup: Как я перестал беспокоиться о настройке и полюбил разработку.

(Я увижу себя со стороны с этим каламбуром!)

Я попробовал внести свой вклад в проект с открытым исходным кодом, не установив на самом деле
не устанавливая полный набор инструментов языка программирования, и мне показалось, что это стоит задокументировать.

Проблема: так много нужно скачать и настроить, прежде чем приступить к работе

Я попробовал отправить функцию в репозиторий node-red GitHub Repository с новым узлом конфигурации TOML.

Однако я не хотел портить (простите за использование этого слова) свой личный ноутбук установкой.

Одна из конкретных причин заключается в том, что у меня сейчас меньше времени, чтобы продолжать заниматься веб-разработкой,
и node.js не является моим любимым языком в любом случае. Я хочу, чтобы мой хост-ноутбук был настолько минимальным, насколько это возможно.

Но я хотел отправить функциональный патч вверх по течению, потому что я был в зоне риска.

Решение: Инкапсулированная среда Docker

Поскольку я уже некоторое время активно использую docker, я спросил себя.

  1. Что мне нужно для отправки патча вверх по течению?

Ответ: Только соответствующие файлы

  1. Предоставляет ли docker мне среду node.js?

О: Да, конечно, предоставляет. Не только node.js, но и для всех возможных языков программирования.

  1. Как избежать ручного копирования-вставки файлов между контейнером и ноутбуком?

Ответ: Объемные монтирования. Любые изменения внутри контейнера отражаются на хост-ноутбуке и наоборот.

Настройка!

Все, что мне действительно было нужно, это docker на моей машине, и мы готовы к работе!

Шаги:

  1. клонирование репозитория в выделенную директорию на моем хост-ноутбуке

  2. Посетите Docker Hub и найдите репозиторий образов node-js.

  3. Найдите тег образа версии 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. Так что ничего не пропадает зря!

Надеюсь, это поможет, свяжитесь с нами, если вы хотите высказать свои предложения или критику!

Оцените статью
Procodings.ru
Добавить комментарий