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

На всякий случай для себя хочу уточнить. Правильно ли я

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

50 ответов

217 просмотров

virtualenv скорее не нужен почти никогда, venv все ещё может быть удобен. Например, в случае multistage сборки

Mihail- Автор вопроса
Tishka17
virtualenv скорее не нужен почти никогда, venv все...

да, я venv имел ввиду. Тот, что по стандарту идет. А зачем в многоэтапных сборках он?

Mihail- Автор вопроса

а venv как в этом поможет?

Mihail
а venv как в этом поможет?

Чтобы не ставить зависимости дважды

Mihail- Автор вопроса
ICIT
Чтобы не ставить зависимости дважды

так можно же в конце просто поставить зависимости и все? Или я по-ходу не очень понимаю что такое мультиэтапная сборка? Там же ее как угодно можно кастомизироать, нет?

ICIT
Чтобы не ставить зависимости дважды

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

Mihail
так можно же в конце просто поставить зависимости ...

Да, что такое по твоему многоэтапная сборка?

Mihail
так можно же в конце просто поставить зависимости ...

Зависит от ситуации. Если тебе на каждый стрйдж нужны разные депенденси или последний стрйдж не зависит от остальных - ок Иначе - зачем каждый раз ставить зависимости? Или например комуляция зависимостей

Mihail- Автор вопроса
Tishka17
Да, что такое по твоему многоэтапная сборка?

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

Mihail- Автор вопроса
Tishka17
Ээээ. Не совсем. Скорее нет чем да

ну как минимум это череда команд, которая в конечном счете должна привести к успешной сборке, хотя, наверное, это обычная сборка 🤔

Mihail- Автор вопроса
ICIT
Это ты описал сборку имеджа в общем ))

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

Mihail
ну да. Ну тогда, возможно, сборка нескльких проект...

Давай решим вопрос с дефинициями. Дай дефиниции: Имеджу, контейнеру, проекту, зависимостям и сборке

Mihail- Автор вопроса
ICIT
Давай решим вопрос с дефинициями. Дай дефиниции: И...

имидж это как репо на гитхабе, просто код, который потом будет запущен Контейнер это как сервак один Проект это один репозиторий, например Зависимость это сторонние библиотеки от которых зависит проект Сборка это установка этих зависимостей

Mihail
ну да. Ну тогда, возможно, сборка нескльких проект...

Зайдём с другой стороны. Процесс сборки приложения на каком-нибудь Си или ещё чём компилируемом представляешь? В курсе, что там несколько этапов?

Как связан контейнер и имадж?

Tishka17
Как связан контейнер и имадж?

Не заметил вопрос, сорян

Mihail- Автор вопроса
evle
Зайдём с другой стороны. Процесс сборки приложения...

ну там просто добавляется ещё команда компиляции вроди как да ивсе

Mihail- Автор вопроса
Tishka17
Как связан контейнер и имадж?

так имедж описывает, что нужно предустановить на серваке по окружению, возможно даже не связанному с питоном

Mihail
ну там просто добавляется ещё команда компиляции в...

Нет, я о том, что при компиляции сколь-нибудь сложной программы на условном Си мы не получаем одной командой сразу конечный исполняемый файл, сначала создаются объектные файлы, потом они как-то там линкуются, собираются в кучу и т. п. Для всего этого нам могут быть нужны какие-то заголовочные файлы и ещё миллион всего. А в итоге для запуска готовой программы нам нужен один бинарник и может немного либ, а исходники, заголовки, компилятор, и прочая фигня — не нужны. Так вот, мультистейж позволяет нам в процессе сборки зафиксировать какое-то состояние, поставить компилятор, что нам там ещё надо, собрать всё, получить готоврый к работе результат в папочке и забрать с собой. Потом начать заново с сохранённой точки и принести в финальный образ только нужное, а не весь зоопарк. С питоном можно делать примерно такое же.

Mihail- Автор вопроса
evle
Нет, я о том, что при компиляции сколь-нибудь слож...

окей, можно привести пример на питоне когда может возникнуть подобный зоопарк?

