本教程演示如何通过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. 四个步骤:
为了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' }
gradle-docker插件只是创建一个Dockerfile文件,然后供docker命令行来建立一个image. 因此,你需要在 build.gradle提供一些属性,以便能有效自动运行你的应用。
需要提供:
运行的类,也就是包含main方法的应用类JVM 版本 (缺省是 Java 7)可选项, 一个group id, 适合于 Docker 归类的标签.group = ‘aglover’sourceCompatibility = 1.7mainClassName = ‘com.github.aglover.galoshe.Application’
虽然group不是必须的,可以帮助Docker归类贴上标签,当插件创建一个Docker image时,它会使用 group/name 方式给这个image命名。
最后,启动的主类名是启动应用的入口,F插件会创建一个脚本,这样你的Docker image在启动时会调用这个脚本,脚本类似如下格式:
1 java -classpath your_class_path your_main_class
Dockerfiles 包含一些有关image相应的指令要求,这里的Spring Boot应用只需要一个参数:端口,可以通过插件的exposePort方法设置。
因此,为确保Docker容器能 按照之前定义的application.properites文件暴露端口8080,加入下面脚本到build.gradle 文件:
指定端口 80801 distDocker {2 exposePort 80803 }依次可以想象,在插件中加入addFile实际是Docker的ADD指令,而runCommand会对应aRUN,而setEnvironment会创建一个ENV指令。
最后一步我们运行gradle来创建Docker Image,如下:
$ ./gradlew distDocker当你第一次运行这个命令,它会下载一些所需的Image。构建完成后,你可以查询列出本地的image.文件:
![](/user/files/mWcLWWQahzv0PqJ-nL8tj_d3AJUkqBTCjgHWk2v-2fc.png)在docker中运行这个Image
docker run 332e163221bc
然后打开浏览器,访问localhost:8080即可,本教程演示如何通过gradle将一个Spring Boot应用生成Docker的Image,Docker的Image类似Java的WAR发布包,可以被Docker容器带着在任何操作系统上运行,一个操作系统也可以运行多个Docker容器。
然后打开浏览器,访问localhost:8080即可