本文演示了如何用 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>