我创建了一个docker映像,用于为不同但相关的网站托管我的静态文件。
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存储库,以确定是否应该构建所有内容。