Избегайте переустановки пакетов при каждой сборке Docker.

Когда я создаю образ нового приложения Python, которому требуется TensorFlow (импорт tensorflow), каждый раз, когда докер устанавливает TensorFlow размером 520 МБ.

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

Файл Docker

FROM python:3

WORKDIR /usr/src/app

COPY model.py .
COPY model_08015_07680.h5 .
COPY requirements.txt .
COPY images .
COPY labels.txt .
COPY test_run.py .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python","./test_run.py"]

требования.txt

numpy
opencv-python
tensorflow

person lnx    schedule 06.06.2020    source источник
comment
Можете ли вы добавить Dockerfile ?   -  person nischay goyal    schedule 06.06.2020
comment
я добавил докерфайл   -  person lnx    schedule 06.06.2020
comment
Посмотрите ниже и дайте мне знать, если вы все еще сталкиваетесь с какими-либо проблемами   -  person nischay goyal    schedule 06.06.2020
comment
Я настоятельно рекомендую вам ознакомиться с Dockerfile Best Практика, особенно советы 10 (Извлечение зависимостей на отдельном шаге) и 11 (Использование многоэтапных сборок для удаления зависимостей сборки). Если вы хотите повторно использовать свою зависимость для нескольких разных образов, лучше всего создать базовый образ с TensorFlow самостоятельно или найти его по адресу Центр Docker.   -  person rph    schedule 06.06.2020
comment
Отвечает ли это на ваш вопрос? Как избежать переустановки пакетов при сборке Docker изображение для проектов Python?   -  person rph    schedule 06.06.2020


Ответы (2)


Пожалуйста, используйте приведенный ниже Dockerfile, который немного оптимизирован, так как он не будет устанавливать зависимости снова и снова, пока/если вы не измените requirements.txt

FROM python:3

WORKDIR /usr/src/app

#Copy Requirements
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

#Copy everything later, as below parts will be changing and above part will be used from cache
COPY model.py .
COPY model_08015_07680.h5 .
COPY images .
COPY labels.txt .
COPY test_run.py .


CMD ["python","./test_run.py"]
person nischay goyal    schedule 06.06.2020
comment
подождите, подождите, я сомневаюсь в том, что 1. теперь я контейнеризирую одно приложение Python, нуждающееся в тензорном потоке. поэтому докер установит тензорный поток 2. Но теперь, если я хочу объединить совершенно другое приложение python, требующее тензорного потока, тогда докер снова установит тензорный поток, так как этого избежать? - person lnx; 06.06.2020
comment
Затем для этой цели создайте 1 базовое изображение с тензорным потоком, а затем используйте это базовое изображение в каждом Dockerfile - person nischay goyal; 06.06.2020
comment
не могли бы вы предоставить код (например, как создать базовое изображение тензорного потока и использовать его в другом файле докеров)? это мне очень поможет - person lnx; 06.06.2020
comment
Если вам нужен специальный базовый образ tensorflow, используйте этот образ tensorflow/tensorflow, который уже существует на dockerhub. Если вы пытаетесь установить что-то еще, то создайте базовый образ, запустив первые 3 строки - person nischay goyal; 06.06.2020

Не нужно копировать каждый файл отдельно, это не оптимально.

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

FROM python:3

WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
#Copy everything
COPY . .    
CMD ["python","./test_run.py"]
person paltaa    schedule 06.06.2020