背景:要用JaCoCo搞代碼覆蓋率,使用on-the-fly模式,因為開發(fā)都是把jar打包為docker鏡像來部署叹话,所以先要弄清楚打包的過程偷遗,才能知道在哪里修改jar包的啟動命令。
使用Dockfile來創(chuàng)建鏡像
試驗的jar包是用httpServer寫的一個簡單web服務(wù)驼壶,訪問/test就返回helloworld氏豌,下面先拉取一個java:8的基礎(chǔ)鏡像:
docker pull java:8,再用docker images檢查一下:
下面是Dockfile的內(nèi)容:
FROM java:8
MAINTAINER xxx
COPY httpServerDemo.jar /usr/local/httpServerDemo.jar
EXPOSE 8089
ENTRYPOINT ["java", "-jar", "/usr/local/httpServerDemo.jar"]
生成鏡像:
把Dockfile和jar包放在同一個目錄下热凹,執(zhí)行:docker build -t httpserver_demo:1.0 -f Dockerfile .泵喘,注意Dockerfile后面的點指的是把當(dāng)前目錄作為上下文目錄,創(chuàng)建鏡像時碌嘀,會把上下文目錄的文件拷貝到鏡像中。
啟動鏡像:
docker run -P httpserver_demo:1.0歪架,-P是把Dockerfile里EXPOSE聲明的端口映射到宿主機一個隨機的高階端口
docker run -p 8090:8089 httpserver_demo:1.0股冗,-p就是指定映射關(guān)系,可以看出前面是宿主機的端口和蚪,后面是鏡像的端口
也可以用--name指定啟動容器的名稱:docker run --name httpserverDemo -p 8091:8089 httpserver_demo:1.0
Dockerfile內(nèi)容解釋:
?java:8就是剛下載的基礎(chǔ)鏡像止状,MAINTAINER是作者,COPY是把本地的jar拷貝到鏡像中攒霹,EXPOSE聲明鏡像開放的接口怯疤,
ENTRYPOINT 是指定在docker run時的命令參數(shù),類似的還是RUN和CMD命令催束,區(qū)別參考:https://www.cnblogs.com/klvchen/p/9238410.html
結(jié)論
可以在啟動鏡像的時候集峦,用--entrypoint 選項來覆蓋Dockfile里ENTRYPOINT 的設(shè)置,來增加JaCoco的javaagent參數(shù)