У меня проблема с тем, что мои контейнеры стали слишком тяжелыми, и многие из них имеют много одинаковых зависимостей.
Я хотел бы создать базовый контейнер, который будет устанавливать и хранить все зависимости, а затем другие контейнеры, указывающие на dir зависимостей (с использованием томов) в этом базовом контейнере.
Я пытаюсь сделать небольшой POC для этого, и я начал с попытки установить один контейнер для установки пакета python, а затем другой контейнер, выполняющий сценарий python с использованием этого модуля.
Я думаю, что я создам каталог на хосте, который будет смонтирован на всех контейнерах и будет содержать все необходимые данные и зависимости.
Должен заметить, что я не могу использовать docker compose, хотя это, вероятно, лучше.
Это Dockerfile для моего базового контейнера:
FROM python:3.6-slim
RUN apt-get update && apt-get install -y vim
RUN pip install --install-option="--prefix=/volumes/shared/dependencies" deepdiff
CMD tail -f /dev/null
Вы можете видеть, что pip установится в /volumes/shared/dependencies
dir.
Я запускаю его так:
docker build -t base_container .
docker run -ti -v "$PWD/shared/base_dependencies":/volumes/shared/dependencies base_container
Теперь, если я иду в контейнер на /volumes/shared/dependencies
, я вижу файлы, которые я поместил в директорию хоста, но не установленный пакет.С другой стороны, если директория хоста пуста, я вижу установленный пакет.
Я также попытался применить 2 тома (один для входящих файлов и один для файлов, которые создаст контейнер)
Как получить двусторонний том в этой ситуации, объяснениео том, почему это происходит, тоже будет приятно.