Как написать многоэтапный Dockerfile, чтобы он перестраивался при изменениях в git?

Я создал образ докера, который используется для размещения моих статических файлов для разных, но связанных сайтов.

Dockerfile выглядит следующим образом

FROM node:8 as builder
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
RUN apt-get update
RUN apt-get install -y apt-utils libapt-inst2.0 moreutils rsync libunwind-dev

RUN wget -O azcopy.tar.gz https://aka.ms/downloadazcopylinux64
RUN tar -xf azcopy.tar.gz
RUN ./install.sh

RUN mkdir -p /opt/myproject
RUN mkdir -p /var/www/adminapp/
RUN mkdir -p /var/www/app
RUN mkdir -p /var/www/publicsite
WORKDIR /opt/myproject
ADD ./deploy-scripts /opt/myproject
RUN ./deployAdminApp.sh ./deploy.config.json  -m setup
RUN ./deployApp.sh ./deploy.config.json -m setup
RUN ./deployPublicSite.sh ./deploy.config.json -m setup


FROM nginx:alpine as nginx
## Remove default nginx website
RUN rm -rf /usr/share/nginx/html/*
ADD ./nginx /etc/nginx/
ADD .htpasswd /etc/nginx/.htpasswd
ADD ./ssl /etc/ssl
COPY --from=builder /var/www/ /var/www/
RUN ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/mysite.com
RUN ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

EXPOSE 80
EXPOSE 443
CMD nginx -g "daemon off;"

У меня есть три сценария развертывания, которые запускаются в моем "образе сборки", deployAdminApp.sh, deployApp.sh, а также deployPublicSite.sh Каждый из этих сценариев извлекает код из Github, создает угловое приложение, загружает ресурсы в CDN и затем перемещает dist папка в /var/www/<relevant folder> который я затем копирую в мое изображение nginx. Этот процесс сборки занимает около 10-15 минут на приложение, поэтому вся сборка с нуля занимает около 30-45 минут.

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

С другой стороны, есть ли способ для Docker признать, что файлы в dist папка в образе компоновщика изменилась, и поэтому скопируйте эти файлы в образ nginx, не изменяя вручную порядок команд RUN?

В настоящее время я должен изменить порядок вызовов трех сценариев, чтобы принудительно перестроить код приложения, и когда я это делаю, он перестраивает все из них. Поэтому я либо строю все, либо ничего, и мне приходится вручную проверять репозиторий GitHub, чтобы определить, нужно ли мне все строить.

0 ответов

Другие вопросы по тегам