我正在使用以下文件构建Docker镜像。这是一个简单的Spring Boot应用程序。 当我对Spring项目进行更新时,我正在重建图像以获取更新的图像。然而,这创造了一个全新的图像,它完全被重新推送到整个仓库(700 + MB)。如何更新现有图像以包含新更新的jar而不是全新的图像,以便我不必仅仅为了更新Spring应用程序而推高700 + MB?
这是我目前使用的dockerfile:
FROM java:8
EXPOSE 8080
VOLUME /tmp
ADD app-name.1.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
注意:当我运行 docker attach 命令时,它只是坐在那里,什么都不做。
答案 0 :(得分:1)
看起来你错过了泊坞容器/图像的点。 新应用版本==>新的Docker图像是真正的路径,听起来就像你想要的那样。
如果只更改了最后一层(您提供的Dockerfile就是这种情况), docker push 将只上传图像的新图层。所以在这种情况下,有关app.jar ...
的大小答案 1 :(得分:0)
我也必须这样做。
详细信息。
1)打开主机命令行或shell。从主机连接到您的Docker。
docker exec -it DOCKER_ID bash
要获取DOCKER_ID,请docker ps
。
2)找出Java进程ID并杀死它。
top
-找出进程ID。
kill -9 PROCESS_ID
-杀死它。
3)从连接的docker bash的bash上执行exit
命令。
4)上传并替换docker中的jar
docker cp java-app.jar DOCKER_ID:/app/java-app.jar
注意,在您的jar所在的docker文件夹中,可以不同。在我的情况下是app
。
5)参见1。
6)java -jar java-app.jar
注意,准备图像时应定义JAVA_HOME env变量。