Этот шаблон является гибким и хорошо сработал для меня.Текущий каталог в этом примере является родительским для каталога, содержащего статические ресурсы, которые находятся в папке с именем public.
В этой папке сценарий оболочки выглядит так:
#!/bin/bash
# Build a Docker image "site1-assets" with the static files.
docker build -f - --tag=site1-assets . <<EOF
FROM scratch
COPY public ./
EOF
Аналогичным образом действуйте для статических ресурсов для site2 и т. Д. Неважно, где находится каждый набор файлов, если они все находятся на одном компьютере.
Затем в любом Dockerfile, который нуждается в активахтакие строки:
FROM site1-assets as site1
COPY / /
FROM site2-assets as site2
COPY / /
# and so on.
# And now the step that uses the external files.
FROM alpine
# Some config lines here ...
# Copy in files in image "site1".
COPY from=site1 / /var/www/http/site1/
# Copy in files in image "site2".
COPY from=site2 / /var/www/http/site2/
# More config lines if needed.
CMD run-my-app args
Если внешние образы меняются редко, возможно, вы захотите скопировать файлы в начале клиентского Dockerfile.Если они часто меняются, может быть, лучше поставить их ближе к концу.Идея заключается в том, чтобы воспользоваться возможностью Docker для кэширования частичного изображения для использования в будущих сборках.
Основная идея в основном такая же, как опция «поделиться базовым изображением» в https://stackoverflow.com/a/39382248/5022006,, ноболее гибкий, чем описанный там сценарий.