使用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 讓其他人直接使用。
※React Native BackHandler exitApp 源碼分析
TAG:程序員小新人學習 |