Mihail
окей, можно привести пример на питоне когда может ...

Компилятор сишных пакетов все ещё нужен бывает

Mihail
окей, можно привести пример на питоне когда может ...

Собственно, совсем не все пакеты питона написаны на питоне, иногда они точно так же тащатся из исходников. Ещё мы можем во время сборки прогонять какие-нибудь тесты, порождающие файлы, и нам они нафиг не нужны в продакшене. Ну и такого рода ситуации могут всплывать по разным причинам.

Mihail- Автор вопроса
evle
Собственно, совсем не все пакеты питона написаны н...

Ну все остальное кроме того, что не все зависимости могут быть связаны с питоном, я бы причислил к обычной сборке, нет?

Не понял фразу. Речь о том, что у тебя в процессе сборки могут появляться полуфабрикаты, не нужные для работы конечного образа. В некоторых случаях можно выкинуть их из образа таким вот способом.

Mihail- Автор вопроса
evle
Не понял фразу. Речь о том, что у тебя в процессе ...

так удаление ненужных файлов вроди как входит в этап сборки, нет?

Mihail- Автор вопроса

мы немного отдалились от темы вообще. Мы начали с смысла использования venv при использовании докера

Mihail
так удаление ненужных файлов вроди как входит в эт...

Ну, во-первых, правильно удалить ещё заморочиться надо, чтобы всё найти. А во-вторых, ты в курсе, что образ - это набор слоёв и что удаление в новом слое не освободит место в предыдущих?

Mihail- Автор вопроса
evle
Ну, во-первых, правильно удалить ещё заморочиться ...

аа, я по-моему начинаю понимать. Вы имеете ввиду что слои для того, чтобы быть самодостаточными, могут содержать кучу информации, которая будет так же и в других слоях и чтобы избежать этого и сэкономить место на диске, нужно в ручную удалять всё это? Вот, допустим, одна и та же питоновская библиотека может быть установлена 2 раза? В итоге что, venv помогает исключительно в том, что все питонвоские зависимости будут установлены в одну папку, в которой более ли менее просто что-то найти и удалить?

Mihail
аа, я по-моему начинаю понимать. Вы имеете ввиду ч...

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

Mihail- Автор вопроса
Mihail
ок, так а с venv-то это как связано?

Копируя venv в финальный стейдж ты копируешь только нужные пакеты, а не тащишь за собой все барахло используемое при сборке.

Mihail
ок, так а с venv-то это как связано?

Можешь посмотреть пример мультистейдж билда https://gist.github.com/cutwater/91eca07eab6cd824cfdd60f462ea9fa8

Mihail- Автор вопроса
Alex
Можешь посмотреть пример мультистейдж билда https...

я так понял, вот это ключевая строчка? COPY --from=build /venv /venv То есть смысл в том, чтобы копированием одной папки из слоя в слой переносить зависимости? А не скачивать их по-новой при запуске каждого слоя?

Mihail
я так понял, вот это ключевая строчка? COPY --fr...

> То есть смысл в том, чтобы копированием одной папки из слоя в слой переносить зависимости? Не зависимости, а прямо все приложение целиком вместе с зависимостями. > А не скачивать их по-новой при запуске каждого слоя? ШТА? Что такое "запуск слоя" ?

ЧОБЛЯ?

Mihail- Автор вопроса
Alex
ЧОБЛЯ?

ну имидж может состоять же из нескольких слоев, нет?

Mihail- Автор вопроса
Alex
Да, и? При чем тут запуск контейнера?

ну запуск контейнера это запуск кода из имиджа же

Mihail- Автор вопроса
Alex
И чо?

ну это означает, что слой за слоем будет запущен, нет?

Mihail
ну это означает, что слой за слоем будет запущен, ...

Схуяли? Как ты пришел к этому оригинальному выводу. Что такое "запуск слоя" ?

Mihail
ну это означает, что слой за слоем будет запущен, ...

https://github.com/wagoodman/dive Можешь попробовать посмотреть что там под капотом происходит. Многие вопросы отпадут

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта