Как написать многоэтапный 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, чтобы определить, нужно ли мне все строить.