當前位置:
首頁 > 知識 > 使用gradle生成Spring Boot應用的Docker Image

使用gradle生成Spring Boot應用的Docker Image

本教程演示如何通過gradle將一個Spring Boot應用生成Docker的Image,Docker的Image類似Java的WAR發布包,可以被Docker容器帶著在任何操作系統上運行,一個操作系統也可以運行多個Docker容器。

本案例源碼 Github repository dubbed galoshe.

首先,基於Spring boot的應用很簡單,通過瀏覽器輸出Hello World,代碼如下:

@RestController

@Configuration

@EnableAutoConfiguration

@ComponentScan

public class Application {

public static void main(String[] args) {

ApplicationContext ctx = SpringApplication.run(Application.class, args);

}

@RequestMapping("/")

public String index() {

return "Hello to you, world";

}

}

這是訪問URL根目錄/會返回Hello的應用,application.properties配置如下:

server.port: 8080

下面是使用gradle來配置這個應用,以便生成Docker的Imag. 四個步驟:

1. 加入gradle插件

為了Docker-ize 應用,需要兩個插件docker 和 application. gradle有兩個docker插件開源項目:gradle-docker plugin和及 other plugin。

將插件加入配置文件build.gradle

apply plugin: "application"

apply plugin: "docker"

需要在dependencies 配置告訴gradle如何發現這些插件。

為Docker插件指定classpath:

buildscript {

repositories { mavenCentral() }

dependencies {

classpath "se.transmode.gradle:gradle-docker:1.1"

}

}

2.提供一些屬性

gradle-docker插件只是創建一個Dockerfile文件,然後供docker命令行來建立一個image. 因此,你需要在 build.gradle提供一些屬性,以便能有效自動運行你的應用。

需要提供:

  • 運行的類,也就是包含main方法的應用類
  • JVM 版本 (預設是 Java 7)
  • 可選項, 一個group id, 適合於 Docker 歸類的標籤.

group = "aglover"

sourceCompatibility = 1.7

mainClassName = "com.github.aglover.galoshe.Application"

雖然group不是必須的,可以幫助Docker歸類貼上標籤,當插件創建一個Docker image時,它會使用 group/name 方式給這個image命名。

最後,啟動的主類名是啟動應用的入口,F插件會創建一個腳本,這樣你的Docker image在啟動時會調用這個腳本,腳本類似如下格式:

1java -classpath your_class_path your_main_class

3.指定Dockerfile所需

Dockerfiles 包含一些有關image相應的指令要求,重要點見這裡,這裡的Spring Boot應用只需要一個參數:埠,可以通過插件的exposePort方法設置。

因此,為確保Docker容器能 按照之前定義的application.properites文件暴露埠8080,加入下面腳本到build.gradle 文件:

指定埠 8080

1distDocker {

2 exposePort 8080

3}

依次可以想像,在插件中加入addFile實際是Docker的ADD指令,而runCommand會對應aRUN,而setEnvironment會創建一個ENV指令。

4.構建運行

最後一步我們運行gradle來創建Docker Image,如下:

$ ./gradlew distDocker

當你第一次運行這個命令,它會下載一些所需的Image。構建完成後,你可以查詢列出本地的image.文件:

1

$ docker images

2

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

3

aglover/galoshe latest 332e163221bc 20 hours ago 1.042 GB

4

dockerfile/java latest f9793c257930 3 weeks ago 1.026 GB

在docker中運行這個Image

docker run 332e163221bc

然後打開瀏覽器,訪問localhost:8080即可

當然你可以發布這個image 讓其他人直接使用。

使用gradle生成Spring Boot應用的Docker Image

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

React Native BackHandler exitApp 源碼分析

TAG:程序員小新人學習 |