问题
docker build 慢,docker push 慢
build 慢的原因:
docker build -t
build 慢的解决办法
先调度marathon在目标物理机上启动容器,然后将war包拷到目标物理机,进而拷贝到容器中,启动tomcat
将git 代码 变成镜像的事情,可以交给专门的容器做,理由
Docker 持续集成过程中的性能问题及解决方法
Google开源其Java容器化工具Jib,简化镜像构建全流程
mvn compile jib:build
从中可以看到
[INFO] Retrieving registry credentials for harbor.test.ximalaya.com... [INFO] Getting base image harbor.test.ximalaya.com/test/jdk8-tomcat8... [INFO] Building dependencies layer... [INFO] Building resources layer... [INFO] Building classes layer... [INFO] Retrieving registry credentials for harbor.test.ximalaya.com... [INFO] Finalizing... [INFO] [INFO] Container entrypoint set to [java, -cp, /app/libs/*:/app/resources/:/app/classes/, org.apache.catalina.startup.Bootstrap] [INFO] [INFO] Built and pushed image as harbor.xx/test/jib-demo
与常规的将代码及依赖 打成一个jar 包作为一个layer 不同,jib 将dependencies、resources、 classes(即项目代码) 分别打成一个layer, 在项目实践中,dependencies、resources 变化不多 ,因此能够复用相当一部分空间。
maven pom.xml 配置 针对插件的 0.9.9 版本
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>0.9.9</version> <configuration> <allowInsecureRegistries>false</allowInsecureRegistries> <from> <image>harbor.test.xxx.com/test/jdk8</image> <auth> <username>xxx</username> <password>xxx</password> </auth> </from> <to> <image>harbor.test.xxx.com/test/jib-springboot-demo</image> <auth> <username>xxx</username> <password>xxx</password> </auth> </to> <container> <mainClass>com.xxx.springboot.demo.DockerSpringbootDemoApplication</mainClass> </container> </configuration> </plugin>
还有一种方案 Optimizing Spring Boot apps for Docker
打tag
To tag the image with a simple timestamp, add the following to your pom.xml:
<properties> <maven.build.timestamp.format>yyyyMMdd-HHmmssSSS</maven.build.timestamp.format> </properties> Then in the jib-maven-plugin configuration, set the tag to: <configuration> <to> <image>my-image-name:${maven.build.timestamp}</image> </to> </configuration>
这是一个难题,难点不在如何变成jar,难在如何让一群完全没有docker 经验的人,按照指示,将代码变成jar/war,再变成image
jenkins + 变量方案,jenkins将代码变成jar/war 之后,用变量指定jar/war 位置,根据变量构建Dockerfile,制作镜像。该方案在实施过程中碰到以下问题
假设一个是maven项目,项目根目录下放上Dockerfile、marathon.json/xxx-pod.yaml 文件,自己写一个脚本(比如叫deploy.sh) 用户 maven package
之后,执行 deploy.sh
。该方案有以下问题
灵活性和模板化的边界在哪里?可以参见下 CNI 的设计理念。
构建过程和发布过程
构建和发布的结合部
个人微信订阅号