169 похожих чатов

Коллеги, есть вопрос по docker и R... Сейчас у меня

все происходит следующим образом:
1. Пишется shiny приложение на Mac, тестируется и запускается прямо из RStudio
2. Формируется dockerfile, куда попадают необходимые библиотеки R
3. При сборке образа на Linux сервере может возникать ошибка о том, что нет какой то библиотеки, которую нужно добавить руками в dockerfile, бывает так, что это обнаруживается уже только при запуске контейнера и тестировании
4. Возврат на п.2 цикл пвоторяется пока все зависимости не будут указаны в dockerfile

Все это очень долго т.к. образ в каждый раз пересобирается заново. Есть ли какая-то более красивая практика определения зависимостей? При этом иногда речь идет о библиотеках linux, а иногда пакет, который вроде должен автоматом загружаться, что происходит скрыто при работе в RStudio (пакет даже не грузится в сессию) т.е. нехватку такого пакета получается отловить уже только на тестировании интерфейса (только что с ggpp такое было.

35 ответов

34 просмотра

В докере можно папки перекидывать между образами. Грубо говоря, вы один раз компилируете все пакеты для R в тестовом образе и потом копируете их в основной. В основном образе просто ставится R и системные библиотеки, а все пакеты R копируются из тестового. Более-менее стабильно это работает, когда у вас конкретная версия R ставится и ОС одна и та же Конечно, если вам для приложения нужен N+1 пакет, то процедура повторяется. Но зато при пересборке докера не надо каждый раз все компилировать

Я в докере еще использовал пакет pak, он так красиво все в консоль репортил без лишних слов и все зависимости тоже сам подтягивал

https://arxiv.org/pdf/2103.08069.pdf https://www.rstudio.com/products/package-manager/ https://www.jumpingrivers.com/blog/faster-r-package-installation-rstudio/ в докерах можно по слоям раскидывать...

Dm-Kb Автор вопроса
Ed P
В докере можно папки перекидывать между образами. ...

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

Dm Kb
у меня как раз проблема в том, что хочется понять ...

А посмотрите все же pak. Я понял, о чем вы говорите, но ни разу не пытался автоматизировать. https://cran.r-project.org/web/packages/pak/pak.pdf local_system_requirements - не то, случайно?

Dm-Kb Автор вопроса
Dm Kb
у меня как раз проблема в том, что хочется понять ...

а что не сделать это на линуховой машине заранее? набор пакетов, как правило, достаточно устаканен. просто для публикации в прод постоянно использовать новые пакеты с новыми системными либами — такой себе подход. нет людей, которые все 10К пакетов использовали бы. пакетный хаос на проде — это, в первую очередь, административная проблема.

Ilya Shutov
а что не сделать это на линуховой машине заранее? ...

Логичнее делать свой репозиторий. Я такой делаю периодически (в конце месяца). Вместо установки всего. Плюс скачиваю системные либы под конкретный дистрибутив Линукса.

Stan
Логичнее делать свой репозиторий. Я такой делаю пе...

так вопрос в том, как заранее узнать, какие либы нужны, насколько я понял. ну т.е. можно, конечно, в error log смотреть, но это такое

Ed P
так вопрос в том, как заранее узнать, какие либы н...

один раз просто взять и поставить. пакеты все подскажут тупо до безобразия

Stan
Обычно нужны openssl, xml2 и подобные

а потом вы захотите поставить magick или rgl и УПС

Ed P
а потом вы захотите поставить magick или rgl и УПС

Ничего страшного. Сразу из Синаптика вытаскиваем файлы установщиков.

Dm-Kb Автор вопроса
Ilya Shutov
а что не сделать это на линуховой машине заранее? ...

можно конечно и таким путем пойти т.е. брать чистую машинку linux и на на ней собирать все проблемы с установкой пакетов , но как -то громоздко

Stan
Ничего страшного. Сразу из Синаптика вытаскиваем ф...

я не понял. Когда вы ставите R-овские пакеты, то зависимости между пакетами автоматически подтягиваются. Вопрос в том, как аналогично доустанавливать системыне либы. вот pak это вроде умеет делать

Dm Kb
можно конечно и таким путем пойти т.е. брать чисту...

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

Dm-Kb Автор вопроса
Ed P
я не понял. Когда вы ставите R-овские пакеты, то ...

Когда Вас занесло в мир линуксов, системные функции грузятся из штатных репозиториев линуксов. Тогда приходится озаботиться еще и этим вопросом. Особенно в дебиане. Все же компилируется всю дорогу.

Stan
Когда Вас занесло в мир линуксов, системные функци...

вы не понимаете задачу, как мне кажется. pak ставит линуксовые пакеты из штатных репозиториев с помощью execute. Т.е. вам не надо ДО установки пакетов ставить системные либы. Надо только проверить, нужны ли вашим пакетам какие-то системные зависимости и установить их до установки пакетов с помощью pak

Dm-Kb Автор вопроса
Ilya Shutov
это только в теории громоздко. один раз сходите по...

у меня проекты слишком сильно отличаются и пакеты нужны очень разные: это не я такой, это жизнь такая )) т.е. я dockerfile сильно переписываю в каждый раз

