| 名称 | 链接 | 备注 |
| :-- | :-- | :-- |
| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
这个git项目中有多个文件夹,本章的源码在hellojib文件夹下,如下图红框所示:
准备java应用
准备一个最简单的springboot应用hellojib,用于实战构建docker镜像;
- 该应用是基于maven构建的,启动类如下:
package com.bolingcavalry.hellojib;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HellojibApplication {
public static void main(String[] args) {
SpringApplication.run(HellojibApplication.class, args);
}
}
- 有一个controller用于后面验证服务是否正常:
package com.bolingcavalry.hellojib.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
-
@Description: 普通的controller
-
@author: willzhao E-mail: zq2599@gmail.com
-
@date: 2019/6/29 20:21
*/
@RestController
public class HelloController {
@RequestMapping(“/hello”)
public String hello(){
return "Hello, " + new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).format(new Date());
}
}
- 最重要的部分来了,pom.xml的内容如下,请注意注释:
<project xmlns=“http://maven.apache.org/POM/4.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.6.RELEASE
com.bolingcavalry
hellojib
0.0.1-SNAPSHOT
hellojib
Demo project for Spring Boot
<java.version>1.8</java.version>
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
com.google.cloud.tools
jib-maven-plugin
1.3.0
openjdk:8-jdk-stretch
bolingcavalry/hellojib:${project.version}
-Xms4g
-Xmx4g
8080
上述xml中有以下几处需要注意:
a. 插件的节点中增加了插件jib-maven-plugin的配置;
b. from节点用来设置基础镜像,一般使用openjdk官方镜像,如果您想了解更多请参考《openjdk镜像的tag说明》;
c. to节点用于指定镜像名称和tag;
d. container节点用来设置容器的属性,例如对外暴露的端口、jvm参数等;
完成了上述设置,就可以构建镜像了;
构建成tar文件
还记得常用的docker到处到处命令么:
. docker save命令将本地仓库的docker镜像导出成tar格式的文件;
. docker load命令可以将tar格式的镜像文件导入到本地镜像仓库;
利用Jib,我们可以将java应用做成docker镜像并生成tar格式的文件,操作步骤如下:
- 在上述java工程的pom.xml文件所在目录,执行以下命令:
mvn compile jib:buildTar
- 构建成功后,控制台提示以下信息:
[root@centos7 hellojib]# mvn compile jib:buildTar
[INFO] Scanning for projects…
[INFO]
[INFO] ---------------------< com.bolingcavalry:hellojib >---------------------
[INFO] Building hellojib 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] — maven-resources-plugin:3.1.0:resources (default-resources) @ hellojib —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] — maven-compiler-plugin:3.8.1:compile (default-compile) @ hellojib —
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] — jib-maven-plugin:1.3.0:buildTar (default-cli) @ hellojib —
[INFO]
[INFO] Containerizing application to file at ‘/root/temp/201906/29/hellojib/target/jib-image.tar’…
[INFO] The base image requires auth. Trying again for openjdk:8-jdk-stretch…
[INFO]
[INFO] Container entrypoint set to [java, -Xms4g, -Xmx4g, -cp, /app/resources:/app/classes:/app/libs/*, com.bolingcavalry.hellojib.HellojibApplication]
[INFO]
[INFO] Built image tarball at /root/temp/201906/29/hellojib/target/jib-image.tar
[INFO] Executing tasks:
[INFO] [==============================] 100.0% complete
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.521 s
[INFO] Finished at: 2019-06-30T21:43:32+08:00
[INFO] ------------------------------------------------------------------------
- 去java工程的target目录下,发现生成了名为jib-image.tar的文件,如下图红框所示:
- 在java工程的target目录下执行命令docker load < jib-image.tar即可将该tar文件中的镜像加载到本地镜像仓库:
[root@centos7 target]# docker load < jib-image.tar
2c8d31157b81: Loading layer [==================================================>] 50.07 MB/50.07 MB
ea20c4bf3aae: Loading layer [==================================================>] 4.932 MB/4.932 MB
51774d97c868: Loading layer [==================================================>] 221 B/221 B
51566e3f832b: Loading layer [==================================================>] 104 MB/104 MB
64c0b8425948: Loading layer [==================================================>] 14.91 MB/14.91 MB
e4c3b920750d: Loading layer [==================================================>] 240 B/240 B
8917d4e7f7b3: Loading layer [==================================================>] 1.034 kB/1.034 kB
Loaded image: bolingcavalry/hellojib:0.0.1-SNAPSHOT
- 执行命令docker images可见镜像加载成功:
[root@centos7 target]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bolingcavalry/hellojib 0.0.1-SNAPSHOT cf93bd81fbd5 49 years ago 505 MB
可见通过jib生成的tar是正常的docker镜像文件,可以导入
验证镜像是否可用
- 执行以下命令,即可启动容器:
docker run --rm -p 8080:8080 bolingcavalry/hellojib:0.0.1-SNAPSHOT
- 控制台显示springboot的启动信息:
[root@centos7 target]# docker run --rm -p 8080:8080 bolingcavalry/hellojib:0.0.1-SNAPSHOT
. ____ _ __ _ _
/\ / _’ __ _ () __ __ _ \ \ \ \
( ( )___ | '_ | '| | ’ / _` | \ \ \ \
\/ _)| |)| | | | | || (| | ) ) ) )
’ || .__|| ||| |__, | / / / /
=|_|======|/=////
:: Spring Boot :: (v2.1.6.RELEASE)
2019-06-30 13:56:50.969 INFO 1 — [ main] c.b.hellojib.HellojibApplication : Starting HellojibApplication on c08711533071 with PID 1 (/app/classes started by root in /)
2019-06-30 13:56:50.975 INFO 1 — [ main] c.b.hellojib.HellojibApplication : No active profile set, falling back to default profiles: default
2019-06-30 13:56:52.147 INFO 1 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-06-30 13:56:52.173 INFO 1 — [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-06-30 13:56:52.173 INFO 1 — [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-06-30 13:56:52.261 INFO 1 — [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-06-30 13:56:52.261 INFO 1 — [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1223 ms
2019-06-30 13:56:52.475 INFO 1 — [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService ‘applicationTaskExecutor’
2019-06-30 13:56:52.772 INFO 1 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ‘’
2019-06-30 13:56:52.811 INFO 1 — [ main] c.b.hellojib.HellojibApplication : Started HellojibApplication in 2.202 seconds (JVM running for 2.446)
- 用浏览器访问:http://192.168.121.132:8080/hello ,其中192.168.121.132是宿主机IP地址,如下图,可见springboot服务可以正常访问:
构建到本地镜像仓库
上面的操作是将java应用生成tar文件然后再导入到本地镜像仓库,您也可以直接将java应用构建到本地镜像仓库中:
-
先执行命令docker rmi bolingcavalry/hellojib:0.0.1-SNAPSHOT将前面构建的镜像删除;
-
在pom.xml文件所在目录执行以下命令即可:
mvn clean compile jib:dockerBuild -U
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
分享
1、算法大厂——字节跳动面试题
2、2000页互联网Java面试题大全
3、高阶必备,算法学习
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
上Java开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
分享
1、算法大厂——字节跳动面试题
[外链图片转存中…(img-EI9bo5fG-1713320881864)]
2、2000页互联网Java面试题大全
[外链图片转存中…(img-2gzxNMaS-1713320881864)]
3、高阶必备,算法学习
[外链图片转存中…(img-B9pwwLHl-1713320881864)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!