Итак, я прочитал о Docker и понял большую часть этого. Тем не менее, у меня есть вопрос: почему большинство руководств все еще разрабатывают все приложение в своей локальной среде и устанавливают такие инструменты, как Node, Python или Ruby, если вы можете просто создать привязку привязки и разработать все внутри контейнера? Я что-то неправильно понял или это неправильный подход? Ниже приведен простой файл докеров, который я использовал для разработки тестового приложения:
FROM node
WORKDIR /home/app
VOLUME . .
И отсюда я заходил в терминал контейнера, запускал npm init и начинал разработку своего приложения.
Теперь моя цель - сделать мою машину как можно более чистой, без необходимости устанавливать Java, Node, Ruby и т. д. Что было бы лучшим подходом для этого? А также как этот подход работает на машине с Windows? Сейчас я использую Ubuntu.
Я не хочу докерировать приложение. Я хочу собрать все приложение, составив контейнеры. Например, я хочу иметь чистую установку manjaro, затем установить докер, затем получить изображение spacevim, затем запустить новое приложение на java, например, в каком-то локальном каталоге, чтобы связать мой локальный каталог с контейнером java, чтобы он мог работать компилятор. Затем, если я хочу, запустите новое приложение в узле и сделайте то же самое. Во всех случаях я буду использовать локальный каталог с исходным кодом, отредактированный с помощью моего контейнера vim и запускаемый из языкового контейнера. это возможно? поэтому мне не нужно устанавливать nvm, nodenv или какие-либо менеджеры версий и так далее.
Я могу вручную запустить этот код, например:
docker container run --rm -it -v /home/alex/Documents/REPOs/testing:/home/app -p 3000:3000 --name node node:latest bash
И это позволяет мне работать в каталоге / home / app / как двухстороннее связывание, но как я могу добиться того же с помощью файла dockerfile или docker-compose, чтобы я мог поделиться своей конфигурацией и прекратить использовать менеджеры версий для каждого языка.
Вы пробовали использовать Docker в новой ОС на виртуальной машине?


Вы, жестяная банка, занимаетесь разработкой в докере, и для этого существует множество руководств.
Примеры приложений Docker изобилуют ... вы можете просто погуглить docker example app и имя вашего фреймворка.
На компьютере с Windows это зависит от вашей версии, потому что в Windows 10 вам нужна ОС Pro версии для запуска докера. Я пользователь Windows и заметил, что некоторые странности появляются, специфичные для версии Windows, а k8 просто не работает в Windows, насколько я могу судить.
Допустим, я разрабатываю приложение Node. Мне нужна одна языковая среда выполнения, но в соответствии с тем, как работает экосистема Node, все зависимости пакета во время сборки и компиляции объявлены в файле package.json и изолированы в каталоге node_modules. В этом нет никаких накладных расходов; Мне нужна одна команда apt-get install или brew install, и я готов к работе.
Как только я это сделаю, у меня появится целый набор инструментов, которые действительно хорошо работают если Я работаю локально. Мой редактор может общаться со средством проверки статического типа и выделять для меня ошибки, но только если каталог node_modules находится в моей локальной среде. Мой редактор может запускать мой набор тестов и переходить к ошибкам, но только если языковая среда выполнения является локальной. Мой редактор может получить доступ к моему коду, если он запущен в удаленной системе или в контейнере, но ни один из этого дополнительного набора инструментов мне недоступен.
В свою очередь, использование Docker сопряжено с множеством сложностей. Вам все равно нужно что-то установить (сам Docker), чтобы использовать Docker. Выполнение любой команды Docker требует привилегий, эквивалентных суперпользователю, поэтому либо вы часто используете sudo, либо уверены, что docker run -v /:/host ... «случайно» ничего не испортит под вами. Вам нужно поместить свой код в контейнер. Вам необходимо указать контейнеру, чтобы он сделал порты вашего сервера доступными для вас. Обычно вам необходимо удалить контейнер, чтобы изменить настройки. Возникают повторяющиеся проблемы с сопоставлением разрешений, и если файловый ввод-вывод является основной частью программы, вам также необходимо загружать и выводить эти файлы. А Docker сложен, и, как и любая другая сложная вещь, иногда просто терпит неудачу.
Я считаю, что Docker великолепен - как система развертывания. Если у вас есть хорошо упакованная и автономная программа Python, Ruby, JavaScript или Go, очень легко построить вокруг нее контейнер и запустить его как предварительно упакованное решение или развернуть в кластере Kubernetes. Два основных аргумента в пользу Docker для разработки, которые я видел, - это изоляция файловой системы для каждого проекта (которую вы получаете без Docker через node_modules, виртуальные среды Python, гемсеты Ruby rvm, $GOPATH, ...) и желание точных версий языковых сред выполнения ( по моему опыту ничего страшного). Это перевешивается хлопотами, связанными с управлением средой Docker, и трудностями разработки «удаленно» ... просто для того, чтобы избежать установки языковой среды выполнения на хосте.
Пожалуйста, переименуйте свой вопрос, чтобы он был более конкретным; это бесполезно для других, ищущих, и, вероятно, вызовет отрицательные голоса