当前位置: 首页 > 科技观察

借助谷歌,快速实现Java应用容器化

时间:2023-03-13 01:27:14 科技观察

谷歌在2018年底开源了一个新的Java工具Jib,可以轻松将Java应用容器化。使用Jib,我们不需要编写Dockerfile或安装Docker,通过集成到Maven或Gradle插件中,我们可以立即将Java应用程序容器化。开源地址:https://github.com/GoogleContainerTools/jib1.什么是JibJib是一个快速简单的容器镜像构建工具,作为Maven或Gradle的一部分运行,无需编写Dockerfile或运行Docker守护进程。它从Maven或Gradle构建我们的Docker镜像,并通过仅将更改的层(而不是整个应用程序)推送到注册表来节省宝贵的构建时间。现在,让我们将Docker构建过程与Jib构建过程进行比较。Docker构建过程如下。Jib构建过程是这样工作的。二、实战真知1、搭建一个简单的Java项目我们写一个简单的Java类。publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");System.out.println("http://blog.720ui.com");}}接下来,我们创建另一个pom。xml文件。4.0.0com.lianggzone.sample。libhelloworld-samples0.1jarhelloworld-samplesUTF-81.0.23.8.0org.apache.maven.pluginsmaven-compiler-plugin${maven-compiler-plugin.version}1.81.8com.google.cloud.toolsjib-maven-plugin${jib-maven-plugin.version}<配置>registry.cn-hangzhou.aliyuncs.com/lianggzone/oracle_java8registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1<容器>-Xms512m-Xdebugcom.lianggzone.HelloWorld<执行><执行><阶段>包<目标><目标>构建由于默认访问谷歌的gcr.io仓库,国内访问gcr.io经常unstable导致网络超时,所以我用的是国内的阿里云镜像服务,不用访问谷歌的仓库。现在,我们执行mvncompilejib:build命令自动构建,它会从拉取镜像,并将生成的镜像上传到设置的地址。这里笔者也通过`.mvncompilejib:build另外如果出现“loginfailed,notauthorized”,则需要通过dockerlogin进行登录认证。此外,更好的是,您可以考虑将凭据放入Maven中。......registry.cn-hangzhou.aliyuncs.com你的阿里云账号你的阿里云密码***,执行完成后,我们就可以获取到阿里云镜像仓库中的镜像了。大功告成,现在让我们来验证一下。我们通过dockerpull拉取镜像并运行。dockerpullregistry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1dockerrun--namejib-helloworld-itregistry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1/bin/bash执行结果如下。2.构建一个SpringBoot可运行的Jar让我们以一个更复杂的项目来构建一个SpringBoot项目。现在,我们首先需要建立一个项目并创建一个启动类。@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}同时需要一个Web界面。@RestControllerpublicclassWebController{@RequestMapping("/blog")publicStringindex(){return"http://blog.720ui.com";}}接下来,我们创建一个pom.xml文件。4.0.0org.springframework.bootspring-boot-starter-parent2.1.2.RELEASEcom.lianggzone.sample.libspringboot-samples0.1jarspringboot-samplesorg.springframework.bootspring-boot-starter-webUTF-81.0.23.8.0org.apache.maven.pluginsmaven-compiler-plugin<版本>${maven-compiler-plugin.version}1.81.8com.google.cloud.toolsjib-maven-plugin${jib-maven-plugin.version}<配置>registry.cn-hangzhou.aliyuncs.com/lianggzone/oracle_java8registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1<容器>-Xms512m-Xdebug/容器>packagebuild/plugins>现在,我们执行mvncompilejib:build命令来自动构建。执行完成后,我们就可以获取到阿里云镜像仓库中的镜像了。现在,让我们再次验证一下。我们通过dockerpull拉取镜像并运行。dockerpullregistry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1dockerrun-p8080:8080--namejib-springboot-itregistry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1/bin/bash执行结果,如下。现在,我们访问http://localhost:8080/blog,就可以正常调用API接口了。3.构建WAR工程Jib也支持WAR工程。如果Maven项目使用war-packaging类型,Jib会默认使用distrolessJetty作为基础镜像来部署项目。要使用不同的基础图像,我们可以自定义。以下是使用Tomcat镜像的示例。<配置>tomcat:8.5-jre8-alpine/usr/local/tomcat/webapps/ROOT