Dockerfile

FROM openjdk:8-jdk-alpine as basic VOLUME /tmp COPY BOOT-INF/lib /app/lib COPY META-INF /app/META-INF COPY BOOT-INF/classes /app/classes  FROM openjdk:8-jdk-alpine COPY --from=basic /app/lib /app/lib COPY --from=basic /app/META-INF /app/META-INF COPY --from=basic /app/classes /app/classes  ENTRYPOINT java -XX:MaxRAMFraction=2 -cp app/classes:app/lib/* com.example.demo.DemoApplication

构建脚本

repository="harbor.hknaruto.com/library/training"  mvn clean package -Dmaven.test.skip=true -T4 mkdir target/dependency cp Dockerfile target/dependency (   cd target/dependency   jar -xf ../*.jar   docker build -t "$repository":"$(git branch | awk '{print $2}')"."$(git rev-parse --short HEAD)" .   # 清理老的镜像,本地保留3个最近构建的镜像,从第4个开始,删除本地镜像   docker images | grep "$repository" | tail -n +4 | awk '{print $3}' | xargs -i docker rmi {} )

第一次构建效果

$ docker history harbor.hknaruto.com/library/training:master.30b943a IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT f5d2de97b288        12 seconds ago      /bin/sh -c #(nop)  ENTRYPOINT ["/bin/sh" "-c…   0B                   a50c1ee7d59c        12 seconds ago      /bin/sh -c #(nop) COPY dir:590e06da69bc4b6fc…   10.8kB               5b91b3624e0a        12 seconds ago      /bin/sh -c #(nop) COPY dir:34d1e4a296310a6ec…   2.17kB               52dcee3f3e35        4 minutes ago       /bin/sh -c #(nop) COPY dir:94d828a4ed8596549…   20MB                 a3562aa0b991        2 years ago         /bin/sh -c set -x  && apk add --no-cache   o…   99.3MB               <missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_ALPINE_VERSION=8…   0B                   <missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_VERSION=8u212       0B                   <missing>           2 years ago         /bin/sh -c #(nop)  ENV PATH=/usr/local/sbin:…   0B                   <missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/lib/jv…   0B                   <missing>           2 years ago         /bin/sh -c {   echo '#!/bin/sh';   echo 'set…   87B                  <missing>           2 years ago         /bin/sh -c #(nop)  ENV LANG=C.UTF-8             0B                   <missing>           2 years ago         /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B                   <missing>           2 years ago         /bin/sh -c #(nop) ADD file:a86aea1f3a7d68f6a…   5.53MB

第二次构建效果

$ docker history harbor.hknaruto.com/library/training:master.30b943a IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT abc62088b1b6        1 second ago        /bin/sh -c #(nop)  ENTRYPOINT ["/bin/sh" "-c…   0B                   61cf540de3ff        1 second ago        /bin/sh -c #(nop) COPY dir:d4dc9a24cb84bd616…   10.8kB               5b91b3624e0a        2 minutes ago       /bin/sh -c #(nop) COPY dir:34d1e4a296310a6ec…   2.17kB               52dcee3f3e35        5 minutes ago       /bin/sh -c #(nop) COPY dir:94d828a4ed8596549…   20MB                 a3562aa0b991        2 years ago         /bin/sh -c set -x  && apk add --no-cache   o…   99.3MB               <missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_ALPINE_VERSION=8…   0B                   <missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_VERSION=8u212       0B                   <missing>           2 years ago         /bin/sh -c #(nop)  ENV PATH=/usr/local/sbin:…   0B                   <missing>           2 years ago         /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/lib/jv…   0B                   <missing>           2 years ago         /bin/sh -c {   echo '#!/bin/sh';   echo 'set…   87B                  <missing>           2 years ago         /bin/sh -c #(nop)  ENV LANG=C.UTF-8             0B                   <missing>           2 years ago         /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B                   <missing>           2 years ago         /bin/sh -c #(nop) ADD file:a86aea1f3a7d68f6a…   5.53MB

其中最大的lib目录由于没有发生变动,并没有执行更新。

注意,如果不采用COPY --from 方式,即使lib目录没有更新,也会重新创建新的层!导致镜像变动部分仍然很大。