天天看点

用 Docker、Gradle 来构建、运行、发布一个 Spring Boot 应用

本文演示了如何用 docker、gradle 来构建、运行、发布来一个 spring boot 应用。

<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">jdk 1.8+</a>

<a href="http://www.gradle.org/downloads">gradle 2.3+</a>

项目的目录结构因符合 gradle 的约定。

在 *nix 系统下执行 <code>mkdir -p src/main/java/docker_spring_boot</code> ,生产如下结构 :

build.gradle

编写一个简单的 spring boot 应用 :

<code>src/main/java/com/waylau/docker_spring_boot/application.java</code>:

解释下上面的代码:

类用 <code>@springbootapplication</code> <code>@restcontroller</code> 标识,可用 spring mvc 来处理 web 请求。

<code>@requestmapping</code> 将 <code>/</code> 映射到 <code>home()</code> ,并将"hello docker world" 文本作为响应。

<code>main()</code> 方法使用 spring boot 的 <code>springapplication.run()</code> 方法来启动应用。

编译:

运行:

创建文件 <code>src/main/docker/dockerfile</code>:

解释下这个配置文件:

<code>volume</code> 指定了临时文件目录为<code>/tmp</code>。其效果是在主机 <code>/var/lib/docker</code> 目录下创建了一个临时文件,并链接到容器的<code>/tmp</code>。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。<code>/tmp</code>目录用来持久化到 docker 数据文件夹,因为 spring boot 使用的内嵌 tomcat 容器默认使用<code>/tmp</code>作为工作目录

项目的 jar 文件作为 "app.jar" 添加到容器的

执行构建成为 docker image:

运行 docker image

首先,你在 docker hub 要有注册账号,且创建了相应的库;

其次,docker 推送前,先要登录,否则报<code>unauthorized: access to the requested resource is not authorized</code>的错误

执行:

输出为:

执行推送

docker hub 在国外,有时候拉取 image 极其缓慢,可以使用国内的镜像来实现加速

获取项目镜像, 执行

<a href="http://spring.io/guides/gs/spring-boot-docker/">http://spring.io/guides/gs/spring-boot-docker/</a>

<a href="https://hub.docker.com/r/waylau/docker-spring-boot-gradle/">https://hub.docker.com/r/waylau/docker-spring-boot-gradle/</a>