如何將Spring Boot應用跑在Docker容器中

平常的Rest服務開發我都會首選SpringBoot,由於它自己的易用性以及自帶的各類方便功能、生態等,今天就簡單講一下如何將Spring Boot應用跑在Docker容器中java

項目搭建

首先打開Idea,選擇初始化一個Spring Boot應用,而後一路回車下去,待Idea下載完依賴,開始編碼docker

如何將Spring Boot應用跑在Docker容器中

這裏寫一個簡單的接口:bash

@RestController
@SpringBootApplication
public class DemoApplication {
 
	@GetMapping("/hello")
	public String hello() {
		return "Hello World";
	}
 
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
複製代碼

而後運行下面的命令驗證服務是否正常:app

mvn clean package -Dmaven.test.skip=true 
java -jar target/demo-0.0.1-SNAPSHOT.jar
複製代碼

容器化

下面咱們就開始容器化這個簡單的Spring Boot應用dom

建立Dockerfile文件curl

首先在項目的根目錄建立一個Dockerfile文件,主要不要搞成駝峯命名:maven

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的去作:tcp

docker build -t demo8 .
複製代碼

若是看到下面的輸出說明執行成功了:ui

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一塊兒使用,正如本文演示的同樣很是簡單。

相關文章
相關標籤/搜索