日常的Rest服务开发我都会首选SpringBoot,因为它本身的易用性以及自带的各种方便功能、生态等,今天就简单讲一下如何将Spring Boot应用跑在Docker容器中
首先打开Idea,选择初始化一个Spring Boot应用,然后一路回车下去,待Idea下载完依赖,开始编码
这里写一个简单的接口:
@RestController?@SpringBootApplication?public?class?DemoApplication?{???????@GetMapping("/hello")?????public?String?hello()?{?????????return?"Hello?World";?????}???????public?static?void?main(String[]?args)?{?????????SpringApplication.run(DemoApplication.class,?args);?????}?}?
然后运行下面的命令验证服务是否正常:
mvn?clean?package?-Dmaven.test.skip=true??java?-jar?target/demo-0.0.1-SNAPSHOT.jar?
下面我们就开始容器化这个简单的Spring Boot应用
创建Dockerfile文件
首先在项目的根目录创建一个Dockerfile文件,主要不要搞成驼峰命名:
From?java:8?????VOLUME?/tmp???#将打包好后的Jar文件放到image中?Add?target/demo-0.0.1-SNAPSHOT.jar?app.jar?#?change?file?access?and?modification?times?RUN?bash?-c?'touch?/app.jar'???EXPOSE?8080?#容器启动的时候运行Jar文件?ENTRYPOINT?["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]?
接下来就去构建Docker镜像,不过通常这一步都会用Jenkins的去做:
docker?build?-t?demo8?.?
如果看到下面的输出说明执行成功了:
Sending?build?context?to?Docker?daemon?14.84MB?Step?1/6?:?FROM?java:8??--->?d23bdf5b1b1b?Step?2/6?:?VOLUME?/tmp??--->?Using?cache??--->?91086d8b7c77?Step?3/6?:?ADD?target/demo-0.0.1-SNAPSHOT.jar?app.jar??--->?d161bed06e8b?Step?4/6?:?RUN?bash?-c?'touch?/app.jar'??--->?Running?in?9fbaff628989??--->?1fc0498bbb06?Removing?intermediate?container?9fbaff628989?Step?5/6?:?EXPOSE?8080??--->?Running?in?a5c44244b267??--->?3b5150c5bdd0?Removing?intermediate?container?a5c44244b267?Step?6/6?:?ENTRYPOINT?java?-Djava.security.egd=file:/dev/./urandom?-jar?/app.jar??--->?Running?in?b7a3baac9d47??--->?23ef7cc5e1b0?Removing?intermediate?container?b7a3baac9d47?Successfully?built?23ef7cc5e1b0?Successfully?tagged?demo8:latest?
到这一步构建完成后,我们就顺利的开始运行:
docker?run?-d?-p?4000:8080?demo8?
然后curl一下刚才的接口看看是否正常:
±?%?curl?localhost:4000/hello??Hello?World%?
我们看到这里是将4000端口映射到了容器中的8080端口,我们进入容器看一下验证一下:
±?%?docker?ps?!10172?CONTAINER?ID?IMAGE?COMMAND?CREATED?STATUS?PORTS?NAMES?5f1b7f29a0b6?988ed6f466b5?"java?-Djava.secur..."?29?minutes?ago?Up?29?minutes?0.0.0.0:4000->8080/tcp?practical_jones?±?%?docker?exec?-it?5f1b7f29a0b6?/bin/bash??root@5f1b7f29a0b6:/?curl?localhost:8080/hello?Hello?World?
SpringBoot打包后直接生成一个可执行的JAR包,天然就非常适合搭配Docker一起使用,正如本文演示的一样非常简单。
领取专属 10元无门槛券
私享最新 技术干货