docker更新jar包方式
在上一篇文章说到部署jar包到docker,但是有一个问题,就是如果项目更新,则需要重新打包镜像,然后运行容器等等一系列操作,比较繁琐,所以这次介绍的方式比较简洁,没有繁琐的步骤。
方式一:
1.编写Dockerfile
FROM java:8
EXPOSE 8888
ENTRYPOINT ["java","-jar","/usr/data/hello-2.0.0-SNAPSHOT.jar"]
这里的第三个参数“/usr/data/hello-2.0.0-SNAPSHOT.jar”,表示jar包在容器中的位置。
然后我们每次更新项目的时候直接取这个位置更新jar包就行了,如果觉得每次进入容器更新jar包比较麻烦,可以在创建容器的时候将这个目录挂载出去,这样我们可以直接操作宿主机挂载的文件夹就可以了。
2.制作镜像
docker build -t hello:demo .
注意后面的点(.)表示Dockerfile文件所在的位置,点代表在当前位置。
3.创建容器
docker run -di --name=mydemo -p 8000:8888 -v /usr/local/apps/hello:/usr/data
-v :文件夹挂载,这样我们之后更新jar包的时候可以直接在宿主机中操作,而不需要进去容器
4.完成并测试
到这里就搞定了,接下来就是测试了,将新的jar包放入宿主机的/usr/local/apps/hello目录,重新启动该容器即可。
这种方式比较简单,但是有一个缺点就是更新的jar包名字必须和之前Dockerfile中配置的一样,所以下面第二种方式就可以解决这个问题。
方式二:
1.编写一个sh脚本
名字自己随便取一个,我这里文件名叫“hello.sh”,内容如下:
java -jar /usr/data/hello-2.0.0-SNAPSHOT.jar
文件存放到与宿主机挂载的容器内部文件夹中
2.编写Dockerfile文件
FROM java:8
EXPOSE 8888
CMD ["sh","-c","/usr/data/hello.sh"]
CMD [“sh”,"-c","/data/eurekaclient.sh"] 就是在容器启动时启动上一步创建的.sh脚本。
3.制作镜像
docker build -t hello:demo .
4.创建容器
docker run -di --name=mydemo -p 8000:8888 -v /usr/local/apps/hello:/usr/data
5.完成并测试
这样,就完成了,如果后面更新jar的话,直接将新的jar包替换到宿主机挂载的目录下即可,如果文件名发生改变的话,可以直接修改sh脚本文件即可。更新完jar包之后记得需要重启容器:
docker restart 容器名