Я создал образ докера, который используется для размещения моих статических файлов для разных, но связанных сайтов.
Файл Docker выглядит следующим образом
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, чтобы определить, следует ли мне все строить.