$ docker build --tag layers-blog:step-0-initial-build .
...
Step 9/24 : WORKDIR ./layers-blog-snapshot-dependency/
---> 88b225936bee
Step 10/24 : COPY ./layers-blog-snapshot-dependency/ ./
---> 96178605fb19
Step 11/24 : RUN mvn install --quiet --update-snapshots --strict-checksums --batch-mode
---> e2d1d22c9519
Step 12/24 : WORKDIR ../layers-blog-app/
---> e7bb8e108b94
Step 13/24 : COPY layers-blog-app ./
---> 01cb36659cb6
Step 14/24 : RUN mvn package --quiet --update-snapshots --strict-checksums --batch-mode
---> cd6abb394e3e
Step 15/24 : WORKDIR ./target/
---> 2c6272c90ef4
Step 16/24 : RUN unzip -q *.jar -d ./unzipped/ && tree ./unzipped/ && mkdir --parents /layers/3-app/BOOT-INF/ && mv ./unzipped/BOOT-INF/classes/ /layers/3-app/BOOT-INF/ && mv ./unzipped/META-INF/ /layers/3-app/ && mkdir --parents /layers/2-dependencies-snapshot/BOOT-INF/lib/ && find ./unzipped/BOOT-INF/lib/ -type f -name '*-SNAPSHOT.jar' -exec mv {} /layers/2-dependencies-snapshot/BOOT-INF/lib/ ';' && mv ./unzipped/ /layers/1-dependencies-release/ && tree /layers/
/unzipped/
├── BOOT-INF
│ ├── classes
│ │ ├── application.properties
│ │ └── org
│ │ └── lukewpatterson
│ │ └── layers
│ │ └── blog
│ │ └── app
│ │ └── OurSpringBootApplication.class
│ └── lib
│ ├── classmate-1.3.4.jar
│ ├── hibernate-validator-6.0.12.Final.jar
│ ├── jackson-annotations-2.9.0.jar
│ ├── jackson-core-2.9.6.jar
│ ├── jackson-databind-2.9.6.jar
│ ├── jackson-datatype-jdk8-2.9.6.jar
│ ├── jackson-datatype-jsr310-2.9.6.jar
│ ├── jackson-module-parameter-names-2.9.6.jar
│ ├── javax.annotation-api-1.3.2.jar
│ ├── jboss-logging-3.3.2.Final.jar
│ ├── jul-to-slf4j-1.7.25.jar
│ ├── layers-blog-snapshot-dependency-1-SNAPSHOT.jar
│ ├── log4j-api-2.10.0.jar
│ ├── log4j-to-slf4j-2.10.0.jar
│ ├── logback-classic-1.2.3.jar
│ ├── logback-core-1.2.3.jar
│ ├── slf4j-api-1.7.25.jar
│ ├── snakeyaml-1.19.jar
│ ├── spring-aop-5.0.9.RELEASE.jar
│ ├── spring-beans-5.0.9.RELEASE.jar
│ ├── spring-boot-2.0.5.RELEASE.jar
│ ├── spring-boot-autoconfigure-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-json-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-logging-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-tomcat-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-web-2.0.5.RELEASE.jar
│ ├── spring-context-5.0.9.RELEASE.jar
│ ├── spring-core-5.0.9.RELEASE.jar
│ ├── spring-expression-5.0.9.RELEASE.jar
│ ├── spring-jcl-5.0.9.RELEASE.jar
│ ├── spring-web-5.0.9.RELEASE.jar
│ ├── spring-webmvc-5.0.9.RELEASE.jar
│ ├── tomcat-embed-core-8.5.34.jar
│ ├── tomcat-embed-el-8.5.34.jar
│ ├── tomcat-embed-websocket-8.5.34.jar
│ └── validation-api-2.0.1.Final.jar
├── META-INF
│ ├── MANIFEST.MF
│ └── maven
│ └── org.lukewpatterson
│ └── layers-blog-app
│ ├── pom.properties
│ └── pom.xml
└── org
└── springframework
└── boot
└── loader
├── ExecutableArchiveLauncher.class
├── JarLauncher.class
├── LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
├── LaunchedURLClassLoader.class
├── Launcher.class
├── MainMethodRunner.class
├── PropertiesLauncher$1.class
├── PropertiesLauncher$ArchiveEntryFilter.class
├── PropertiesLauncher$PrefixMatchingArchiveFilter.class
├── PropertiesLauncher.class
├── WarLauncher.class
├── archive
│ ├── Archive$Entry.class
│ ├── Archive$EntryFilter.class
│ ├── Archive.class
│ ├── ExplodedArchive$1.class
│ ├── ExplodedArchive$FileEntry.class
│ ├── ExplodedArchive$FileEntryIterator$EntryComparator.class
│ ├── ExplodedArchive$FileEntryIterator.class
│ ├── ExplodedArchive.class
│ ├── JarFileArchive$EntryIterator.class
│ ├── JarFileArchive$JarFileEntry.class
│ └── JarFileArchive.class
├── data
│ ├── RandomAccessData.class
│ ├── RandomAccessDataFile$1.class
│ ├── RandomAccessDataFile$DataInputStream.class
│ ├── RandomAccessDataFile$FileAccess.class
│ └── RandomAccessDataFile.class
├── jar
│ ├── AsciiBytes.class
│ ├── Bytes.class
│ ├── CentralDirectoryEndRecord.class
│ ├── CentralDirectoryFileHeader.class
│ ├── CentralDirectoryParser.class
│ ├── CentralDirectoryVisitor.class
│ ├── FileHeader.class
│ ├── Handler.class
│ ├── JarEntry.class
│ ├── JarEntryFilter.class
│ ├── JarFile$1.class
│ ├── JarFile$2.class
│ ├── JarFile$JarFileType.class
│ ├── JarFile.class
│ ├── JarFileEntries$1.class
│ ├── JarFileEntries$EntryIterator.class
│ ├── JarFileEntries.class
│ ├── JarURLConnection$1.class
│ ├── JarURLConnection$JarEntryName.class
│ ├── JarURLConnection.class
│ ├── StringSequence.class
│ └── ZipInflaterInputStream.class
└── util
└── SystemPropertyUtils.class
20 directories, 92 files
/layers/
├── 1-dependencies-release
│ ├── BOOT-INF
│ │ └── lib
│ │ ├── classmate-1.3.4.jar
│ │ ├── hibernate-validator-6.0.12.Final.jar
│ │ ├── jackson-annotations-2.9.0.jar
│ │ ├── jackson-core-2.9.6.jar
│ │ ├── jackson-databind-2.9.6.jar
│ │ ├── jackson-datatype-jdk8-2.9.6.jar
│ │ ├── jackson-datatype-jsr310-2.9.6.jar
│ │ ├── jackson-module-parameter-names-2.9.6.jar
│ │ ├── javax.annotation-api-1.3.2.jar
│ │ ├── jboss-logging-3.3.2.Final.jar
│ │ ├── jul-to-slf4j-1.7.25.jar
│ │ ├── log4j-api-2.10.0.jar
│ │ ├── log4j-to-slf4j-2.10.0.jar
│ │ ├── logback-classic-1.2.3.jar
│ │ ├── logback-core-1.2.3.jar
│ │ ├── slf4j-api-1.7.25.jar
│ │ ├── snakeyaml-1.19.jar
│ │ ├── spring-aop-5.0.9.RELEASE.jar
│ │ ├── spring-beans-5.0.9.RELEASE.jar
│ │ ├── spring-boot-2.0.5.RELEASE.jar
│ │ ├── spring-boot-autoconfigure-2.0.5.RELEASE.jar
│ │ ├── spring-boot-starter-2.0.5.RELEASE.jar
│ │ ├── spring-boot-starter-json-2.0.5.RELEASE.jar
│ │ ├── spring-boot-starter-logging-2.0.5.RELEASE.jar
│ │ ├── spring-boot-starter-tomcat-2.0.5.RELEASE.jar
│ │ ├── spring-boot-starter-web-2.0.5.RELEASE.jar
│ │ ├── spring-context-5.0.9.RELEASE.jar
│ │ ├── spring-core-5.0.9.RELEASE.jar
│ │ ├── spring-expression-5.0.9.RELEASE.jar
│ │ ├── spring-jcl-5.0.9.RELEASE.jar
│ │ ├── spring-web-5.0.9.RELEASE.jar
│ │ ├── spring-webmvc-5.0.9.RELEASE.jar
│ │ ├── tomcat-embed-core-8.5.34.jar
│ │ ├── tomcat-embed-el-8.5.34.jar
│ │ ├── tomcat-embed-websocket-8.5.34.jar
│ │ └── validation-api-2.0.1.Final.jar
│ └── org
│ └── springframework
│ └── boot
│ └── loader
│ ├── ExecutableArchiveLauncher.class
│ ├── JarLauncher.class
│ ├── LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
│ ├── LaunchedURLClassLoader.class
│ ├── Launcher.class
│ ├── MainMethodRunner.class
│ ├── PropertiesLauncher$1.class
│ ├── PropertiesLauncher$ArchiveEntryFilter.class
│ ├── PropertiesLauncher$PrefixMatchingArchiveFilter.class
│ ├── PropertiesLauncher.class
│ ├── WarLauncher.class
│ ├── archive
│ │ ├── Archive$Entry.class
│ │ ├── Archive$EntryFilter.class
│ │ ├── Archive.class
│ │ ├── ExplodedArchive$1.class
│ │ ├── ExplodedArchive$FileEntry.class
│ │ ├── ExplodedArchive$FileEntryIterator$EntryComparator.class
│ │ ├── ExplodedArchive$FileEntryIterator.class
│ │ ├── ExplodedArchive.class
│ │ ├── JarFileArchive$EntryIterator.class
│ │ ├── JarFileArchive$JarFileEntry.class
│ │ └── JarFileArchive.class
│ ├── data
│ │ ├── RandomAccessData.class
│ │ ├── RandomAccessDataFile$1.class
│ │ ├── RandomAccessDataFile$DataInputStream.class
│ │ ├── RandomAccessDataFile$FileAccess.class
│ │ └── RandomAccessDataFile.class
│ ├── jar
│ │ ├── AsciiBytes.class
│ │ ├── Bytes.class
│ │ ├── CentralDirectoryEndRecord.class
│ │ ├── CentralDirectoryFileHeader.class
│ │ ├── CentralDirectoryParser.class
│ │ ├── CentralDirectoryVisitor.class
│ │ ├── FileHeader.class
│ │ ├── Handler.class
│ │ ├── JarEntry.class
│ │ ├── JarEntryFilter.class
│ │ ├── JarFile$1.class
│ │ ├── JarFile$2.class
│ │ ├── JarFile$JarFileType.class
│ │ ├── JarFile.class
│ │ ├── JarFileEntries$1.class
│ │ ├── JarFileEntries$EntryIterator.class
│ │ ├── JarFileEntries.class
│ │ ├── JarURLConnection$1.class
│ │ ├── JarURLConnection$JarEntryName.class
│ │ ├── JarURLConnection.class
│ │ ├── StringSequence.class
│ │ └── ZipInflaterInputStream.class
│ └── util
│ └── SystemPropertyUtils.class
├── 2-dependencies-snapshot
│ └── BOOT-INF
│ └── lib
│ └── layers-blog-snapshot-dependency-1-SNAPSHOT.jar
└── 3-app
├── BOOT-INF
│ └── classes
│ ├── application.properties
│ └── org
│ └── lukewpatterson
│ └── layers
│ └── blog
│ └── app
│ └── OurSpringBootApplication.class
└── META-INF
├── MANIFEST.MF
└── maven
└── org.lukewpatterson
└── layers-blog-app
├── pom.properties
└── pom.xml
26 directories, 92 files
...
Step 19/24 : WORKDIR /app/
---> e83ac4cda8f7
Step 20/24 : COPY --from=build /layers/1-dependencies-release/ ./
---> d158e97b92fe
Step 21/24 : COPY --from=build /layers/2-dependencies-snapshot/ ./
---> bb5e6342aa80
Step 22/24 : COPY --from=build /layers/3-app/ ./
---> e0395252c3b1
Step 23/24 : RUN tree
.
├── BOOT-INF
│ ├── classes
│ │ ├── application.properties
│ │ └── org
│ │ └── lukewpatterson
│ │ └── layers
│ │ └── blog
│ │ └── app
│ │ └── OurSpringBootApplication.class
│ └── lib
│ ├── classmate-1.3.4.jar
│ ├── hibernate-validator-6.0.12.Final.jar
│ ├── jackson-annotations-2.9.0.jar
│ ├── jackson-core-2.9.6.jar
│ ├── jackson-databind-2.9.6.jar
│ ├── jackson-datatype-jdk8-2.9.6.jar
│ ├── jackson-datatype-jsr310-2.9.6.jar
│ ├── jackson-module-parameter-names-2.9.6.jar
│ ├── javax.annotation-api-1.3.2.jar
│ ├── jboss-logging-3.3.2.Final.jar
│ ├── jul-to-slf4j-1.7.25.jar
│ ├── layers-blog-snapshot-dependency-1-SNAPSHOT.jar
│ ├── log4j-api-2.10.0.jar
│ ├── log4j-to-slf4j-2.10.0.jar
│ ├── logback-classic-1.2.3.jar
│ ├── logback-core-1.2.3.jar
│ ├── slf4j-api-1.7.25.jar
│ ├── snakeyaml-1.19.jar
│ ├── spring-aop-5.0.9.RELEASE.jar
│ ├── spring-beans-5.0.9.RELEASE.jar
│ ├── spring-boot-2.0.5.RELEASE.jar
│ ├── spring-boot-autoconfigure-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-json-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-logging-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-tomcat-2.0.5.RELEASE.jar
│ ├── spring-boot-starter-web-2.0.5.RELEASE.jar
│ ├── spring-context-5.0.9.RELEASE.jar
│ ├── spring-core-5.0.9.RELEASE.jar
│ ├── spring-expression-5.0.9.RELEASE.jar
│ ├── spring-jcl-5.0.9.RELEASE.jar
│ ├── spring-web-5.0.9.RELEASE.jar
│ ├── spring-webmvc-5.0.9.RELEASE.jar
│ ├── tomcat-embed-core-8.5.34.jar
│ ├── tomcat-embed-el-8.5.34.jar
│ ├── tomcat-embed-websocket-8.5.34.jar
│ └── validation-api-2.0.1.Final.jar
├── META-INF
│ ├── MANIFEST.MF
│ └── maven
│ └── org.lukewpatterson
│ └── layers-blog-app
│ ├── pom.properties
│ └── pom.xml
└── org
└── springframework
└── boot
└── loader
├── ExecutableArchiveLauncher.class
├── JarLauncher.class
├── LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
├── LaunchedURLClassLoader.class
├── Launcher.class
├── MainMethodRunner.class
├── PropertiesLauncher$1.class
├── PropertiesLauncher$ArchiveEntryFilter.class
├── PropertiesLauncher$PrefixMatchingArchiveFilter.class
├── PropertiesLauncher.class
├── WarLauncher.class
├── archive
│ ├── Archive$Entry.class
│ ├── Archive$EntryFilter.class
│ ├── Archive.class
│ ├── ExplodedArchive$1.class
│ ├── ExplodedArchive$FileEntry.class
│ ├── ExplodedArchive$FileEntryIterator$EntryComparator.class
│ ├── ExplodedArchive$FileEntryIterator.class
│ ├── ExplodedArchive.class
│ ├── JarFileArchive$EntryIterator.class
│ ├── JarFileArchive$JarFileEntry.class
│ └── JarFileArchive.class
├── data
│ ├── RandomAccessData.class
│ ├── RandomAccessDataFile$1.class
│ ├── RandomAccessDataFile$DataInputStream.class
│ ├── RandomAccessDataFile$FileAccess.class
│ └── RandomAccessDataFile.class
├── jar
│ ├── AsciiBytes.class
│ ├── Bytes.class
│ ├── CentralDirectoryEndRecord.class
│ ├── CentralDirectoryFileHeader.class
│ ├── CentralDirectoryParser.class
│ ├── CentralDirectoryVisitor.class
│ ├── FileHeader.class
│ ├── Handler.class
│ ├── JarEntry.class
│ ├── JarEntryFilter.class
│ ├── JarFile$1.class
│ ├── JarFile$2.class
│ ├── JarFile$JarFileType.class
│ ├── JarFile.class
│ ├── JarFileEntries$1.class
│ ├── JarFileEntries$EntryIterator.class
│ ├── JarFileEntries.class
│ ├── JarURLConnection$1.class
│ ├── JarURLConnection$JarEntryName.class
│ ├── JarURLConnection.class
│ ├── StringSequence.class
│ └── ZipInflaterInputStream.class
└── util
└── SystemPropertyUtils.class
20 directories, 92 files
Step 24/24 : CMD ["java", "org.springframework.boot.loader.JarLauncher"]
---> ffcb1a7c41eb
Successfully built ffcb1a7c41eb
Successfully tagged layers-blog:step-0-initial-build
Loading
Please register or sign in to comment