如何將Spring Boot應(yīng)用跑在Docker容器中
日常的Rest服務(wù)開發(fā)我都會首選SpringBoot,因為它本身的易用性以及自帶的各種方便功能、生態(tài)等,今天就簡單講一下如何將Spring Boot應(yīng)用跑在Docker容器中
項目搭建
首先打開Idea,選擇初始化一個Spring Boot應(yīng)用,然后一路回車下去,待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);
- }
- }
然后運行下面的命令驗證服務(wù)是否正常:
- mvn clean package -Dmaven.test.skip=true
- java -jar target/demo-0.0.1-SNAPSHOT.jar
容器化
下面我們就開始容器化這個簡單的Spring Boot應(yīng)用
創(chuàng)建Dockerfile文件
首先在項目的根目錄創(chuàng)建一個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"]
構(gòu)建鏡像
接下來就去構(gòu)建Docker鏡像,不過通常這一步都會用Jenkins的去做:
- docker build -t demo8 .
如果看到下面的輸出說明執(zhí)行成功了:
- 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
運行鏡像
到這一步構(gòu)建完成后,我們就順利的開始運行:
- docker run -d -p 4000:8080 demo8
然后curl一下剛才的接口看看是否正常:
- ± % curl localhost:4000/hello
- Hello World%
我們看到這里是將4000端口映射到了容器中的8080端口,我們進(jìn)入容器看一下驗證一下:
- ± % 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
總結(jié)
SpringBoot打包后直接生成一個可執(zhí)行的JAR包,天然就非常適合搭配Docker一起使用,正如本文演示的一樣非常簡單。