Можно ли передать данные виртуальной среды с локального хоста в образ докера с помощью команды ADD?
Вместо того, чтобы выполнять установку пакетов внутри контейнера, я бы предпочел, чтобы пользователь выполнял все это локально и просто переносил виртуальную среду в контейнер. Предполагается, что все файлы имеют то же имя локально, что и в контейнере докера, а все каталоги правильно вложены.
Это сэкономило бы от нескольких минут до часов, если бы можно было перенести настройки виртуальной среды в образ докера. Может быть, я думаю об этом не в том тезисе.
Просто кажется очень неэффективным выполнение pip install через файл requirements.txt, который был передан в контейнер, в отличие от того, чтобы делать все это локально, иначе каждый раз, когда образ запускается, он должен переустанавливать те же зависимости, которые не изменились с сборка каждого изображения.






Хотя это возможно, это не рекомендуется.
Чтобы запускать установку pip только при изменении файла requirements.txt, Dockerfile должен запускаться следующим образом:
...
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY src/ ./
...
Кроме того, он будет запускаться только при сборке образа, а не при запуске контейнера.
Если у вас есть несколько контейнеров с одинаковыми зависимостями, вы можете создать промежуточный образ со всеми зависимостями и собрать другие образы FROM на нем.
Однако, ради отладки, есть ли альтернатива созданию и запуску новых образов, когда что-то изменилось? В моем текущем рабочем процессе были внесены правки в docker -> docker build -> docker run. Создание новых образов каждый раз, что, очевидно, является плохой практикой и занимает несколько часов, когда для каждой сборки устанавливаются 15 различных файлов requirements.txt.
Для отладки вы можете присоединиться к своему контейнеру с помощью docker exec -it <container> /bin/bash и вносить правки, возможно, используя том для источников. Если у вас есть несколько контейнеров с одинаковыми зависимостями, вы можете создать промежуточный образ со всеми зависимостями и собрать другие образы FROM на нем.
Мы столкнулись с этой проблемой ранее, и вот несколько вещей, которые мы рассмотрели:
В зависимости от сложности вашего проекта один может подойти лучше другого - вы также можете рассмотреть гибридный подход, чтобы найти максимальную оптимизацию.
Я думаю, вы неправильно понимаете, как работают сборки Docker - они не происходят во время запуска контейнера.