Чистая ОС с рабочим процессом Docker

Итак, я прочитал о 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, чтобы я мог поделиться своей конфигурацией и прекратить использовать менеджеры версий для каждого языка.

Пожалуйста, переименуйте свой вопрос, чтобы он был более конкретным; это бесполезно для других, ищущих, и, вероятно, вызовет отрицательные голоса

roganjosh 03.11.2018 22:18

Вы пробовали использовать Docker в новой ОС на виртуальной машине?

AtilioA 03.11.2018 23:06
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
2
143
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы, жестяная банка, занимаетесь разработкой в ​​докере, и для этого существует множество руководств.

Примеры 1,2

Примеры приложений 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, и трудностями разработки «удаленно» ... просто для того, чтобы избежать установки языковой среды выполнения на хосте.

Другие вопросы по теме