кэш conda для докера - PullRequest
       3

кэш conda для докера

0 голосов
/ 14 января 2019

Этот вопрос очень похож на: Сборка Docker: используйте http cache

Я хотел бы настроить докер-контейнер с пользовательской средой conda. Соответствующий докер-файл:

FROM continuumio/miniconda3

WORKDIR /app
COPY . /app

RUN conda update conda
RUN conda env create -f environment.yml
RUN echo "source activate my_env" > ~/.bashrc
ENV PATH /opt/conda/envs/env/bin:$PATH

Моя среда довольно большая, минимальная версия может выглядеть так:

name: my_env
channels:
  - defaults
dependencies:
  - python=3.6.8=h0371630_0
prefix: /opt/conda

Каждый раз, когда я делаю изменения в зависимостях, мне приходится перестраивать образ. А это значит, что нужно повторно загрузить все пакеты. Можно ли как-то настроить кеш? Взаимодействие контейнера conda с кэшем вне контейнера, вероятно, в первую очередь разрушает идею его хранения. Но, может быть, это все-таки возможно?

1 Ответ

0 голосов
/ 01 февраля 2019

Этот является очень косвенным ответом на вопрос, но он работает для меня как шарм.

Из множества зависимостей существует большое подмножество, которое никогда не меняется. Мне всегда нужен питон 3,6, NumPy, панды, факел, ...

Таким образом, вместо кэширования conda, вы можете кэшировать Docker и повторно использовать базовый образ с уже установленными зависимостями:

FROM continuumio/miniconda3

WORKDIR /app
COPY environment.yml /app

# install package dependencies
RUN conda update conda
RUN conda env create -f environment.yml
RUN echo "source activate api_neural" > ~/.bashrc
ENV PATH /opt/conda/envs/env/bin:$PATH

Затем вы можете добавить дополнительную конфигурацию во второй dockerfile:

FROM base_deps

# add additional things on top, here I'm running some python in the conda env
RUN /bin/bash -c 'echo $(which python);\
source activate api_neural;\
python -c "import nltk; nltk.download(\"wordnet\"); nltk.download(\"words\")";\
python -m spacy download en;\
python -c "from fastai import untar_data, URLs; model_path = untar_data(URLs.WT103, data=False)"'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...