Dm-Kb Автор вопроса
Ilya Shutov
https://arxiv.org/pdf/2103.08069.pdf https://www.r...

в третьей ссылке есть раздел "Using Ubuntu Binaries" вопрос, а почему его бы не использовать? есть какие-то подводные камни?

Dm Kb
у меня проекты слишком сильно отличаются и пакеты ...

оставить все что нужно и не переписывать. Не так уж много надо. Это только prophet гигабайты потребляет

Dm Kb
в третьей ссылке есть раздел "Using Ubuntu Binarie...

камни есть везде. просто попробуйте в своем окружении.

Dm-Kb Автор вопроса
Ilya Shutov
оставить все что нужно и не переписывать. Не так у...

ну вот я сегодня добавил leaflet, но тащить его в другой проект, где нет картографии - это не очень хорошо

Dm Kb
ну вот я сегодня добавил leaflet, но тащить его в ...

играйте по-крупному, не мелочитесь. Вы тут штрихи подправляете, а там бигдата терабайтами кушает и не стесняется. пусть в пассиве на диске лежит — 1 Мб жалко? реально, проблема высосана из пальца. есть 100500 важных вопросов над которыми думать надо и стоит.

Dm-Kb Автор вопроса
Ilya Shutov
играйте по-крупному, не мелочитесь. Вы тут штрихи ...

ну может и так))) хотя вариант с тем чтобы заведомо определить зависимости мне нравится больше, он как то больше согласуется с моим ощущением прекрасного

Dm Kb
ну может и так))) хотя вариант с тем чтобы заведом...

пишите прекрасный код — это мало кто умеет делать. пусть такси водят таксисты.

Dm-Kb Автор вопроса
Ilya Shutov
пишите прекрасный код — это мало кто умеет делать....

да я как раз не про код больше )) я больше про доказательство того, что идея работает или не работает

Dm Kb
да я как раз не про код больше )) я больше про док...

можно спутать чувство прекрасного с обычной прокрастинацией

Dm-Kb Автор вопроса
Ilya Shutov
можно спутать чувство прекрасного с обычной прокра...

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

Dm Kb
Именно поэтому я задал вопрос уже когда все сделал...

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

Dm Kb
Именно поэтому я задал вопрос уже когда все сделал...

оно может немного грубо, но стоит отделять важное от неважного. оценивать реальный вклад доработок в общий результат. devops — это непросто. там одним советом не обойтись. Если готовы вкачивать сотни человеко-часов — тогда стоит разбираться.

Dm-Kb Автор вопроса
Ilya Shutov
оно может немного грубо, но стоит отделять важное ...

для меня devops - это третья важность, но в целом я удовлетворен дискуссией, как минимум стоит подумать о трех вещах: 1. использовать pak 2. использовать бинарники 3. откармливать свой "толстый" dockerfile от проекта к проекту ВСЕМ СПАСИБО 🙏

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта