把Jar包打包为docker镜像

背景:要用JaCoCo搞代码覆盖率,使用on-the-fly模式,因为开发都是把jar打包为docker镜像来部署,所以先要弄清楚打包的过程,才能知道在哪里修改jar包的启动命令。

使用Dockfile来创建镜像

试验的jar包是用httpServer写的一个简单web服务,访问/test就返回helloworld,下面先拉取一个java:8的基础镜像:

docker pull java:8,再用docker images检查一下:

下面是Dockfile的内容:

FROM java:8
MAINTAINER xxx
COPY httpServerDemo.jar /usr/local/httpServerDemo.jar
EXPOSE 8089
ENTRYPOINT ["java", "-jar", "/usr/local/httpServerDemo.jar"]

生成镜像:

把Dockfile和jar包放在同一个目录下,执行:docker build -t httpserver_demo:1.0 -f Dockerfile .,注意Dockerfile后面的点指的是把当前目录作为上下文目录,创建镜像时,会把上下文目录的文件拷贝到镜像中。

启动镜像:

docker run -P httpserver_demo:1.0,-P是把Dockerfile里EXPOSE声明的端口映射到宿主机一个随机的高阶端口
docker run -p 8090:8089 httpserver_demo:1.0,-p就是指定映射关系,可以看出前面是宿主机的端口,后面是镜像的端口
也可以用--name指定启动容器的名称:docker run --name httpserverDemo -p 8091:8089 httpserver_demo:1.0

Dockerfile内容解释:

 java:8就是刚下载的基础镜像,MAINTAINER是作者,COPY是把本地的jar拷贝到镜像中,EXPOSE声明镜像开放的接口,

ENTRYPOINT 是指定在docker run时的命令参数,类似的还是RUN和CMD命令,区别参考:https://www.cnblogs.com/klvchen/p/9238410.html

结论

可以在启动镜像的时候,用--entrypoint 选项来覆盖Dockfile里ENTRYPOINT 的设置,来增加JaCoco的javaagent参数

你可能感兴趣的:(把Jar包打包为docker镜像)