更新码头图像中的jar

时间:2016-08-05 13:17:10

标签: spring docker spring-boot dockerfile

我正在使用以下文件构建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 命令时,它只是坐在那里,什么都不做。

2 个答案:

答案 0 :(得分:1)

看起来你错过了泊坞容器/图像的点。 新应用版本==>新的Docker图像是真正的路径,听起来就像你想要的那样。

如果只更改了最后一层(您提供的Dockerfile就是这种情况), docker push 将只上传图像的新图层。所以在这种情况下,有关app.jar ...

的大小

答案 1 :(得分:0)

我也必须这样做。

  1. 从主机连接到您的Docker。
  2. 在docker中停止Java进程。
  3. 从终端退出docker
  4. 上载jar的新版本并替换旧的jar。
  5. 从主机连接到您的docker。请参阅步骤1。
  6. 启动Java进程。

详细信息。

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变量。