Проект, включающий несколько файлов Dockerfiles и приложения, совместно использующие некоторые файлы. Как его построить? - PullRequest
0 голосов
/ 09 мая 2020
• 1000 1006 * Однако Dockerfile не может позволить КОПИРОВАТЬ файлы из своего родительского каталога.

Если быть точным, это возможно, если мы запустим docker build с опцией -f в проекте root.
Но Я не хотел бы этого делать, потому что контекст сборки будет излишне большим.
При сборке app1 я не хочу включать app2 / huge_modules / в контекст сборки (так же, как при сборке app2).

Итак, я готовлю сценарий сборки в каждом каталоге приложения.
Вот так.

cd $(dirname $0)
cp ../common/* ./
docker build -t app1 .

Но мне такое решение кажется некрасивым. Есть ли хорошее решение для этого случая?

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Создайте базовый образ, содержащий вашу common библиотеку, а затем создайте два образа ваших приложений поверх него. Вы, вероятно, закончите немного реструктуризацией, чтобы предоставить Dockerfile для ваших общих файлов:

.
├── app1
│   ├── Dockerfile
│   ├── app.py
│   └── huge_modules/
├── app2
│   ├── Dockerfile
│   ├── app.py
│   └── huge_modules/
├── base
|   ├── Dockerfile
|   └── common
│       └── my_lib.py
└── deploy.sh

Вы начинаете с создания базового образа:

docker build -t mybaseimage base/

И затем ваш Dockerfile для app1 и app2 будет начинаться с:

FROM mybaseimage
0 голосов
/ 09 мая 2020

Одно из возможных решений - запустить процесс сборки из верхнего каталога с указанным вами флагом -f, динамически генерируя файл .dockerignore.

То есть, допустим, вы в настоящее время создаете app1. Затем вы сначала должны создать в верхнем каталоге файл .dockerignore с содержимым: app2, а затем запустить процесс сборки. После завершения сборки удалите файл .dockerignore.

Теперь вы хотите собрать app2? Нет проблем! Аналогичным образом сначала динамически сгенерируйте файл .dockerignore с содержимым app1, создайте и удалите файл. Вуаля!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...