我最近开始学习Docker,并一直在尝试学习如何使用多阶段构建。 这里的文档:https://docs.docker.com/develop/develop-images/multistage-build/ 说
最终结果是与以前相同的微小生产图像,带有 大大降低了复杂性。您无需创建任何 中间图像,您无需提取任何伪像即可 您的本地系统。
还有一个例子,我认为不需要在这里复制,但是我也使用Gradle启动了一个我想容器化的小型Spring Boot项目。这是我的Dockerfile:
# using multi-stage to avoid manual ./gradlew build
FROM openjdk:11 as build
COPY gradle gradle
COPY build.gradle build.gradle
COPY gradlew gradlew
COPY gradlew.bat gradlew.bat
COPY settings.gradle settings.gradle
COPY src src
RUN ./gradlew build
# final image
FROM openjdk:11
WORKDIR /service
COPY --from=build /build/libs/*.jar /service/app.jar
ENTRYPOINT ["java","-jar","/service/app.jar"]
这是在构建之前的docker images
命令输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
openjdk 11 5c6e71a989bc 12 days ago 627MB
构建命令:docker build . -t sdemo:1.2.1
docker images
完成后:
REPOSITORY TAG IMAGE ID CREATED SIZE
sdemo 1.2.1 24ea50770b2a 13 seconds ago 672MB
<none> <none> a1f8e74e1d81 20 seconds ago 960MB
openjdk 11 5c6e71a989bc 12 days ago 627MB
您可以清楚地看到,我有2张而不是1张图片,而未命名的图片的大小可笑为960MB。是什么导致此问题?另外,如果相关,我在运行Ubuntu的虚拟盒子计算机上。
发布此问题时,整个项目位于https://github.com/vincent2704/demoSpringBootApp的1.2.1版下。